├── src ├── index.ts ├── lib │ ├── openai │ │ ├── index.ts │ │ ├── node.ts │ │ └── edge.ts │ ├── streaming │ │ ├── index.ts │ │ ├── transforms.ts │ │ └── streams.ts │ ├── index.ts │ ├── pinned.ts │ ├── backoff.ts │ ├── errors.ts │ └── types.ts └── globs │ └── shared.ts ├── node.d.ts ├── typedoc.json ├── node.js ├── test ├── env.ts ├── snapshots │ ├── streams.test.ts.snap │ └── streams.test.ts.md └── streams.test.ts ├── node.cjs ├── .gitignore ├── example ├── .eslintrc.json ├── public │ ├── favicon.ico │ ├── vercel.svg │ ├── thirteen.svg │ └── next.svg ├── next.config.js ├── src │ ├── pages │ │ ├── _app.tsx │ │ ├── _document.tsx │ │ ├── api │ │ │ └── hello.ts │ │ └── index.tsx │ └── styles │ │ ├── globals.css │ │ └── Home.module.css ├── .gitignore ├── package.json ├── tsconfig.json ├── README.md └── yarn.lock ├── ava.config.mjs ├── tsconfig.json ├── LICENSE ├── .eslintrc ├── .github └── workflows │ ├── ci.yml │ ├── release.prod.yml │ └── release.canary.yml ├── package.json └── README.md /src/index.ts: -------------------------------------------------------------------------------- 1 | export * from "./lib"; 2 | -------------------------------------------------------------------------------- /node.d.ts: -------------------------------------------------------------------------------- 1 | export * from "./dist/lib/openai/node"; -------------------------------------------------------------------------------- /src/lib/openai/index.ts: -------------------------------------------------------------------------------- 1 | export * from "./edge"; -------------------------------------------------------------------------------- /typedoc.json: -------------------------------------------------------------------------------- 1 | { 2 | "out": "./public/docs" 3 | } -------------------------------------------------------------------------------- /node.js: -------------------------------------------------------------------------------- 1 | export * from "./dist/lib/openai/node.js"; -------------------------------------------------------------------------------- /test/env.ts: -------------------------------------------------------------------------------- 1 | import { config } from "dotenv"; 2 | config(); -------------------------------------------------------------------------------- /node.cjs: -------------------------------------------------------------------------------- 1 | module.exports = require("./dist/lib/openai/node.js"); -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .env 2 | node_modules 3 | dist 4 | .DS_Store 5 | 6 | public/docs -------------------------------------------------------------------------------- /example/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "next/core-web-vitals" 3 | } 4 | -------------------------------------------------------------------------------- /src/lib/streaming/index.ts: -------------------------------------------------------------------------------- 1 | export * from "./streams"; 2 | export * from "./transforms"; -------------------------------------------------------------------------------- /example/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SpellcraftAI/openai-streams/HEAD/example/public/favicon.ico -------------------------------------------------------------------------------- /src/lib/index.ts: -------------------------------------------------------------------------------- 1 | export * from "./openai"; 2 | export * from "./types"; 3 | export * from "./streaming"; 4 | export * from "./errors"; -------------------------------------------------------------------------------- /test/snapshots/streams.test.ts.snap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SpellcraftAI/openai-streams/HEAD/test/snapshots/streams.test.ts.snap -------------------------------------------------------------------------------- /example/next.config.js: -------------------------------------------------------------------------------- 1 | /** @type {import('next').NextConfig} */ 2 | const nextConfig = { 3 | reactStrictMode: true, 4 | } 5 | 6 | module.exports = nextConfig 7 | -------------------------------------------------------------------------------- /src/globs/shared.ts: -------------------------------------------------------------------------------- 1 | export const RUNTIME = globalThis.process?.versions?.node ? "node" : "edge"; 2 | export const ENCODER = new TextEncoder(); 3 | export const DECODER = new TextDecoder(); -------------------------------------------------------------------------------- /src/lib/pinned.ts: -------------------------------------------------------------------------------- 1 | export type { 2 | CreateChatCompletionRequest, 3 | CreateCompletionRequest, 4 | CreateEditRequest, 5 | CreateEmbeddingRequest, 6 | CreateFineTuneRequest, 7 | CreateImageRequest, 8 | } from "openai"; -------------------------------------------------------------------------------- /example/src/pages/_app.tsx: -------------------------------------------------------------------------------- 1 | import "@/styles/globals.css"; 2 | import type { AppProps } from "next/app"; 3 | 4 | export default function App({ Component, pageProps }: AppProps) { 5 | return ; 6 | } 7 | -------------------------------------------------------------------------------- /ava.config.mjs: -------------------------------------------------------------------------------- 1 | export const avaConfig = { 2 | "files": [ 3 | "test/**/*.test.ts" 4 | ], 5 | "extensions": { 6 | "ts": "module" 7 | }, 8 | "nodeArguments": [ 9 | "--no-warnings", 10 | "--loader=@tsmodule/tsmodule/loader" 11 | ] 12 | }; 13 | 14 | export default avaConfig; -------------------------------------------------------------------------------- /example/src/pages/_document.tsx: -------------------------------------------------------------------------------- 1 | import { Html, Head, Main, NextScript } from "next/document"; 2 | 3 | export default function Document() { 4 | return ( 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | ); 13 | } 14 | -------------------------------------------------------------------------------- /example/src/pages/api/hello.ts: -------------------------------------------------------------------------------- 1 | import { OpenAI } from "openai-streams"; 2 | 3 | export default async function handler() { 4 | const stream = await OpenAI( 5 | "completions", 6 | { 7 | model: "text-davinci-003", 8 | prompt: "Write a sentence.\n\n", 9 | max_tokens: 100 10 | } 11 | ); 12 | 13 | return new Response(stream); 14 | } 15 | 16 | export const config = { 17 | runtime: "edge" 18 | }; -------------------------------------------------------------------------------- /example/.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.js 7 | 8 | # testing 9 | /coverage 10 | 11 | # next.js 12 | /.next/ 13 | /out/ 14 | 15 | # production 16 | /build 17 | 18 | # misc 19 | .DS_Store 20 | *.pem 21 | 22 | # debug 23 | npm-debug.log* 24 | yarn-debug.log* 25 | yarn-error.log* 26 | .pnpm-debug.log* 27 | 28 | # local env files 29 | .env*.local 30 | 31 | # vercel 32 | .vercel 33 | 34 | # typescript 35 | *.tsbuildinfo 36 | next-env.d.ts 37 | -------------------------------------------------------------------------------- /example/public/vercel.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /example/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "example", 3 | "version": "0.1.0", 4 | "private": true, 5 | "scripts": { 6 | "dev": "next dev", 7 | "build": "next build", 8 | "start": "next start", 9 | "lint": "next lint" 10 | }, 11 | "dependencies": { 12 | "@next/font": "13.1.6", 13 | "@types/node": "18.14.0", 14 | "@types/react": "18.0.28", 15 | "@types/react-dom": "18.0.11", 16 | "eslint": "8.34.0", 17 | "eslint-config-next": "13.1.6", 18 | "next": "13.1.6", 19 | "openai-streams": "^1.0.19", 20 | "react": "18.2.0", 21 | "react-dom": "18.2.0", 22 | "typescript": "4.9.5" 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /test/snapshots/streams.test.ts.md: -------------------------------------------------------------------------------- 1 | # Snapshot report for `test/streams.test.ts` 2 | 3 | The actual snapshot is saved in `streams.test.ts.snap`. 4 | 5 | Generated by [AVA](https://avajs.dev). 6 | 7 | ## mode = 'tokens': error handling 8 | 9 | > Tokens mode should throw for MAX_TOKENS. 10 | 11 | `{␊ 12 | "type": "MAX_TOKENS",␊ 13 | "message": "Maximum number of tokens reached."␊ 14 | }` 15 | 16 | ## ChatGPT error propagation 17 | 18 | > Snapshot 1 19 | 20 | Error (OpenAIError) { 21 | type: 'INVALID_API_KEY', 22 | message: 'Incorrect API key provided. You can find your API key at https://platform.openai.com/account/api-keys.', 23 | } 24 | -------------------------------------------------------------------------------- /example/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es5", 4 | "lib": ["dom", "dom.iterable", "esnext"], 5 | "allowJs": true, 6 | "skipLibCheck": true, 7 | "strict": true, 8 | "forceConsistentCasingInFileNames": true, 9 | "noEmit": true, 10 | "esModuleInterop": true, 11 | "module": "esnext", 12 | "moduleResolution": "node", 13 | "resolveJsonModule": true, 14 | "isolatedModules": true, 15 | "jsx": "preserve", 16 | "incremental": true, 17 | "baseUrl": ".", 18 | "paths": { 19 | "@/*": ["./src/*"] 20 | } 21 | }, 22 | "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"], 23 | "exclude": ["node_modules"] 24 | } 25 | -------------------------------------------------------------------------------- /src/lib/openai/node.ts: -------------------------------------------------------------------------------- 1 | import { Readable } from "stream"; 2 | import { yieldStream } from "yield-stream"; 3 | import { OpenAINodeClient } from "../types"; 4 | import { OpenAI as OpenAIEdge } from "./edge"; 5 | 6 | /** 7 | * A Node.js client for OpenAI's API, using NodeJS.Readable. 8 | * 9 | * Create a new completion stream. Stream of strings by default, set `mode: 10 | * 'raw'` for the raw stream of JSON objects. 11 | * 12 | * @note Use `openai-streams/edge` for Edge Runtime or Browser. 13 | */ 14 | export const OpenAI: OpenAINodeClient = async ( 15 | endpoint, 16 | args, 17 | options, 18 | ) => { 19 | const stream = await OpenAIEdge(endpoint, args, options); 20 | const nodeStream = Readable.from(yieldStream(stream)); 21 | 22 | return nodeStream; 23 | }; -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "include": [ 3 | "*env.d.ts", 4 | "src/**/*" 5 | ], 6 | "exclude": [ 7 | "node_modules", 8 | "test/**" 9 | ], 10 | "compilerOptions": { 11 | "moduleResolution": "Node", 12 | "target": "ESNext", 13 | "module": "ESNext", 14 | "lib": [ 15 | "ESNext", 16 | "DOM" 17 | ], 18 | "jsx": "preserve", 19 | "rootDir": "src", 20 | "outDir": "dist", 21 | "allowJs": true, 22 | "importHelpers": true, 23 | "esModuleInterop": true, 24 | "allowSyntheticDefaultImports": true, 25 | "strict": true, 26 | "noUnusedLocals": true, 27 | "noUnusedParameters": true, 28 | "noImplicitReturns": true, 29 | "noFallthroughCasesInSwitch": true, 30 | "skipLibCheck": true, 31 | "resolveJsonModule": true, 32 | "declaration": true, 33 | "sourceMap": true, 34 | "checkJs": true, 35 | "noEmit": false, 36 | "forceConsistentCasingInFileNames": true, 37 | "isolatedModules": true, 38 | "incremental": false 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Permission is hereby granted, free of charge, to any person obtaining a copy of 2 | this software and associated documentation files (the "Software"), to deal in 3 | the Software without restriction, including without limitation the rights to 4 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 5 | the Software, and to permit persons to whom the Software is furnished to do so, 6 | subject to the following conditions: 7 | 8 | The above copyright notice and this permission notice shall be included in all 9 | copies or substantial portions of the Software. 10 | 11 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 12 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 13 | FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 14 | COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 15 | IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 16 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -------------------------------------------------------------------------------- /example/public/thirteen.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "extends": [ 3 | "plugin:@typescript-eslint/recommended" 4 | ], 5 | "parser": "@typescript-eslint/parser", 6 | "plugins": ["@typescript-eslint"], 7 | "rules": { 8 | 9 | "no-console": "error", 10 | "no-trailing-spaces": "error", 11 | "max-len": [1, 80, 2, { 12 | "ignorePattern": "^import\\s.+\\sfrom\\s.+;$", 13 | "ignoreUrls": true, 14 | "ignoreStrings": true, 15 | "ignoreTemplateLiterals": true, 16 | "ignoreRegExpLiterals": true 17 | }], 18 | 19 | "@typescript-eslint/type-annotation-spacing": ["error"], 20 | 21 | "@typescript-eslint/ban-ts-comment": [ 22 | "error", 23 | { 24 | "ts-nocheck": "allow-with-description", 25 | "ts-ignore": "allow-with-description" 26 | } 27 | ], 28 | 29 | "indent": "off", 30 | "@typescript-eslint/indent": ["error", 2], 31 | 32 | "semi": "off", 33 | "@typescript-eslint/semi": ["error", "always"], 34 | 35 | "quotes": "off", 36 | "@typescript-eslint/quotes": ["error", "double"], 37 | 38 | "object-curly-spacing": "off", 39 | "@typescript-eslint/object-curly-spacing": ["error", "always"] 40 | } 41 | } -------------------------------------------------------------------------------- /.github/workflows/ci.yml: -------------------------------------------------------------------------------- 1 | name: Test changes 2 | 3 | on: 4 | - push 5 | - pull_request_target 6 | 7 | env: 8 | GITHUB_TOKEN: ${{ secrets.OVERRIDE_GITHUB_TOKEN }} 9 | OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }} 10 | 11 | jobs: 12 | test: 13 | name: Node ${{ matrix.nodejs }} on ${{ matrix.os }} 14 | runs-on: ${{ matrix.os }} 15 | timeout-minutes: 10 16 | strategy: 17 | matrix: 18 | nodejs: [ 19 | 18, 20 | # 16, 21 | # "lts/*" 22 | ] 23 | os: [ 24 | ubuntu-latest, 25 | macos-latest, 26 | # windows-latest, 27 | ] 28 | steps: 29 | 30 | - name: Use Git checkout with submodules 31 | uses: actions/checkout@v3 32 | with: 33 | submodules: recursive 34 | token: ${{ secrets.OVERRIDE_GITHUB_TOKEN }} 35 | 36 | - name: Use PNPM 37 | uses: pnpm/action-setup@v2 38 | with: 39 | version: latest 40 | 41 | - name: Use Node.js ${{ matrix.node-version }} 42 | uses: actions/setup-node@v3 43 | with: 44 | cache: pnpm 45 | node-version: ${{ matrix.node-version }} 46 | 47 | - name: Install 48 | run: pnpm i 49 | 50 | - name: Test 51 | run: pnpm test -------------------------------------------------------------------------------- /example/public/next.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/lib/backoff.ts: -------------------------------------------------------------------------------- 1 | /* eslint-disable no-console */ 2 | import type NodeFetch from "node-fetch"; 3 | import type { RequestInfo as NodeFetchRequestInfo, RequestInit as NodeFetchRequestInit } from "node-fetch"; 4 | 5 | type Fetch = typeof NodeFetch | typeof fetch; 6 | 7 | export interface BackoffOptions { 8 | maxRetries: number; 9 | delay: number; 10 | } 11 | 12 | export const fetchWithBackoff = async ( 13 | input: RequestInfo & NodeFetchRequestInfo, 14 | init?: RequestInit & NodeFetchRequestInit, 15 | fetch: Fetch = globalThis.fetch, 16 | { delay, maxRetries }: BackoffOptions = { 17 | delay: 500, 18 | maxRetries: 7 19 | } 20 | ) => { 21 | if (!fetch) { 22 | throw new Error("No fetch implementation found."); 23 | } 24 | 25 | for (let i = 0; i <= maxRetries; i++) { 26 | try { 27 | const response = await fetch(input, init); 28 | 29 | if (!response.ok) { 30 | const errorData = await response.json(); 31 | if (errorData.type === "RATE_LIMIT_REACHED") { 32 | throw new Error("RATE_LIMIT_REACHED"); 33 | } 34 | } 35 | 36 | return response; 37 | } catch (error: any) { 38 | if ( 39 | error.message === "RATE_LIMIT_REACHED" && 40 | i < maxRetries 41 | ) { 42 | console.log("Rate limit reached. Retrying in " + delay + "ms"); 43 | await new Promise((resolve) => setTimeout(resolve, delay)); 44 | 45 | delay *= 2; 46 | } else { 47 | throw error; 48 | } 49 | } 50 | } 51 | 52 | throw new Error("Max retries reached."); 53 | }; -------------------------------------------------------------------------------- /src/lib/errors.ts: -------------------------------------------------------------------------------- 1 | export const OpenAIErrors = { 2 | "NO_API_KEY": "No API key provided. Please set the OPENAI_API_KEY environment variable or pass the { apiKey } option.", 3 | "MAX_TOKENS": "Maximum number of tokens reached.", 4 | "UNKNOWN": "An unknown error occurred.", 5 | "INVALID_API_KEY": "Incorrect API key provided. You can find your API key at https://platform.openai.com/account/api-keys.", 6 | "INVALID_MODEL": "The model does not exist", 7 | "RATE_LIMIT_REACHED": "You are sending requests too quickly. Pace your requests. Read the Rate limit guide.", 8 | "EXCEEDED_QUOTA": "You have hit your maximum monthly spend (hard limit) which you can view in the account billing section. Apply for a quota increase.", 9 | "ENGINE_OVERLOAD": "Our servers are experiencing high traffic. Please retry your requests after a brief wait.", 10 | "SERVER_ERROR": "Issue on our servers. Retry your request after a brief wait and contact us if the issue persists. Check the status page.", 11 | } as const; 12 | 13 | export type OpenAIErrorType = keyof typeof OpenAIErrors; 14 | export type OpenAIErrorMessage = typeof OpenAIErrors[OpenAIErrorType]; 15 | 16 | export class OpenAIError extends Error { 17 | type: OpenAIErrorType; 18 | message: OpenAIErrorMessage; 19 | 20 | constructor( 21 | type: OpenAIErrorType, 22 | ) { 23 | const message = OpenAIErrors[type]; 24 | 25 | super(message); 26 | this.message = message; 27 | this.type = type; 28 | } 29 | 30 | toJSON() { 31 | return { 32 | type: this.type, 33 | message: this.message, 34 | }; 35 | } 36 | } -------------------------------------------------------------------------------- /example/README.md: -------------------------------------------------------------------------------- 1 | This is a [Next.js](https://nextjs.org/) project bootstrapped with [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app). 2 | 3 | ## Getting Started 4 | 5 | First, run the development server: 6 | 7 | ```bash 8 | npm run dev 9 | # or 10 | yarn dev 11 | # or 12 | pnpm dev 13 | ``` 14 | 15 | Open [http://localhost:3000](http://localhost:3000) with your browser to see the result. 16 | 17 | You can start editing the page by modifying `pages/index.tsx`. The page auto-updates as you edit the file. 18 | 19 | [API routes](https://nextjs.org/docs/api-routes/introduction) can be accessed on [http://localhost:3000/api/hello](http://localhost:3000/api/hello). This endpoint can be edited in `pages/api/hello.ts`. 20 | 21 | The `pages/api` directory is mapped to `/api/*`. Files in this directory are treated as [API routes](https://nextjs.org/docs/api-routes/introduction) instead of React pages. 22 | 23 | This project uses [`next/font`](https://nextjs.org/docs/basic-features/font-optimization) to automatically optimize and load Inter, a custom Google Font. 24 | 25 | ## Learn More 26 | 27 | To learn more about Next.js, take a look at the following resources: 28 | 29 | - [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API. 30 | - [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial. 31 | 32 | You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js/) - your feedback and contributions are welcome! 33 | 34 | ## Deploy on Vercel 35 | 36 | The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js. 37 | 38 | Check out our [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details. 39 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "author": "Spellcraft Inc. ", 3 | "name": "openai-streams", 4 | "description": "Tools for working with OpenAI streams in Node.js and TypeScript.", 5 | "homepage": "https://github.com/SpellcraftAI/openai-streams", 6 | "version": "6.1.0", 7 | "license": "MIT", 8 | "platform": "node", 9 | "engines": { 10 | "node": ">=14" 11 | }, 12 | "types": "dist/index.d.ts", 13 | "files": [ 14 | "dist", 15 | "./node.*" 16 | ], 17 | "exports": { 18 | "./package.json": "./package.json", 19 | "./node": { 20 | "import": "./node.js", 21 | "require": "./node.cjs" 22 | }, 23 | ".": { 24 | "import": "./dist/index.js", 25 | "require": "./dist/index.cjs" 26 | }, 27 | "./*": { 28 | "import": "./dist/*/index.js", 29 | "require": "./dist/*/index.cjs" 30 | } 31 | }, 32 | "scripts": { 33 | "dev": "tsmodule dev", 34 | "export-docs": "pnpm typedoc src", 35 | "export": "tsmodule build", 36 | "cjs": "tsmodule build -b -f cjs", 37 | "build": "pnpm export && pnpm export-docs", 38 | "test": "ava", 39 | "prepublishOnly": "pnpm test", 40 | "lint": "eslint src --fix" 41 | }, 42 | "devDependencies": { 43 | "@tsmodule/tsmodule": "^44.5.0", 44 | "@types/node": "^20.2.1", 45 | "@typescript-eslint/eslint-plugin": "^5.59.6", 46 | "@typescript-eslint/parser": "^5.59.6", 47 | "ava": "^5.2.0", 48 | "dotenv": "^16.0.3", 49 | "eslint": "^8.41.0", 50 | "node-fetch": "^3.3.1", 51 | "openai": "^3.3.0", 52 | "typedoc": "^0.24.7", 53 | "typescript": "^5.0.4" 54 | }, 55 | "dependencies": { 56 | "eventsource-parser": "^1.0.0", 57 | "yield-stream": "^3.0.0" 58 | }, 59 | "keywords": [ 60 | "openai", 61 | "typescript", 62 | "streams", 63 | "gpt-3", 64 | "gpt-4" 65 | ], 66 | "release-it": { 67 | "git": { 68 | "commitMessage": "release: v${version}", 69 | "tagAnnotation": "v${version}" 70 | }, 71 | "github": { 72 | "release": true, 73 | "releaseName": "v${version}" 74 | } 75 | } 76 | } 77 | -------------------------------------------------------------------------------- /.github/workflows/release.prod.yml: -------------------------------------------------------------------------------- 1 | name: Release (production) 2 | 3 | on: 4 | workflow_dispatch: {} 5 | 6 | pull_request_target: 7 | types: 8 | - closed 9 | 10 | branches: 11 | - master 12 | 13 | env: 14 | GITHUB_TOKEN: ${{ secrets.OVERRIDE_GITHUB_TOKEN }} 15 | OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }} 16 | 17 | jobs: 18 | Release: 19 | if: github.event_name == 'workflow_dispatch' || github.event.pull_request.merged == true 20 | 21 | name: Node.js v${{ matrix.nodejs }} (${{ matrix.os }}) 22 | runs-on: ${{ matrix.os }} 23 | timeout-minutes: 10 24 | 25 | strategy: 26 | matrix: 27 | nodejs: [18] 28 | os: [ubuntu-latest] 29 | 30 | steps: 31 | - uses: actions/checkout@v2 32 | - uses: actions/setup-node@v3 33 | with: 34 | node-version: ${{ matrix.nodejs }} 35 | 36 | - name: Authenticate with private NPM package 37 | run: echo "//registry.npmjs.org/:_authToken=${{ secrets.NPM_TOKEN }}" > ~/.npmrc 38 | 39 | - name: git config 40 | run: | 41 | git config user.name "${GITHUB_ACTOR}" 42 | git config user.email "${GITHUB_ACTOR}@users.noreply.github.com" 43 | 44 | - name: Use Git checkout with submodules 45 | uses: actions/checkout@v3 46 | with: 47 | submodules: recursive 48 | token: ${{ secrets.OVERRIDE_GITHUB_TOKEN }} 49 | 50 | - name: Use PNPM 51 | uses: pnpm/action-setup@v2 52 | with: 53 | version: latest 54 | 55 | - name: Use Node.js ${{ matrix.node-version }} 56 | uses: actions/setup-node@v3 57 | with: 58 | cache: pnpm 59 | node-version: ${{ matrix.node-version }} 60 | 61 | - name: Install 62 | run: pnpm i 63 | 64 | - name: Configure Git 65 | run: | 66 | git config user.name "${GITHUB_ACTOR}" 67 | git config user.email "${GITHUB_ACTOR}@users.noreply.github.com" 68 | 69 | - name: Build (ESM) 70 | run: pnpm build 71 | 72 | - name: Test & Release (ESM) 73 | run: npx release-it minor --ci -VV 74 | 75 | - name: Build (CJS) 76 | run: pnpm cjs 77 | 78 | - name: Test & Release (CJS) 79 | run: npm version prerelease --no-git-tag-version && npm publish --tag cjs 80 | -------------------------------------------------------------------------------- /.github/workflows/release.canary.yml: -------------------------------------------------------------------------------- 1 | name: Release (canary) 2 | 3 | env: 4 | GITHUB_TOKEN: ${{ secrets.OVERRIDE_GITHUB_TOKEN }} 5 | OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }} 6 | 7 | on: 8 | workflow_dispatch: {} 9 | 10 | pull_request_target: 11 | types: 12 | - closed 13 | 14 | branches: 15 | - canary 16 | 17 | jobs: 18 | Release: 19 | if: github.event_name == 'workflow_dispatch' || github.event.pull_request.merged == true 20 | 21 | name: Node.js v${{ matrix.nodejs }} (${{ matrix.os }}) 22 | runs-on: ${{ matrix.os }} 23 | timeout-minutes: 10 24 | 25 | strategy: 26 | matrix: 27 | nodejs: [18] 28 | os: [ubuntu-latest] 29 | 30 | steps: 31 | - uses: actions/checkout@v2 32 | - uses: actions/setup-node@v3 33 | with: 34 | node-version: ${{ matrix.nodejs }} 35 | 36 | - name: Authenticate with private NPM package 37 | run: echo "//registry.npmjs.org/:_authToken=${{ secrets.NPM_TOKEN }}" > ~/.npmrc 38 | 39 | - name: git config 40 | run: | 41 | git config user.name "${GITHUB_ACTOR}" 42 | git config user.email "${GITHUB_ACTOR}@users.noreply.github.com" 43 | 44 | - name: Use Git checkout with submodules 45 | uses: actions/checkout@v3 46 | with: 47 | submodules: recursive 48 | token: ${{ secrets.OVERRIDE_GITHUB_TOKEN }} 49 | 50 | - name: Use PNPM 51 | uses: pnpm/action-setup@v2 52 | with: 53 | version: latest 54 | 55 | - name: Use Node.js ${{ matrix.node-version }} 56 | uses: actions/setup-node@v3 57 | with: 58 | cache: pnpm 59 | node-version: ${{ matrix.node-version }} 60 | 61 | - name: Install 62 | run: pnpm i 63 | 64 | - name: Configure Git 65 | run: | 66 | git config user.name "${GITHUB_ACTOR}" 67 | git config user.email "${GITHUB_ACTOR}@users.noreply.github.com" 68 | 69 | - name: Build (ESM) 70 | run: pnpm build 71 | 72 | - name: Test & Release (ESM) 73 | run: npx release-it --preRelease=canary --ci -VV 74 | 75 | - name: Build (CJS) 76 | run: pnpm cjs 77 | 78 | - name: Test & Release (CJS) 79 | run: npx release-it --no-git --preRelease=cjs --github.release --ci --VV 80 | -------------------------------------------------------------------------------- /src/lib/streaming/transforms.ts: -------------------------------------------------------------------------------- 1 | /* eslint-disable no-console */ 2 | import { Transform } from "yield-stream"; 3 | import { ENCODER, DECODER } from "../../globs/shared"; 4 | import { OpenAIError } from "../errors"; 5 | 6 | /** 7 | * Parse the first text choice from an OpenAI API response. It may be stored on 8 | * result.choices[0].text or now, result.choices[0].message for Chat. 9 | */ 10 | export const getTokensFromResponse = (response: any) => { 11 | // console.log(JSON.stringify(response, null, 2)); 12 | const firstResponse = response?.choices?.[0]; 13 | if (!firstResponse) { 14 | console.error("No choices received from OpenAI"); 15 | throw new OpenAIError("UNKNOWN"); 16 | } 17 | 18 | const text = firstResponse?.text ?? firstResponse?.message; 19 | if (typeof text !== "string") { 20 | console.error("No text received from OpenAI choice"); 21 | throw new OpenAIError("UNKNOWN"); 22 | } 23 | 24 | return text; 25 | }; 26 | 27 | /** 28 | * A transformer that receives chunks of parsed server sent events from OpenAI 29 | * and yields the delta of the first choice. 30 | */ 31 | export const ChatParser: Transform = async function* (chunk) { 32 | const decoded = DECODER.decode(chunk); 33 | const response = JSON.parse(decoded); 34 | const firstResult = response?.choices?.[0]; 35 | const { delta } = firstResult ?? {}; 36 | 37 | if (typeof delta !== "object") { 38 | console.error("Received invalid delta from OpenAI in ChatParser."); 39 | throw new OpenAIError("UNKNOWN"); 40 | } 41 | 42 | const { content } = delta; 43 | if (content) { 44 | yield ENCODER.encode(content); 45 | } 46 | }; 47 | 48 | /** 49 | * A transformer that receives chunks of parsed server sent events from OpenAI 50 | * and yields the text of the first choice. 51 | */ 52 | export const TokenParser: Transform = async function* (chunk) { 53 | const decoded = DECODER.decode(chunk); 54 | const response = JSON.parse(decoded); 55 | const tokens = getTokensFromResponse(response); 56 | 57 | yield ENCODER.encode(tokens); 58 | }; 59 | 60 | /** 61 | * A transformer that receives chunks of parsed server sent events from OpenAI 62 | * and yields the JSON of the first choice's logprobs. 63 | */ 64 | export const LogprobsParser: Transform = async function* (chunk) { 65 | const ENCODER = new TextEncoder(); 66 | const DECODER = new TextDecoder(); 67 | 68 | const decoded = DECODER.decode(chunk); 69 | const message = JSON.parse(decoded); 70 | 71 | const { logprobs } = message?.choices?.[0]; 72 | if (!logprobs) { 73 | return; 74 | } 75 | 76 | yield ENCODER.encode(JSON.stringify(logprobs)); 77 | }; -------------------------------------------------------------------------------- /example/src/styles/globals.css: -------------------------------------------------------------------------------- 1 | :root { 2 | --max-width: 1100px; 3 | --border-radius: 12px; 4 | --font-mono: ui-monospace, Menlo, Monaco, 'Cascadia Mono', 'Segoe UI Mono', 5 | 'Roboto Mono', 'Oxygen Mono', 'Ubuntu Monospace', 'Source Code Pro', 6 | 'Fira Mono', 'Droid Sans Mono', 'Courier New', monospace; 7 | 8 | --foreground-rgb: 0, 0, 0; 9 | --background-start-rgb: 214, 219, 220; 10 | --background-end-rgb: 255, 255, 255; 11 | 12 | --primary-glow: conic-gradient( 13 | from 180deg at 50% 50%, 14 | #16abff33 0deg, 15 | #0885ff33 55deg, 16 | #54d6ff33 120deg, 17 | #0071ff33 160deg, 18 | transparent 360deg 19 | ); 20 | --secondary-glow: radial-gradient( 21 | rgba(255, 255, 255, 1), 22 | rgba(255, 255, 255, 0) 23 | ); 24 | 25 | --tile-start-rgb: 239, 245, 249; 26 | --tile-end-rgb: 228, 232, 233; 27 | --tile-border: conic-gradient( 28 | #00000080, 29 | #00000040, 30 | #00000030, 31 | #00000020, 32 | #00000010, 33 | #00000010, 34 | #00000080 35 | ); 36 | 37 | --callout-rgb: 238, 240, 241; 38 | --callout-border-rgb: 172, 175, 176; 39 | --card-rgb: 180, 185, 188; 40 | --card-border-rgb: 131, 134, 135; 41 | } 42 | 43 | @media (prefers-color-scheme: dark) { 44 | :root { 45 | --foreground-rgb: 255, 255, 255; 46 | --background-start-rgb: 0, 0, 0; 47 | --background-end-rgb: 0, 0, 0; 48 | 49 | --primary-glow: radial-gradient(rgba(1, 65, 255, 0.4), rgba(1, 65, 255, 0)); 50 | --secondary-glow: linear-gradient( 51 | to bottom right, 52 | rgba(1, 65, 255, 0), 53 | rgba(1, 65, 255, 0), 54 | rgba(1, 65, 255, 0.3) 55 | ); 56 | 57 | --tile-start-rgb: 2, 13, 46; 58 | --tile-end-rgb: 2, 5, 19; 59 | --tile-border: conic-gradient( 60 | #ffffff80, 61 | #ffffff40, 62 | #ffffff30, 63 | #ffffff20, 64 | #ffffff10, 65 | #ffffff10, 66 | #ffffff80 67 | ); 68 | 69 | --callout-rgb: 20, 20, 20; 70 | --callout-border-rgb: 108, 108, 108; 71 | --card-rgb: 100, 100, 100; 72 | --card-border-rgb: 200, 200, 200; 73 | } 74 | } 75 | 76 | * { 77 | box-sizing: border-box; 78 | padding: 0; 79 | margin: 0; 80 | } 81 | 82 | html, 83 | body { 84 | max-width: 100vw; 85 | overflow-x: hidden; 86 | } 87 | 88 | body { 89 | color: rgb(var(--foreground-rgb)); 90 | background: linear-gradient( 91 | to bottom, 92 | transparent, 93 | rgb(var(--background-end-rgb)) 94 | ) 95 | rgb(var(--background-start-rgb)); 96 | } 97 | 98 | a { 99 | color: inherit; 100 | text-decoration: none; 101 | } 102 | 103 | @media (prefers-color-scheme: dark) { 104 | html { 105 | color-scheme: dark; 106 | } 107 | } 108 | -------------------------------------------------------------------------------- /src/lib/types.ts: -------------------------------------------------------------------------------- 1 | import type { 2 | CreateChatCompletionRequest, 3 | CreateCompletionRequest, 4 | CreateEditRequest, 5 | CreateEmbeddingRequest, 6 | CreateFineTuneRequest, 7 | CreateImageRequest, 8 | } from "./pinned"; 9 | 10 | import { OpenAIStreamOptions } from "./streaming"; 11 | 12 | import nodeFetch from "node-fetch"; 13 | 14 | export const OpenAIAPIEndpoints = { 15 | chat: "chat/completions", 16 | completions: "completions", 17 | edits: "edits", 18 | embeddings: "embeddings", 19 | images: "images", 20 | "fine-tunes": "fine-tunes", 21 | } as const; 22 | 23 | export type OpenAIAPIEndpoint = keyof typeof OpenAIAPIEndpoints; 24 | 25 | export type OpenAICreateArgs = 26 | T extends "completions" 27 | ? Omit 28 | : T extends "edits" 29 | ? CreateEditRequest 30 | : T extends "embeddings" 31 | ? CreateEmbeddingRequest 32 | : T extends "images" 33 | ? CreateImageRequest 34 | : T extends "fine-tunes" 35 | ? CreateFineTuneRequest 36 | : T extends "chat" 37 | ? CreateChatCompletionRequest 38 | : never; 39 | 40 | export interface OpenAIOptions extends OpenAIStreamOptions { 41 | /** 42 | * By default, the API base is https://api.openai.com/v1, corresponding 43 | * to OpenAIs API. You can override this to use a different provider or proxy. 44 | */ 45 | apiBase?: string; 46 | /** 47 | * By default, the API key is read from the OPENAI_API_KEY environment 48 | * variable. You can override this by passing a different key here. 49 | */ 50 | apiKey?: string; 51 | /** 52 | * Additional headers to pass to the API. This is useful is you want to 53 | * pass additional parameters to a proxy service, for instance. 54 | */ 55 | apiHeaders?: Record; 56 | /** 57 | * An optional AbortController, which can be used to abort the request 58 | * mid-flight. 59 | */ 60 | controller?: AbortController; 61 | /** 62 | * An optional custom fetch implementation, which will be used to replace the 63 | * default fetch/node-fetch call used for making API requests in edge/dom and 64 | * node environments respectively. 65 | */ 66 | fetch?: typeof fetch | typeof nodeFetch; 67 | } 68 | 69 | /** 70 | * The OpenAI API client for Edge runtime. 71 | */ 72 | export type OpenAIEdgeClient = ( 73 | endpoint: T, 74 | args: OpenAICreateArgs, 75 | options?: OpenAIOptions 76 | ) => Promise>; 77 | 78 | export type OpenAINodeClient = ( 79 | endpoint: T, 80 | args: OpenAICreateArgs, 81 | options?: OpenAIOptions 82 | ) => Promise; 83 | 84 | export * from "./pinned"; 85 | -------------------------------------------------------------------------------- /src/lib/openai/edge.ts: -------------------------------------------------------------------------------- 1 | /* eslint-disable no-console */ 2 | import { streamArray } from "yield-stream"; 3 | 4 | import { OpenAIAPIEndpoints, OpenAIEdgeClient } from "../types"; 5 | import { ENCODER } from "../../globs/shared"; 6 | import { OpenAIError } from "../errors"; 7 | import { fetchWithBackoff } from "../backoff"; 8 | import { 9 | ChatStream, 10 | EventStream, 11 | getTokensFromResponse, 12 | TokenStream, 13 | } from "../streaming"; 14 | 15 | /** 16 | * OpenAI Edge client. 17 | * 18 | * Create a new completion stream. Stream of strings by default, set `mode: 19 | * 'raw'` for the raw stream of JSON objects. 20 | */ 21 | export const OpenAI: OpenAIEdgeClient = async ( 22 | endpoint, 23 | args, 24 | { 25 | mode = "tokens", 26 | apiBase = "https://api.openai.com/v1", 27 | apiKey = process.env.OPENAI_API_KEY, 28 | apiHeaders = {}, 29 | controller, 30 | onDone, 31 | onParse, 32 | fetch 33 | } = {} 34 | ) => { 35 | if (!apiKey) { 36 | throw new OpenAIError("NO_API_KEY"); 37 | } 38 | 39 | const shouldStream = endpoint === "completions" || endpoint === "chat"; 40 | const path = OpenAIAPIEndpoints[endpoint]; 41 | const response = await fetchWithBackoff(`${apiBase}/${path}`, { 42 | method: "POST", 43 | body: JSON.stringify({ 44 | ...args, 45 | stream: shouldStream ? true : undefined, 46 | }), 47 | headers: { 48 | Authorization: `Bearer ${apiKey}`, 49 | "Content-Type": "application/json", 50 | Accept: "application/json", 51 | ...apiHeaders, 52 | }, 53 | signal: controller?.signal, 54 | }, fetch); 55 | 56 | switch (response.status) { 57 | case 401: 58 | throw new OpenAIError("INVALID_API_KEY"); 59 | case 404: 60 | throw new OpenAIError("INVALID_MODEL"); 61 | case 429: 62 | throw new OpenAIError("RATE_LIMIT_REACHED"); 63 | case 500: 64 | throw new OpenAIError("SERVER_ERROR"); 65 | default: 66 | if (!response.body) { 67 | throw new OpenAIError("UNKNOWN"); 68 | } 69 | } 70 | 71 | let outputStream: ReadableStream; 72 | const options = { mode, onDone, onParse }; 73 | 74 | if (shouldStream) { 75 | switch (mode) { 76 | case "raw": 77 | outputStream = EventStream(response.body, options); 78 | break; 79 | 80 | case "tokens": 81 | switch (endpoint) { 82 | case "chat": 83 | outputStream = ChatStream(response.body, options); 84 | break; 85 | 86 | default: 87 | outputStream = TokenStream(response.body, options); 88 | break; 89 | } 90 | break; 91 | 92 | default: 93 | console.error(`Unknown mode: ${mode} for streaming response.`); 94 | throw new OpenAIError("UNKNOWN"); 95 | } 96 | } else { 97 | /** 98 | * Load the response in one shot. 99 | */ 100 | const stringResult = await response.text(); 101 | 102 | switch (mode) { 103 | case "tokens": 104 | const json = JSON.parse(stringResult); 105 | const tokens = getTokensFromResponse(json); 106 | 107 | if (typeof tokens !== "string") { 108 | console.error( 109 | "No text choices received from OpenAI: " + stringResult 110 | ); 111 | outputStream = streamArray([]); 112 | break; 113 | } 114 | 115 | const encoded = ENCODER.encode(tokens); 116 | outputStream = streamArray([encoded]); 117 | break; 118 | case "raw": 119 | const encodedJson = ENCODER.encode(stringResult); 120 | outputStream = streamArray([encodedJson]); 121 | break; 122 | default: 123 | console.error(`Unknown mode: ${mode} for non-streaming response.`); 124 | throw new OpenAIError("UNKNOWN"); 125 | } 126 | } 127 | 128 | return outputStream; 129 | }; 130 | -------------------------------------------------------------------------------- /example/src/pages/index.tsx: -------------------------------------------------------------------------------- 1 | import Head from "next/head"; 2 | import Image from "next/image"; 3 | import { Inter } from "@next/font/google"; 4 | import styles from "@/styles/Home.module.css"; 5 | 6 | const inter = Inter({ subsets: ["latin"] }); 7 | 8 | export default function Home() { 9 | return ( 10 | <> 11 | 12 | Create Next App 13 | 14 | 15 | 16 | 17 |
18 |
19 |

20 | Get started by editing  21 | src/pages/index.tsx 22 |

23 | 40 |
41 | 42 |
43 | Next.js Logo 51 |
52 | 13 59 |
60 |
61 | 62 | 120 |
121 | 122 | ); 123 | } 124 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # OpenAI Streams 2 | 3 | [**GitHub**](https://github.com/SpellcraftAI/openai-streams) | 4 | [**NPM**](https://npmjs.com/package/openai-streams) | 5 | [**Docs**](https://openai-streams.vercel.app) 6 | 7 | > Now with ChatGPT API support! See [**Use with ChatGPT 8 | > API**](#use-with-chatgpt-api). (Whisper coming soon!) 9 | 10 | This library returns OpenAI API responses as streams only. Non-stream endpoints 11 | like `edits` etc. are simply a stream with only one chunk update. 12 | 13 | - Prioritizes streams, so you can display a completion as it arrives. 14 | - Auto-loads `OPENAI_API_KEY` from `process.env`. 15 | - One single function with inferred parameter type based on the endpoint you 16 | provide. 17 | 18 | Uses `ReadableStream` by default for browser, Edge Runtime, and Node 18+, with 19 | a `NodeJS.Readable` version available at `openai-streams/node`. 20 | 21 | ### Installation 22 | 23 | ```bash 24 | yarn add openai-streams 25 | # -or- 26 | npm i --save openai-streams 27 | ``` 28 | 29 | ### Usage 30 | 31 | ```ts 32 | await OpenAI( 33 | /** 'completions', 'chat', etc. */ 34 | ENDPOINT, 35 | /** max_tokens, temperature, messages, etc. */ 36 | PARAMS, 37 | /** apiBase, apiKey, mode, controller, etc */ 38 | OPTIONS 39 | ); 40 | ``` 41 | 42 | 1. **Set the `OPENAI_API_KEY` env variable** (or pass the `{ apiKey }` option). 43 | 44 | The library will throw if it cannot find an API key. Your program will load 45 | this at runtime from `process.env.OPENAI_API_KEY` by default, but you may 46 | override this with the `{ apiKey }` option. 47 | 48 | **IMPORTANT:** For security, you should only load this from a `process.env` 49 | variable. 50 | 51 | ```ts 52 | await OpenAI( 53 | "completions", 54 | { 55 | /* endpoint params */ 56 | }, 57 | { apiKey: process.env.MY_SECRET_API_KEY } 58 | ); 59 | ``` 60 | 61 | 2. **Call the API via `await OpenAI(endpoint, params, options?)`.** 62 | 63 | The `params` type will be inferred based on the `endpoint` you provide, i.e. 64 | for the `"edits"` endpoint, `import('openai').CreateEditRequest` will be 65 | enforced. 66 | 67 | Example with `raw` streaming mode: 68 | 69 | ```ts 70 | await OpenAI( 71 | "chat", 72 | { 73 | messages: [ 74 | /* ... */ 75 | ], 76 | }, 77 | { mode: "raw" } 78 | ); 79 | ``` 80 | 81 | #### Edge/Browser: Consuming streams in Next.js Edge functions 82 | 83 | This will also work in the browser, but you'll need users to paste their OpenAI 84 | key and pass it in via the `{ apiKey }` option. 85 | 86 | ```ts 87 | import { OpenAI } from "openai-streams"; 88 | 89 | export default async function handler() { 90 | const stream = await OpenAI("completions", { 91 | model: "text-davinci-003", 92 | prompt: "Write a happy sentence.\n\n", 93 | max_tokens: 100, 94 | }); 95 | 96 | return new Response(stream); 97 | } 98 | 99 | export const config = { 100 | runtime: "edge", 101 | }; 102 | ``` 103 | 104 | #### Node: Consuming streams in Next.js API Route (Node) 105 | 106 | If you cannot use an Edge runtime or want to consume Node.js streams for another 107 | reason, use `openai-streams/node`: 108 | 109 | ```ts 110 | import type { NextApiRequest, NextApiResponse } from "next"; 111 | import { OpenAI } from "openai-streams/node"; 112 | 113 | export default async function test(_: NextApiRequest, res: NextApiResponse) { 114 | const stream = await OpenAI("completions", { 115 | model: "text-davinci-003", 116 | prompt: "Write a happy sentence.\n\n", 117 | max_tokens: 25, 118 | }); 119 | 120 | stream.pipe(res); 121 | } 122 | ``` 123 | 124 | See the example in 125 | [`example/src/pages/api/hello.ts`](https://github.com/SpellcraftAI/openai-streams/blob/master/example/src/pages/api/hello.ts). 126 | 127 | 128 | #### Use with ChatGPT API 129 | 130 | By default, with `mode = "tokens"`, you will receive just the message deltas. 131 | For full events, use `mode = "raw"`. 132 | 133 | See: https://platform.openai.com/docs/guides/chat/introduction 134 | 135 | ```ts 136 | const stream = await OpenAI("chat", { 137 | model: "gpt-3.5-turbo", 138 | messages: [ 139 | { 140 | role: "system", 141 | content: "You are a helpful assistant that translates English to French.", 142 | }, 143 | { 144 | role: "user", 145 | content: 'Translate the following English text to French: "Hello world!"', 146 | }, 147 | ], 148 | }); 149 | ``` 150 | 151 | In `tokens` mode, you will just receive the response chunks, which look like this 152 | (separated with newlines for illustration): 153 | 154 | ``` 155 | Hello 156 | ! 157 | How 158 | can 159 | I 160 | assist 161 | you 162 | today 163 | ? 164 | ``` 165 | 166 | Use `mode = "raw"` for access to raw events. 167 | 168 | ### Notes 169 | 170 | 1. Internally, streams are often manipulated using generators via `for await 171 | (const chunk of yieldStream(stream)) { ... }`. We recommend following this 172 | pattern if you find it intuitive. 173 | -------------------------------------------------------------------------------- /src/lib/streaming/streams.ts: -------------------------------------------------------------------------------- 1 | import { ENCODER, DECODER } from "../../globs/shared"; 2 | import { ChatParser, TokenParser } from "./transforms"; 3 | 4 | import { createParser } from "eventsource-parser"; 5 | import { Transform, pipeline, yieldStream } from "yield-stream"; 6 | import { yieldStream as yieldStreamNode } from "yield-stream/node"; 7 | import { OpenAIError } from "../errors"; 8 | 9 | export type StreamMode = "raw" | "tokens"; 10 | 11 | export interface OpenAIStreamOptions { 12 | /** 13 | * Whether to return tokens or raw events. 14 | */ 15 | mode?: StreamMode; 16 | 17 | /** 18 | * A function to run at the end of a stream. This is useful if you want 19 | * to do something with the stream after it's done, like log token usage. 20 | */ 21 | onDone?: () => void | Promise; 22 | /** 23 | * A function that runs for each token. This is useful if you want 24 | * to sum tokens used as they're returned. 25 | */ 26 | onParse?: (token: string) => void | Promise; 27 | } 28 | 29 | export type OpenAIStream = ( 30 | stream: NodeJS.ReadableStream | ReadableStream, 31 | options: OpenAIStreamOptions 32 | ) => ReadableStream; 33 | 34 | /** 35 | * A `ReadableStream` of server sent events from the given OpenAI API stream. 36 | * 37 | * @note This can't be done via a generator while using `createParser` because 38 | * there is no way to yield from within the callback. 39 | */ 40 | export const EventStream: OpenAIStream = ( 41 | stream, 42 | { mode = "tokens", onDone } 43 | ) => { 44 | return new ReadableStream({ 45 | async start(controller) { 46 | const parser = createParser(async (event) => { 47 | if (event.type === "event") { 48 | const { data } = event; 49 | /** 50 | * Break if event stream finished. 51 | */ 52 | if (data === "[DONE]") { 53 | const controllerIsClosed = controller.desiredSize === null; 54 | if (!controllerIsClosed) { 55 | controller.close(); 56 | } 57 | 58 | await onDone?.(); 59 | return; 60 | } 61 | /** 62 | * Verify we have a valid JSON object and then enqueue it. 63 | */ 64 | try { 65 | const parsed = JSON.parse(data); 66 | controller.enqueue(ENCODER.encode(data)); 67 | 68 | /** 69 | * In `tokens` mode, if the user runs out of tokens and the stream 70 | * does not complete, we will throw a MAX_TOKENS error. In `raw` 71 | * mode, we leave it up to the user to handle this. 72 | * 73 | * This requires iterating over result.choices[] and throwing an 74 | * error if any of them have `{ finish_reason: "length" }`. 75 | */ 76 | if (mode === "tokens" && parsed?.choices) { 77 | const { choices } = parsed; 78 | for (const choice of choices) { 79 | if (choice?.finish_reason === "length") { 80 | throw new OpenAIError("MAX_TOKENS"); 81 | } 82 | } 83 | } 84 | } catch (e) { 85 | controller.error(e); 86 | } 87 | } 88 | }); 89 | 90 | // Check if the stream is a NodeJS stream or a browser stream. 91 | // @ts-ignore - TS doesn't know about `pipe` on streams. 92 | const isNodeJsStream = typeof stream.pipe === "function"; 93 | 94 | /** 95 | * Feed the parser with decoded chunks from the raw stream. 96 | */ 97 | for await (const chunk of isNodeJsStream 98 | ? yieldStreamNode(stream as NodeJS.ReadableStream) 99 | : yieldStream(stream as ReadableStream) 100 | ) { 101 | const decoded = DECODER.decode(chunk); 102 | 103 | try { 104 | const parsed = JSON.parse(decoded); 105 | 106 | if (parsed.hasOwnProperty("error")) 107 | controller.error(new Error(parsed.error.message)); 108 | } catch (e) {} 109 | 110 | parser.feed(decoded); 111 | } 112 | }, 113 | }); 114 | }; 115 | 116 | /** 117 | * Creates a handler that decodes the given stream into a string, 118 | * then pipes that string into the provided callback. 119 | */ 120 | const CallbackHandler = ({ onParse }: OpenAIStreamOptions) => { 121 | const handler: Transform = async function* (chunk) { 122 | const decoded = DECODER.decode(chunk); 123 | onParse?.(decoded); 124 | if (decoded) { 125 | yield ENCODER.encode(decoded); 126 | } 127 | }; 128 | 129 | return handler; 130 | }; 131 | 132 | /** 133 | * A `ReadableStream` of parsed tokens from the given OpenAI API stream. 134 | */ 135 | export const TokenStream: OpenAIStream = ( 136 | stream, 137 | options = { mode: "tokens" } 138 | ) => { 139 | return pipeline( 140 | EventStream(stream, options), 141 | TokenParser, 142 | CallbackHandler(options) 143 | ); 144 | }; 145 | 146 | /** 147 | * A `ReadableStream` of parsed deltas from the given ChatGPT stream. 148 | */ 149 | export const ChatStream: OpenAIStream = ( 150 | stream, 151 | options = { mode: "tokens" } 152 | ) => { 153 | return pipeline( 154 | EventStream(stream, options), 155 | ChatParser, 156 | CallbackHandler(options) 157 | ); 158 | }; -------------------------------------------------------------------------------- /example/src/styles/Home.module.css: -------------------------------------------------------------------------------- 1 | .main { 2 | display: flex; 3 | flex-direction: column; 4 | justify-content: space-between; 5 | align-items: center; 6 | padding: 6rem; 7 | min-height: 100vh; 8 | } 9 | 10 | .description { 11 | display: inherit; 12 | justify-content: inherit; 13 | align-items: inherit; 14 | font-size: 0.85rem; 15 | max-width: var(--max-width); 16 | width: 100%; 17 | z-index: 2; 18 | font-family: var(--font-mono); 19 | } 20 | 21 | .description a { 22 | display: flex; 23 | justify-content: center; 24 | align-items: center; 25 | gap: 0.5rem; 26 | } 27 | 28 | .description p { 29 | position: relative; 30 | margin: 0; 31 | padding: 1rem; 32 | background-color: rgba(var(--callout-rgb), 0.5); 33 | border: 1px solid rgba(var(--callout-border-rgb), 0.3); 34 | border-radius: var(--border-radius); 35 | } 36 | 37 | .code { 38 | font-weight: 700; 39 | font-family: var(--font-mono); 40 | } 41 | 42 | .grid { 43 | display: grid; 44 | grid-template-columns: repeat(4, minmax(25%, auto)); 45 | width: var(--max-width); 46 | max-width: 100%; 47 | } 48 | 49 | .card { 50 | padding: 1rem 1.2rem; 51 | border-radius: var(--border-radius); 52 | background: rgba(var(--card-rgb), 0); 53 | border: 1px solid rgba(var(--card-border-rgb), 0); 54 | transition: background 200ms, border 200ms; 55 | } 56 | 57 | .card span { 58 | display: inline-block; 59 | transition: transform 200ms; 60 | } 61 | 62 | .card h2 { 63 | font-weight: 600; 64 | margin-bottom: 0.7rem; 65 | } 66 | 67 | .card p { 68 | margin: 0; 69 | opacity: 0.6; 70 | font-size: 0.9rem; 71 | line-height: 1.5; 72 | max-width: 30ch; 73 | } 74 | 75 | .center { 76 | display: flex; 77 | justify-content: center; 78 | align-items: center; 79 | position: relative; 80 | padding: 4rem 0; 81 | } 82 | 83 | .center::before { 84 | background: var(--secondary-glow); 85 | border-radius: 50%; 86 | width: 480px; 87 | height: 360px; 88 | margin-left: -400px; 89 | } 90 | 91 | .center::after { 92 | background: var(--primary-glow); 93 | width: 240px; 94 | height: 180px; 95 | z-index: -1; 96 | } 97 | 98 | .center::before, 99 | .center::after { 100 | content: ''; 101 | left: 50%; 102 | position: absolute; 103 | filter: blur(45px); 104 | transform: translateZ(0); 105 | } 106 | 107 | .logo, 108 | .thirteen { 109 | position: relative; 110 | } 111 | 112 | .thirteen { 113 | display: flex; 114 | justify-content: center; 115 | align-items: center; 116 | width: 75px; 117 | height: 75px; 118 | padding: 25px 10px; 119 | margin-left: 16px; 120 | transform: translateZ(0); 121 | border-radius: var(--border-radius); 122 | overflow: hidden; 123 | box-shadow: 0px 2px 8px -1px #0000001a; 124 | } 125 | 126 | .thirteen::before, 127 | .thirteen::after { 128 | content: ''; 129 | position: absolute; 130 | z-index: -1; 131 | } 132 | 133 | /* Conic Gradient Animation */ 134 | .thirteen::before { 135 | animation: 6s rotate linear infinite; 136 | width: 200%; 137 | height: 200%; 138 | background: var(--tile-border); 139 | } 140 | 141 | /* Inner Square */ 142 | .thirteen::after { 143 | inset: 0; 144 | padding: 1px; 145 | border-radius: var(--border-radius); 146 | background: linear-gradient( 147 | to bottom right, 148 | rgba(var(--tile-start-rgb), 1), 149 | rgba(var(--tile-end-rgb), 1) 150 | ); 151 | background-clip: content-box; 152 | } 153 | 154 | /* Enable hover only on non-touch devices */ 155 | @media (hover: hover) and (pointer: fine) { 156 | .card:hover { 157 | background: rgba(var(--card-rgb), 0.1); 158 | border: 1px solid rgba(var(--card-border-rgb), 0.15); 159 | } 160 | 161 | .card:hover span { 162 | transform: translateX(4px); 163 | } 164 | } 165 | 166 | @media (prefers-reduced-motion) { 167 | .thirteen::before { 168 | animation: none; 169 | } 170 | 171 | .card:hover span { 172 | transform: none; 173 | } 174 | } 175 | 176 | /* Mobile */ 177 | @media (max-width: 700px) { 178 | .content { 179 | padding: 4rem; 180 | } 181 | 182 | .grid { 183 | grid-template-columns: 1fr; 184 | margin-bottom: 120px; 185 | max-width: 320px; 186 | text-align: center; 187 | } 188 | 189 | .card { 190 | padding: 1rem 2.5rem; 191 | } 192 | 193 | .card h2 { 194 | margin-bottom: 0.5rem; 195 | } 196 | 197 | .center { 198 | padding: 8rem 0 6rem; 199 | } 200 | 201 | .center::before { 202 | transform: none; 203 | height: 300px; 204 | } 205 | 206 | .description { 207 | font-size: 0.8rem; 208 | } 209 | 210 | .description a { 211 | padding: 1rem; 212 | } 213 | 214 | .description p, 215 | .description div { 216 | display: flex; 217 | justify-content: center; 218 | position: fixed; 219 | width: 100%; 220 | } 221 | 222 | .description p { 223 | align-items: center; 224 | inset: 0 0 auto; 225 | padding: 2rem 1rem 1.4rem; 226 | border-radius: 0; 227 | border: none; 228 | border-bottom: 1px solid rgba(var(--callout-border-rgb), 0.25); 229 | background: linear-gradient( 230 | to bottom, 231 | rgba(var(--background-start-rgb), 1), 232 | rgba(var(--callout-rgb), 0.5) 233 | ); 234 | background-clip: padding-box; 235 | backdrop-filter: blur(24px); 236 | } 237 | 238 | .description div { 239 | align-items: flex-end; 240 | pointer-events: none; 241 | inset: auto 0 0; 242 | padding: 2rem; 243 | height: 200px; 244 | background: linear-gradient( 245 | to bottom, 246 | transparent 0%, 247 | rgb(var(--background-end-rgb)) 40% 248 | ); 249 | z-index: 1; 250 | } 251 | } 252 | 253 | /* Tablet and Smaller Desktop */ 254 | @media (min-width: 701px) and (max-width: 1120px) { 255 | .grid { 256 | grid-template-columns: repeat(2, 50%); 257 | } 258 | } 259 | 260 | @media (prefers-color-scheme: dark) { 261 | .vercelLogo { 262 | filter: invert(1); 263 | } 264 | 265 | .logo, 266 | .thirteen img { 267 | filter: invert(1) drop-shadow(0 0 0.3rem #ffffff70); 268 | } 269 | } 270 | 271 | @keyframes rotate { 272 | from { 273 | transform: rotate(360deg); 274 | } 275 | to { 276 | transform: rotate(0deg); 277 | } 278 | } 279 | -------------------------------------------------------------------------------- /test/streams.test.ts: -------------------------------------------------------------------------------- 1 | /* eslint-disable no-console */ 2 | import "./env"; 3 | import test from "ava"; 4 | 5 | import { OpenAI } from "../src"; 6 | import { yieldStream } from "yield-stream"; 7 | import { DECODER } from "../src/globs/shared"; 8 | import nodeFetch from "node-fetch"; 9 | 10 | test.serial("'completions' endpoint", async (t) => { 11 | const stream = await OpenAI("completions", { 12 | model: "text-davinci-003", 13 | prompt: "Write a sentence.", 14 | max_tokens: 50, 15 | }); 16 | 17 | /** 18 | * Write each chunk to the screen as one string. 19 | */ 20 | const chunks: string[] = []; 21 | for await (const chunk of yieldStream(stream)) { 22 | chunks.push(DECODER.decode(chunk)); 23 | process.stdout.write(chunks.join("").trim()); 24 | } 25 | 26 | t.pass(); 27 | }); 28 | 29 | test.serial("'edits' endpoint", async (t) => { 30 | const stream = await OpenAI("edits", { 31 | model: "text-davinci-edit-001", 32 | input: "helo wrld", 33 | instruction: "Fix spelling mistakes.", 34 | }); 35 | 36 | /** 37 | * Write each chunk to the screen as one string. 38 | */ 39 | const chunks: string[] = []; 40 | for await (const chunk of yieldStream(stream)) { 41 | chunks.push(DECODER.decode(chunk)); 42 | process.stdout.write(chunks.join("").trim()); 43 | } 44 | 45 | t.pass(); 46 | }); 47 | 48 | test.serial("mode = 'raw': error handling", async (t) => { 49 | const tokenStream = await OpenAI( 50 | "completions", 51 | { 52 | model: "text-davinci-003", 53 | prompt: "Write a long sentence.", 54 | max_tokens: 1, 55 | }, 56 | { mode: "raw" } 57 | ); 58 | 59 | const DECODER = new TextDecoder(); 60 | for await (const serialized of yieldStream(tokenStream)) { 61 | const string = DECODER.decode(serialized); 62 | const json = JSON.parse(string); 63 | console.table(json.choices); 64 | } 65 | 66 | t.pass("Raw mode did not throw when user ran out of tokens."); 67 | }); 68 | 69 | test.serial("mode = 'tokens': error handling", async (t) => { 70 | try { 71 | const tokenStream = await OpenAI( 72 | "completions", 73 | { 74 | model: "text-davinci-003", 75 | prompt: "Write a short sentence.", 76 | max_tokens: 5, 77 | }, 78 | { mode: "tokens" } 79 | ); 80 | 81 | const DECODER = new TextDecoder(); 82 | for await (const serialized of yieldStream(tokenStream)) { 83 | const string = DECODER.decode(serialized); 84 | console.log(string.trim()); 85 | } 86 | 87 | t.fail("Tokens mode did not throw when user ran out of tokens."); 88 | } catch (error) { 89 | t.snapshot( 90 | JSON.stringify(error, null, 2), 91 | "Tokens mode should throw for MAX_TOKENS." 92 | ); 93 | } 94 | }); 95 | 96 | test.serial("ChatGPT support", async (t) => { 97 | const stream = await OpenAI("chat", { 98 | model: "gpt-3.5-turbo", 99 | messages: [ 100 | { role: "system", content: "You are a helpful assistant." }, 101 | { role: "user", content: "This is a test message, say hello!" }, 102 | ], 103 | }); 104 | 105 | const DECODER = new TextDecoder(); 106 | for await (const serialized of yieldStream(stream)) { 107 | const string = DECODER.decode(serialized); 108 | console.log(string); 109 | } 110 | 111 | t.pass(); 112 | }); 113 | 114 | test.serial("API base support", async (t) => { 115 | const stream = await OpenAI( 116 | "chat", 117 | { 118 | model: "gpt-3.5-turbo", 119 | messages: [ 120 | { role: "system", content: "You are a helpful assistant." }, 121 | { role: "user", content: "This is a test message, say hello!" }, 122 | ], 123 | }, 124 | { 125 | apiBase: "https://oai.hconeai.com/v1", 126 | } 127 | ); 128 | 129 | const DECODER = new TextDecoder(); 130 | for await (const serialized of yieldStream(stream)) { 131 | const string = DECODER.decode(serialized); 132 | console.log(string); 133 | } 134 | 135 | t.pass(); 136 | }); 137 | 138 | const openaiOrganization = process.env.OPENAI_ORGANIZATION; 139 | if (openaiOrganization === undefined) { 140 | console.log( 141 | "Skipping 'API headers support' test because $OPENAI_ORGANIZATION is not set." 142 | ); 143 | } else { 144 | test.serial("API headers support", async (t) => { 145 | const stream = await OpenAI( 146 | "chat", 147 | { 148 | model: "gpt-3.5-turbo", 149 | messages: [ 150 | { role: "system", content: "You are a helpful assistant." }, 151 | { role: "user", content: "This is a test message, say hello!" }, 152 | ], 153 | }, 154 | { 155 | apiBase: "https://oai.hconeai.com/v1", 156 | apiHeaders: { 157 | "OpenAI-Organization": openaiOrganization, 158 | }, 159 | } 160 | ); 161 | 162 | const DECODER = new TextDecoder(); 163 | for await (const serialized of yieldStream(stream)) { 164 | const string = DECODER.decode(serialized); 165 | console.log(string); 166 | } 167 | 168 | t.pass(); 169 | }); 170 | } 171 | 172 | test.serial("ChatGPT error propagation", async (t) => { 173 | try { 174 | const stream = await OpenAI( 175 | "chat", 176 | { 177 | model: "gpt-3.5-turbo", 178 | messages: [ 179 | { 180 | role: "system", 181 | content: 182 | "You are a helpful assistant that translates English to French.", 183 | }, 184 | { 185 | role: "user", 186 | content: 187 | "Translate the following English text to French: \"Hello world!\"", 188 | }, 189 | ], 190 | }, 191 | { apiKey: "THIS_IS_A_FAKE_KEY" } 192 | ); 193 | 194 | const DECODER = new TextDecoder(); 195 | for await (const serialized of yieldStream(stream)) { 196 | const string = DECODER.decode(serialized); 197 | console.log(string); 198 | } 199 | } catch (e) { 200 | t.snapshot(e); 201 | } 202 | }); 203 | 204 | test.serial("cancelling streams", async (t) => { 205 | const controller = new AbortController(); 206 | 207 | const stream = await OpenAI( 208 | "completions", 209 | { 210 | model: "text-davinci-003", 211 | prompt: "Write two sentences.", 212 | max_tokens: 50, 213 | }, 214 | { 215 | controller, 216 | } 217 | ); 218 | 219 | /** 220 | * Write each chunk to the screen as one string. 221 | */ 222 | let i = 0; 223 | const chunks: string[] = []; 224 | 225 | try { 226 | for await (const chunk of yieldStream(stream)) { 227 | i++; 228 | chunks.push(DECODER.decode(chunk)); 229 | process.stdout.write(JSON.stringify(chunks)); 230 | 231 | if (i >= 5) { 232 | controller.abort(); 233 | } 234 | } 235 | } catch (e) { 236 | t.is(e.name, "AbortError", "Stream should have been aborted."); 237 | } 238 | 239 | t.is(i, 5, "Stream should have been cancelled after 5 chunks."); 240 | }); 241 | 242 | test.serial("should work with custom fetch", async (t) => { 243 | let didUseMock = false; 244 | 245 | const mockFetch: typeof nodeFetch = (...params) => { 246 | didUseMock = true; 247 | return nodeFetch(...params); 248 | }; 249 | 250 | const stream = await OpenAI("chat", { 251 | model: "gpt-3.5-turbo", 252 | messages: [ 253 | { role: "system", content: "You are a helpful assistant." }, 254 | { role: "user", content: "This is a test message, say hello!" }, 255 | ], 256 | }, { fetch: mockFetch }); 257 | 258 | const DECODER = new TextDecoder(); 259 | for await (const serialized of yieldStream(stream)) { 260 | const string = DECODER.decode(serialized); 261 | console.log(string); 262 | } 263 | 264 | t.true(didUseMock, "Did not use custom fetch."); 265 | }); 266 | -------------------------------------------------------------------------------- /example/yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@babel/runtime@^7.20.7": 6 | version "7.20.13" 7 | resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.20.13.tgz#7055ab8a7cff2b8f6058bf6ae45ff84ad2aded4b" 8 | integrity sha512-gt3PKXs0DBoL9xCvOIIZ2NEqAGZqHjAnmVbfQtB620V0uReIQutpel14KcneZuer7UioY8ALKZ7iocavvzTNFA== 9 | dependencies: 10 | regenerator-runtime "^0.13.11" 11 | 12 | "@eslint/eslintrc@^1.4.1": 13 | version "1.4.1" 14 | resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.4.1.tgz#af58772019a2d271b7e2d4c23ff4ddcba3ccfb3e" 15 | integrity sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA== 16 | dependencies: 17 | ajv "^6.12.4" 18 | debug "^4.3.2" 19 | espree "^9.4.0" 20 | globals "^13.19.0" 21 | ignore "^5.2.0" 22 | import-fresh "^3.2.1" 23 | js-yaml "^4.1.0" 24 | minimatch "^3.1.2" 25 | strip-json-comments "^3.1.1" 26 | 27 | "@humanwhocodes/config-array@^0.11.8": 28 | version "0.11.8" 29 | resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.8.tgz#03595ac2075a4dc0f191cc2131de14fbd7d410b9" 30 | integrity sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g== 31 | dependencies: 32 | "@humanwhocodes/object-schema" "^1.2.1" 33 | debug "^4.1.1" 34 | minimatch "^3.0.5" 35 | 36 | "@humanwhocodes/module-importer@^1.0.1": 37 | version "1.0.1" 38 | resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" 39 | integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== 40 | 41 | "@humanwhocodes/object-schema@^1.2.1": 42 | version "1.2.1" 43 | resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" 44 | integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== 45 | 46 | "@next/env@13.1.6": 47 | version "13.1.6" 48 | resolved "https://registry.yarnpkg.com/@next/env/-/env-13.1.6.tgz#c4925609f16142ded1a5cb833359ab17359b7a93" 49 | integrity sha512-s+W9Fdqh5MFk6ECrbnVmmAOwxKQuhGMT7xXHrkYIBMBcTiOqNWhv5KbJIboKR5STXxNXl32hllnvKaffzFaWQg== 50 | 51 | "@next/eslint-plugin-next@13.1.6": 52 | version "13.1.6" 53 | resolved "https://registry.yarnpkg.com/@next/eslint-plugin-next/-/eslint-plugin-next-13.1.6.tgz#ad8be22dd3d8aee9a9bd9a2507e2c55a2f7ebdd9" 54 | integrity sha512-o7cauUYsXjzSJkay8wKjpKJf2uLzlggCsGUkPu3lP09Pv97jYlekTC20KJrjQKmSv5DXV0R/uks2ZXhqjNkqAw== 55 | dependencies: 56 | glob "7.1.7" 57 | 58 | "@next/font@13.1.6": 59 | version "13.1.6" 60 | resolved "https://registry.yarnpkg.com/@next/font/-/font-13.1.6.tgz#2bf99e3321ec9b4d65781c0d0ebff072e8752e1a" 61 | integrity sha512-AITjmeb1RgX1HKMCiA39ztx2mxeAyxl4ljv2UoSBUGAbFFMg8MO7YAvjHCgFhD39hL7YTbFjol04e/BPBH5RzQ== 62 | 63 | "@next/swc-android-arm-eabi@13.1.6": 64 | version "13.1.6" 65 | resolved "https://registry.yarnpkg.com/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-13.1.6.tgz#d766dfc10e27814d947b20f052067c239913dbcc" 66 | integrity sha512-F3/6Z8LH/pGlPzR1AcjPFxx35mPqjE5xZcf+IL+KgbW9tMkp7CYi1y7qKrEWU7W4AumxX/8OINnDQWLiwLasLQ== 67 | 68 | "@next/swc-android-arm64@13.1.6": 69 | version "13.1.6" 70 | resolved "https://registry.yarnpkg.com/@next/swc-android-arm64/-/swc-android-arm64-13.1.6.tgz#f37a98d5f18927d8c9970d750d516ac779465176" 71 | integrity sha512-cMwQjnB8vrYkWyK/H0Rf2c2pKIH4RGjpKUDvbjVAit6SbwPDpmaijLio0LWFV3/tOnY6kvzbL62lndVA0mkYpw== 72 | 73 | "@next/swc-darwin-arm64@13.1.6": 74 | version "13.1.6" 75 | resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.1.6.tgz#ec1b90fd9bf809d8b81004c5182e254dced4ad96" 76 | integrity sha512-KKRQH4DDE4kONXCvFMNBZGDb499Hs+xcFAwvj+rfSUssIDrZOlyfJNy55rH5t2Qxed1e4K80KEJgsxKQN1/fyw== 77 | 78 | "@next/swc-darwin-x64@13.1.6": 79 | version "13.1.6" 80 | resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-13.1.6.tgz#e869ac75d16995eee733a7d1550322d9051c1eb4" 81 | integrity sha512-/uOky5PaZDoaU99ohjtNcDTJ6ks/gZ5ykTQDvNZDjIoCxFe3+t06bxsTPY6tAO6uEAw5f6vVFX5H5KLwhrkZCA== 82 | 83 | "@next/swc-freebsd-x64@13.1.6": 84 | version "13.1.6" 85 | resolved "https://registry.yarnpkg.com/@next/swc-freebsd-x64/-/swc-freebsd-x64-13.1.6.tgz#84a7b2e423a2904afc2edca21c2f1ba6b53fa4c1" 86 | integrity sha512-qaEALZeV7to6weSXk3Br80wtFQ7cFTpos/q+m9XVRFggu+8Ib895XhMWdJBzew6aaOcMvYR6KQ6JmHA2/eMzWw== 87 | 88 | "@next/swc-linux-arm-gnueabihf@13.1.6": 89 | version "13.1.6" 90 | resolved "https://registry.yarnpkg.com/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-13.1.6.tgz#980eed1f655ff8a72187d8a6ef9e73ac39d20d23" 91 | integrity sha512-OybkbC58A1wJ+JrJSOjGDvZzrVEQA4sprJejGqMwiZyLqhr9Eo8FXF0y6HL+m1CPCpPhXEHz/2xKoYsl16kNqw== 92 | 93 | "@next/swc-linux-arm64-gnu@13.1.6": 94 | version "13.1.6" 95 | resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.1.6.tgz#87a71db21cded3f7c63d1d19079845c59813c53d" 96 | integrity sha512-yCH+yDr7/4FDuWv6+GiYrPI9kcTAO3y48UmaIbrKy8ZJpi7RehJe3vIBRUmLrLaNDH3rY1rwoHi471NvR5J5NQ== 97 | 98 | "@next/swc-linux-arm64-musl@13.1.6": 99 | version "13.1.6" 100 | resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.1.6.tgz#c5aac8619331b9fd030603bbe2b36052011e11de" 101 | integrity sha512-ECagB8LGX25P9Mrmlc7Q/TQBb9rGScxHbv/kLqqIWs2fIXy6Y/EiBBiM72NTwuXUFCNrWR4sjUPSooVBJJ3ESQ== 102 | 103 | "@next/swc-linux-x64-gnu@13.1.6": 104 | version "13.1.6" 105 | resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.1.6.tgz#9513d36d540bbfea575576746736054c31aacdea" 106 | integrity sha512-GT5w2mruk90V/I5g6ScuueE7fqj/d8Bui2qxdw6lFxmuTgMeol5rnzAv4uAoVQgClOUO/MULilzlODg9Ib3Y4Q== 107 | 108 | "@next/swc-linux-x64-musl@13.1.6": 109 | version "13.1.6" 110 | resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.1.6.tgz#d61fc6884899f5957251f4ce3f522e34a2c479b7" 111 | integrity sha512-keFD6KvwOPzmat4TCnlnuxJCQepPN+8j3Nw876FtULxo8005Y9Ghcl7ACcR8GoiKoddAq8gxNBrpjoxjQRHeAQ== 112 | 113 | "@next/swc-win32-arm64-msvc@13.1.6": 114 | version "13.1.6" 115 | resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.1.6.tgz#fac2077a8ae9768e31444c9ae90807e64117cda7" 116 | integrity sha512-OwertslIiGQluFvHyRDzBCIB07qJjqabAmINlXUYt7/sY7Q7QPE8xVi5beBxX/rxTGPIbtyIe3faBE6Z2KywhQ== 117 | 118 | "@next/swc-win32-ia32-msvc@13.1.6": 119 | version "13.1.6" 120 | resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.1.6.tgz#498bc11c91b4c482a625bf4b978f98ae91111e46" 121 | integrity sha512-g8zowiuP8FxUR9zslPmlju7qYbs2XBtTLVSxVikPtUDQedhcls39uKYLvOOd1JZg0ehyhopobRoH1q+MHlIN/w== 122 | 123 | "@next/swc-win32-x64-msvc@13.1.6": 124 | version "13.1.6" 125 | resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.1.6.tgz#17ed919c723426b7d0ce1cd73d40ce3dcd342089" 126 | integrity sha512-Ls2OL9hi3YlJKGNdKv8k3X/lLgc3VmLG3a/DeTkAd+lAituJp8ZHmRmm9f9SL84fT3CotlzcgbdaCDfFwFA6bA== 127 | 128 | "@nodelib/fs.scandir@2.1.5": 129 | version "2.1.5" 130 | resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" 131 | integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== 132 | dependencies: 133 | "@nodelib/fs.stat" "2.0.5" 134 | run-parallel "^1.1.9" 135 | 136 | "@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": 137 | version "2.0.5" 138 | resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" 139 | integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== 140 | 141 | "@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": 142 | version "1.2.8" 143 | resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" 144 | integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== 145 | dependencies: 146 | "@nodelib/fs.scandir" "2.1.5" 147 | fastq "^1.6.0" 148 | 149 | "@pkgr/utils@^2.3.1": 150 | version "2.3.1" 151 | resolved "https://registry.yarnpkg.com/@pkgr/utils/-/utils-2.3.1.tgz#0a9b06ffddee364d6642b3cd562ca76f55b34a03" 152 | integrity sha512-wfzX8kc1PMyUILA+1Z/EqoE4UCXGy0iRGMhPwdfae1+f0OXlLqCk+By+aMzgJBzR9AzS4CDizioG6Ss1gvAFJw== 153 | dependencies: 154 | cross-spawn "^7.0.3" 155 | is-glob "^4.0.3" 156 | open "^8.4.0" 157 | picocolors "^1.0.0" 158 | tiny-glob "^0.2.9" 159 | tslib "^2.4.0" 160 | 161 | "@rushstack/eslint-patch@^1.1.3": 162 | version "1.2.0" 163 | resolved "https://registry.yarnpkg.com/@rushstack/eslint-patch/-/eslint-patch-1.2.0.tgz#8be36a1f66f3265389e90b5f9c9962146758f728" 164 | integrity sha512-sXo/qW2/pAcmT43VoRKOJbDOfV3cYpq3szSVfIThQXNt+E4DfKj361vaAt3c88U5tPUxzEswam7GW48PJqtKAg== 165 | 166 | "@swc/helpers@0.4.14": 167 | version "0.4.14" 168 | resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.4.14.tgz#1352ac6d95e3617ccb7c1498ff019654f1e12a74" 169 | integrity sha512-4C7nX/dvpzB7za4Ql9K81xK3HPxCpHMgwTZVyf+9JQ6VUbn9jjZVN7/Nkdz/Ugzs2CSjqnL/UPXroiVBVHUWUw== 170 | dependencies: 171 | tslib "^2.4.0" 172 | 173 | "@types/json5@^0.0.29": 174 | version "0.0.29" 175 | resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" 176 | integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== 177 | 178 | "@types/node@18.14.0": 179 | version "18.14.0" 180 | resolved "https://registry.yarnpkg.com/@types/node/-/node-18.14.0.tgz#94c47b9217bbac49d4a67a967fdcdeed89ebb7d0" 181 | integrity sha512-5EWrvLmglK+imbCJY0+INViFWUHg1AHel1sq4ZVSfdcNqGy9Edv3UB9IIzzg+xPaUcAgZYcfVs2fBcwDeZzU0A== 182 | 183 | "@types/prop-types@*": 184 | version "15.7.5" 185 | resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.5.tgz#5f19d2b85a98e9558036f6a3cacc8819420f05cf" 186 | integrity sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w== 187 | 188 | "@types/react-dom@18.0.11": 189 | version "18.0.11" 190 | resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.0.11.tgz#321351c1459bc9ca3d216aefc8a167beec334e33" 191 | integrity sha512-O38bPbI2CWtgw/OoQoY+BRelw7uysmXbWvw3nLWO21H1HSh+GOlqPuXshJfjmpNlKiiSDG9cc1JZAaMmVdcTlw== 192 | dependencies: 193 | "@types/react" "*" 194 | 195 | "@types/react@*", "@types/react@18.0.28": 196 | version "18.0.28" 197 | resolved "https://registry.yarnpkg.com/@types/react/-/react-18.0.28.tgz#accaeb8b86f4908057ad629a26635fe641480065" 198 | integrity sha512-RD0ivG1kEztNBdoAK7lekI9M+azSnitIn85h4iOiaLjaTrMjzslhaqCGaI4IyCJ1RljWiLCEu4jyrLLgqxBTew== 199 | dependencies: 200 | "@types/prop-types" "*" 201 | "@types/scheduler" "*" 202 | csstype "^3.0.2" 203 | 204 | "@types/scheduler@*": 205 | version "0.16.2" 206 | resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.2.tgz#1a62f89525723dde24ba1b01b092bf5df8ad4d39" 207 | integrity sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew== 208 | 209 | "@typescript-eslint/parser@^5.42.0": 210 | version "5.52.0" 211 | resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.52.0.tgz#73c136df6c0133f1d7870de7131ccf356f5be5a4" 212 | integrity sha512-e2KiLQOZRo4Y0D/b+3y08i3jsekoSkOYStROYmPUnGMEoA0h+k2qOH5H6tcjIc68WDvGwH+PaOrP1XRzLJ6QlA== 213 | dependencies: 214 | "@typescript-eslint/scope-manager" "5.52.0" 215 | "@typescript-eslint/types" "5.52.0" 216 | "@typescript-eslint/typescript-estree" "5.52.0" 217 | debug "^4.3.4" 218 | 219 | "@typescript-eslint/scope-manager@5.52.0": 220 | version "5.52.0" 221 | resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.52.0.tgz#a993d89a0556ea16811db48eabd7c5b72dcb83d1" 222 | integrity sha512-AR7sxxfBKiNV0FWBSARxM8DmNxrwgnYMPwmpkC1Pl1n+eT8/I2NAUPuwDy/FmDcC6F8pBfmOcaxcxRHspgOBMw== 223 | dependencies: 224 | "@typescript-eslint/types" "5.52.0" 225 | "@typescript-eslint/visitor-keys" "5.52.0" 226 | 227 | "@typescript-eslint/types@5.52.0": 228 | version "5.52.0" 229 | resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.52.0.tgz#19e9abc6afb5bd37a1a9bea877a1a836c0b3241b" 230 | integrity sha512-oV7XU4CHYfBhk78fS7tkum+/Dpgsfi91IIDy7fjCyq2k6KB63M6gMC0YIvy+iABzmXThCRI6xpCEyVObBdWSDQ== 231 | 232 | "@typescript-eslint/typescript-estree@5.52.0": 233 | version "5.52.0" 234 | resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.52.0.tgz#6408cb3c2ccc01c03c278cb201cf07e73347dfca" 235 | integrity sha512-WeWnjanyEwt6+fVrSR0MYgEpUAuROxuAH516WPjUblIrClzYJj0kBbjdnbQXLpgAN8qbEuGywiQsXUVDiAoEuQ== 236 | dependencies: 237 | "@typescript-eslint/types" "5.52.0" 238 | "@typescript-eslint/visitor-keys" "5.52.0" 239 | debug "^4.3.4" 240 | globby "^11.1.0" 241 | is-glob "^4.0.3" 242 | semver "^7.3.7" 243 | tsutils "^3.21.0" 244 | 245 | "@typescript-eslint/visitor-keys@5.52.0": 246 | version "5.52.0" 247 | resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.52.0.tgz#e38c971259f44f80cfe49d97dbffa38e3e75030f" 248 | integrity sha512-qMwpw6SU5VHCPr99y274xhbm+PRViK/NATY6qzt+Et7+mThGuFSl/ompj2/hrBlRP/kq+BFdgagnOSgw9TB0eA== 249 | dependencies: 250 | "@typescript-eslint/types" "5.52.0" 251 | eslint-visitor-keys "^3.3.0" 252 | 253 | acorn-jsx@^5.3.2: 254 | version "5.3.2" 255 | resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" 256 | integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== 257 | 258 | acorn@^8.8.0: 259 | version "8.8.2" 260 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.2.tgz#1b2f25db02af965399b9776b0c2c391276d37c4a" 261 | integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw== 262 | 263 | ajv@^6.10.0, ajv@^6.12.4: 264 | version "6.12.6" 265 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" 266 | integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== 267 | dependencies: 268 | fast-deep-equal "^3.1.1" 269 | fast-json-stable-stringify "^2.0.0" 270 | json-schema-traverse "^0.4.1" 271 | uri-js "^4.2.2" 272 | 273 | ansi-regex@^5.0.1: 274 | version "5.0.1" 275 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" 276 | integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== 277 | 278 | ansi-styles@^4.1.0: 279 | version "4.3.0" 280 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" 281 | integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== 282 | dependencies: 283 | color-convert "^2.0.1" 284 | 285 | argparse@^2.0.1: 286 | version "2.0.1" 287 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" 288 | integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== 289 | 290 | aria-query@^5.1.3: 291 | version "5.1.3" 292 | resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.1.3.tgz#19db27cd101152773631396f7a95a3b58c22c35e" 293 | integrity sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ== 294 | dependencies: 295 | deep-equal "^2.0.5" 296 | 297 | array-includes@^3.1.5, array-includes@^3.1.6: 298 | version "3.1.6" 299 | resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.6.tgz#9e9e720e194f198266ba9e18c29e6a9b0e4b225f" 300 | integrity sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw== 301 | dependencies: 302 | call-bind "^1.0.2" 303 | define-properties "^1.1.4" 304 | es-abstract "^1.20.4" 305 | get-intrinsic "^1.1.3" 306 | is-string "^1.0.7" 307 | 308 | array-union@^2.1.0: 309 | version "2.1.0" 310 | resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" 311 | integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== 312 | 313 | array.prototype.flat@^1.3.1: 314 | version "1.3.1" 315 | resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz#ffc6576a7ca3efc2f46a143b9d1dda9b4b3cf5e2" 316 | integrity sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA== 317 | dependencies: 318 | call-bind "^1.0.2" 319 | define-properties "^1.1.4" 320 | es-abstract "^1.20.4" 321 | es-shim-unscopables "^1.0.0" 322 | 323 | array.prototype.flatmap@^1.3.1: 324 | version "1.3.1" 325 | resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz#1aae7903c2100433cb8261cd4ed310aab5c4a183" 326 | integrity sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ== 327 | dependencies: 328 | call-bind "^1.0.2" 329 | define-properties "^1.1.4" 330 | es-abstract "^1.20.4" 331 | es-shim-unscopables "^1.0.0" 332 | 333 | array.prototype.tosorted@^1.1.1: 334 | version "1.1.1" 335 | resolved "https://registry.yarnpkg.com/array.prototype.tosorted/-/array.prototype.tosorted-1.1.1.tgz#ccf44738aa2b5ac56578ffda97c03fd3e23dd532" 336 | integrity sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ== 337 | dependencies: 338 | call-bind "^1.0.2" 339 | define-properties "^1.1.4" 340 | es-abstract "^1.20.4" 341 | es-shim-unscopables "^1.0.0" 342 | get-intrinsic "^1.1.3" 343 | 344 | ast-types-flow@^0.0.7: 345 | version "0.0.7" 346 | resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" 347 | integrity sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag== 348 | 349 | available-typed-arrays@^1.0.5: 350 | version "1.0.5" 351 | resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" 352 | integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== 353 | 354 | axe-core@^4.6.2: 355 | version "4.6.3" 356 | resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.6.3.tgz#fc0db6fdb65cc7a80ccf85286d91d64ababa3ece" 357 | integrity sha512-/BQzOX780JhsxDnPpH4ZiyrJAzcd8AfzFPkv+89veFSr1rcMjuq2JDCwypKaPeB6ljHp9KjXhPpjgCvQlWYuqg== 358 | 359 | axobject-query@^3.1.1: 360 | version "3.1.1" 361 | resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-3.1.1.tgz#3b6e5c6d4e43ca7ba51c5babf99d22a9c68485e1" 362 | integrity sha512-goKlv8DZrK9hUh975fnHzhNIO4jUnFCfv/dszV5VwUGDFjI6vQ2VwoyjYjYNEbBE8AH87TduWP5uyDR1D+Iteg== 363 | dependencies: 364 | deep-equal "^2.0.5" 365 | 366 | balanced-match@^1.0.0: 367 | version "1.0.2" 368 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" 369 | integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== 370 | 371 | brace-expansion@^1.1.7: 372 | version "1.1.11" 373 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 374 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 375 | dependencies: 376 | balanced-match "^1.0.0" 377 | concat-map "0.0.1" 378 | 379 | braces@^3.0.2: 380 | version "3.0.2" 381 | resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" 382 | integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== 383 | dependencies: 384 | fill-range "^7.0.1" 385 | 386 | call-bind@^1.0.0, call-bind@^1.0.2: 387 | version "1.0.2" 388 | resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" 389 | integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== 390 | dependencies: 391 | function-bind "^1.1.1" 392 | get-intrinsic "^1.0.2" 393 | 394 | callsites@^3.0.0: 395 | version "3.1.0" 396 | resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" 397 | integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== 398 | 399 | caniuse-lite@^1.0.30001406: 400 | version "1.0.30001456" 401 | resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001456.tgz#734ec1dbfa4f3abe6e435b78ecf40d68e8c32ce4" 402 | integrity sha512-XFHJY5dUgmpMV25UqaD4kVq2LsiaU5rS8fb0f17pCoXQiQslzmFgnfOxfvo1bTpTqf7dwG/N/05CnLCnOEKmzA== 403 | 404 | chalk@^4.0.0: 405 | version "4.1.2" 406 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" 407 | integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== 408 | dependencies: 409 | ansi-styles "^4.1.0" 410 | supports-color "^7.1.0" 411 | 412 | client-only@0.0.1: 413 | version "0.0.1" 414 | resolved "https://registry.yarnpkg.com/client-only/-/client-only-0.0.1.tgz#38bba5d403c41ab150bff64a95c85013cf73bca1" 415 | integrity sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA== 416 | 417 | color-convert@^2.0.1: 418 | version "2.0.1" 419 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" 420 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== 421 | dependencies: 422 | color-name "~1.1.4" 423 | 424 | color-name@~1.1.4: 425 | version "1.1.4" 426 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" 427 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== 428 | 429 | concat-map@0.0.1: 430 | version "0.0.1" 431 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 432 | integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== 433 | 434 | cross-spawn@^7.0.2, cross-spawn@^7.0.3: 435 | version "7.0.3" 436 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" 437 | integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== 438 | dependencies: 439 | path-key "^3.1.0" 440 | shebang-command "^2.0.0" 441 | which "^2.0.1" 442 | 443 | csstype@^3.0.2: 444 | version "3.1.1" 445 | resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.1.tgz#841b532c45c758ee546a11d5bd7b7b473c8c30b9" 446 | integrity sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw== 447 | 448 | damerau-levenshtein@^1.0.8: 449 | version "1.0.8" 450 | resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz#b43d286ccbd36bc5b2f7ed41caf2d0aba1f8a6e7" 451 | integrity sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA== 452 | 453 | debug@^3.2.7: 454 | version "3.2.7" 455 | resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" 456 | integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== 457 | dependencies: 458 | ms "^2.1.1" 459 | 460 | debug@^4.1.1, debug@^4.3.2, debug@^4.3.4: 461 | version "4.3.4" 462 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" 463 | integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== 464 | dependencies: 465 | ms "2.1.2" 466 | 467 | deep-equal@^2.0.5: 468 | version "2.2.0" 469 | resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-2.2.0.tgz#5caeace9c781028b9ff459f33b779346637c43e6" 470 | integrity sha512-RdpzE0Hv4lhowpIUKKMJfeH6C1pXdtT1/it80ubgWqwI3qpuxUBpC1S4hnHg+zjnuOoDkzUtUCEEkG+XG5l3Mw== 471 | dependencies: 472 | call-bind "^1.0.2" 473 | es-get-iterator "^1.1.2" 474 | get-intrinsic "^1.1.3" 475 | is-arguments "^1.1.1" 476 | is-array-buffer "^3.0.1" 477 | is-date-object "^1.0.5" 478 | is-regex "^1.1.4" 479 | is-shared-array-buffer "^1.0.2" 480 | isarray "^2.0.5" 481 | object-is "^1.1.5" 482 | object-keys "^1.1.1" 483 | object.assign "^4.1.4" 484 | regexp.prototype.flags "^1.4.3" 485 | side-channel "^1.0.4" 486 | which-boxed-primitive "^1.0.2" 487 | which-collection "^1.0.1" 488 | which-typed-array "^1.1.9" 489 | 490 | deep-is@^0.1.3: 491 | version "0.1.4" 492 | resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" 493 | integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== 494 | 495 | define-lazy-prop@^2.0.0: 496 | version "2.0.0" 497 | resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" 498 | integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== 499 | 500 | define-properties@^1.1.3, define-properties@^1.1.4: 501 | version "1.2.0" 502 | resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.0.tgz#52988570670c9eacedd8064f4a990f2405849bd5" 503 | integrity sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA== 504 | dependencies: 505 | has-property-descriptors "^1.0.0" 506 | object-keys "^1.1.1" 507 | 508 | dir-glob@^3.0.1: 509 | version "3.0.1" 510 | resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" 511 | integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== 512 | dependencies: 513 | path-type "^4.0.0" 514 | 515 | doctrine@^2.1.0: 516 | version "2.1.0" 517 | resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" 518 | integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== 519 | dependencies: 520 | esutils "^2.0.2" 521 | 522 | doctrine@^3.0.0: 523 | version "3.0.0" 524 | resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" 525 | integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== 526 | dependencies: 527 | esutils "^2.0.2" 528 | 529 | dotenv@^16.0.3: 530 | version "16.0.3" 531 | resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.0.3.tgz#115aec42bac5053db3c456db30cc243a5a836a07" 532 | integrity sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ== 533 | 534 | emoji-regex@^9.2.2: 535 | version "9.2.2" 536 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" 537 | integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== 538 | 539 | enhanced-resolve@^5.10.0: 540 | version "5.12.0" 541 | resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz#300e1c90228f5b570c4d35babf263f6da7155634" 542 | integrity sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ== 543 | dependencies: 544 | graceful-fs "^4.2.4" 545 | tapable "^2.2.0" 546 | 547 | es-abstract@^1.19.0, es-abstract@^1.20.4: 548 | version "1.21.1" 549 | resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.21.1.tgz#e6105a099967c08377830a0c9cb589d570dd86c6" 550 | integrity sha512-QudMsPOz86xYz/1dG1OuGBKOELjCh99IIWHLzy5znUB6j8xG2yMA7bfTV86VSqKF+Y/H08vQPR+9jyXpuC6hfg== 551 | dependencies: 552 | available-typed-arrays "^1.0.5" 553 | call-bind "^1.0.2" 554 | es-set-tostringtag "^2.0.1" 555 | es-to-primitive "^1.2.1" 556 | function-bind "^1.1.1" 557 | function.prototype.name "^1.1.5" 558 | get-intrinsic "^1.1.3" 559 | get-symbol-description "^1.0.0" 560 | globalthis "^1.0.3" 561 | gopd "^1.0.1" 562 | has "^1.0.3" 563 | has-property-descriptors "^1.0.0" 564 | has-proto "^1.0.1" 565 | has-symbols "^1.0.3" 566 | internal-slot "^1.0.4" 567 | is-array-buffer "^3.0.1" 568 | is-callable "^1.2.7" 569 | is-negative-zero "^2.0.2" 570 | is-regex "^1.1.4" 571 | is-shared-array-buffer "^1.0.2" 572 | is-string "^1.0.7" 573 | is-typed-array "^1.1.10" 574 | is-weakref "^1.0.2" 575 | object-inspect "^1.12.2" 576 | object-keys "^1.1.1" 577 | object.assign "^4.1.4" 578 | regexp.prototype.flags "^1.4.3" 579 | safe-regex-test "^1.0.0" 580 | string.prototype.trimend "^1.0.6" 581 | string.prototype.trimstart "^1.0.6" 582 | typed-array-length "^1.0.4" 583 | unbox-primitive "^1.0.2" 584 | which-typed-array "^1.1.9" 585 | 586 | es-get-iterator@^1.1.2: 587 | version "1.1.3" 588 | resolved "https://registry.yarnpkg.com/es-get-iterator/-/es-get-iterator-1.1.3.tgz#3ef87523c5d464d41084b2c3c9c214f1199763d6" 589 | integrity sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw== 590 | dependencies: 591 | call-bind "^1.0.2" 592 | get-intrinsic "^1.1.3" 593 | has-symbols "^1.0.3" 594 | is-arguments "^1.1.1" 595 | is-map "^2.0.2" 596 | is-set "^2.0.2" 597 | is-string "^1.0.7" 598 | isarray "^2.0.5" 599 | stop-iteration-iterator "^1.0.0" 600 | 601 | es-set-tostringtag@^2.0.1: 602 | version "2.0.1" 603 | resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz#338d502f6f674301d710b80c8592de8a15f09cd8" 604 | integrity sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg== 605 | dependencies: 606 | get-intrinsic "^1.1.3" 607 | has "^1.0.3" 608 | has-tostringtag "^1.0.0" 609 | 610 | es-shim-unscopables@^1.0.0: 611 | version "1.0.0" 612 | resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz#702e632193201e3edf8713635d083d378e510241" 613 | integrity sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w== 614 | dependencies: 615 | has "^1.0.3" 616 | 617 | es-to-primitive@^1.2.1: 618 | version "1.2.1" 619 | resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" 620 | integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== 621 | dependencies: 622 | is-callable "^1.1.4" 623 | is-date-object "^1.0.1" 624 | is-symbol "^1.0.2" 625 | 626 | escape-string-regexp@^4.0.0: 627 | version "4.0.0" 628 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" 629 | integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== 630 | 631 | eslint-config-next@13.1.6: 632 | version "13.1.6" 633 | resolved "https://registry.yarnpkg.com/eslint-config-next/-/eslint-config-next-13.1.6.tgz#ab6894fe5b80080f1e9b9306d1c4b0003230620e" 634 | integrity sha512-0cg7h5wztg/SoLAlxljZ0ZPUQ7i6QKqRiP4M2+MgTZtxWwNKb2JSwNc18nJ6/kXBI6xYvPraTbQSIhAuVw6czw== 635 | dependencies: 636 | "@next/eslint-plugin-next" "13.1.6" 637 | "@rushstack/eslint-patch" "^1.1.3" 638 | "@typescript-eslint/parser" "^5.42.0" 639 | eslint-import-resolver-node "^0.3.6" 640 | eslint-import-resolver-typescript "^3.5.2" 641 | eslint-plugin-import "^2.26.0" 642 | eslint-plugin-jsx-a11y "^6.5.1" 643 | eslint-plugin-react "^7.31.7" 644 | eslint-plugin-react-hooks "^4.5.0" 645 | 646 | eslint-import-resolver-node@^0.3.6, eslint-import-resolver-node@^0.3.7: 647 | version "0.3.7" 648 | resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz#83b375187d412324a1963d84fa664377a23eb4d7" 649 | integrity sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA== 650 | dependencies: 651 | debug "^3.2.7" 652 | is-core-module "^2.11.0" 653 | resolve "^1.22.1" 654 | 655 | eslint-import-resolver-typescript@^3.5.2: 656 | version "3.5.3" 657 | resolved "https://registry.yarnpkg.com/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.5.3.tgz#db5ed9e906651b7a59dd84870aaef0e78c663a05" 658 | integrity sha512-njRcKYBc3isE42LaTcJNVANR3R99H9bAxBDMNDr2W7yq5gYPxbU3MkdhsQukxZ/Xg9C2vcyLlDsbKfRDg0QvCQ== 659 | dependencies: 660 | debug "^4.3.4" 661 | enhanced-resolve "^5.10.0" 662 | get-tsconfig "^4.2.0" 663 | globby "^13.1.2" 664 | is-core-module "^2.10.0" 665 | is-glob "^4.0.3" 666 | synckit "^0.8.4" 667 | 668 | eslint-module-utils@^2.7.4: 669 | version "2.7.4" 670 | resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz#4f3e41116aaf13a20792261e61d3a2e7e0583974" 671 | integrity sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA== 672 | dependencies: 673 | debug "^3.2.7" 674 | 675 | eslint-plugin-import@^2.26.0: 676 | version "2.27.5" 677 | resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.27.5.tgz#876a6d03f52608a3e5bb439c2550588e51dd6c65" 678 | integrity sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow== 679 | dependencies: 680 | array-includes "^3.1.6" 681 | array.prototype.flat "^1.3.1" 682 | array.prototype.flatmap "^1.3.1" 683 | debug "^3.2.7" 684 | doctrine "^2.1.0" 685 | eslint-import-resolver-node "^0.3.7" 686 | eslint-module-utils "^2.7.4" 687 | has "^1.0.3" 688 | is-core-module "^2.11.0" 689 | is-glob "^4.0.3" 690 | minimatch "^3.1.2" 691 | object.values "^1.1.6" 692 | resolve "^1.22.1" 693 | semver "^6.3.0" 694 | tsconfig-paths "^3.14.1" 695 | 696 | eslint-plugin-jsx-a11y@^6.5.1: 697 | version "6.7.1" 698 | resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.7.1.tgz#fca5e02d115f48c9a597a6894d5bcec2f7a76976" 699 | integrity sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA== 700 | dependencies: 701 | "@babel/runtime" "^7.20.7" 702 | aria-query "^5.1.3" 703 | array-includes "^3.1.6" 704 | array.prototype.flatmap "^1.3.1" 705 | ast-types-flow "^0.0.7" 706 | axe-core "^4.6.2" 707 | axobject-query "^3.1.1" 708 | damerau-levenshtein "^1.0.8" 709 | emoji-regex "^9.2.2" 710 | has "^1.0.3" 711 | jsx-ast-utils "^3.3.3" 712 | language-tags "=1.0.5" 713 | minimatch "^3.1.2" 714 | object.entries "^1.1.6" 715 | object.fromentries "^2.0.6" 716 | semver "^6.3.0" 717 | 718 | eslint-plugin-react-hooks@^4.5.0: 719 | version "4.6.0" 720 | resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz#4c3e697ad95b77e93f8646aaa1630c1ba607edd3" 721 | integrity sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g== 722 | 723 | eslint-plugin-react@^7.31.7: 724 | version "7.32.2" 725 | resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.32.2.tgz#e71f21c7c265ebce01bcbc9d0955170c55571f10" 726 | integrity sha512-t2fBMa+XzonrrNkyVirzKlvn5RXzzPwRHtMvLAtVZrt8oxgnTQaYbU6SXTOO1mwQgp1y5+toMSKInnzGr0Knqg== 727 | dependencies: 728 | array-includes "^3.1.6" 729 | array.prototype.flatmap "^1.3.1" 730 | array.prototype.tosorted "^1.1.1" 731 | doctrine "^2.1.0" 732 | estraverse "^5.3.0" 733 | jsx-ast-utils "^2.4.1 || ^3.0.0" 734 | minimatch "^3.1.2" 735 | object.entries "^1.1.6" 736 | object.fromentries "^2.0.6" 737 | object.hasown "^1.1.2" 738 | object.values "^1.1.6" 739 | prop-types "^15.8.1" 740 | resolve "^2.0.0-next.4" 741 | semver "^6.3.0" 742 | string.prototype.matchall "^4.0.8" 743 | 744 | eslint-scope@^7.1.1: 745 | version "7.1.1" 746 | resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.1.1.tgz#fff34894c2f65e5226d3041ac480b4513a163642" 747 | integrity sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw== 748 | dependencies: 749 | esrecurse "^4.3.0" 750 | estraverse "^5.2.0" 751 | 752 | eslint-utils@^3.0.0: 753 | version "3.0.0" 754 | resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672" 755 | integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== 756 | dependencies: 757 | eslint-visitor-keys "^2.0.0" 758 | 759 | eslint-visitor-keys@^2.0.0: 760 | version "2.1.0" 761 | resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" 762 | integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== 763 | 764 | eslint-visitor-keys@^3.3.0: 765 | version "3.3.0" 766 | resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826" 767 | integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== 768 | 769 | eslint@8.34.0: 770 | version "8.34.0" 771 | resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.34.0.tgz#fe0ab0ef478104c1f9ebc5537e303d25a8fb22d6" 772 | integrity sha512-1Z8iFsucw+7kSqXNZVslXS8Ioa4u2KM7GPwuKtkTFAqZ/cHMcEaR+1+Br0wLlot49cNxIiZk5wp8EAbPcYZxTg== 773 | dependencies: 774 | "@eslint/eslintrc" "^1.4.1" 775 | "@humanwhocodes/config-array" "^0.11.8" 776 | "@humanwhocodes/module-importer" "^1.0.1" 777 | "@nodelib/fs.walk" "^1.2.8" 778 | ajv "^6.10.0" 779 | chalk "^4.0.0" 780 | cross-spawn "^7.0.2" 781 | debug "^4.3.2" 782 | doctrine "^3.0.0" 783 | escape-string-regexp "^4.0.0" 784 | eslint-scope "^7.1.1" 785 | eslint-utils "^3.0.0" 786 | eslint-visitor-keys "^3.3.0" 787 | espree "^9.4.0" 788 | esquery "^1.4.0" 789 | esutils "^2.0.2" 790 | fast-deep-equal "^3.1.3" 791 | file-entry-cache "^6.0.1" 792 | find-up "^5.0.0" 793 | glob-parent "^6.0.2" 794 | globals "^13.19.0" 795 | grapheme-splitter "^1.0.4" 796 | ignore "^5.2.0" 797 | import-fresh "^3.0.0" 798 | imurmurhash "^0.1.4" 799 | is-glob "^4.0.0" 800 | is-path-inside "^3.0.3" 801 | js-sdsl "^4.1.4" 802 | js-yaml "^4.1.0" 803 | json-stable-stringify-without-jsonify "^1.0.1" 804 | levn "^0.4.1" 805 | lodash.merge "^4.6.2" 806 | minimatch "^3.1.2" 807 | natural-compare "^1.4.0" 808 | optionator "^0.9.1" 809 | regexpp "^3.2.0" 810 | strip-ansi "^6.0.1" 811 | strip-json-comments "^3.1.0" 812 | text-table "^0.2.0" 813 | 814 | espree@^9.4.0: 815 | version "9.4.1" 816 | resolved "https://registry.yarnpkg.com/espree/-/espree-9.4.1.tgz#51d6092615567a2c2cff7833445e37c28c0065bd" 817 | integrity sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg== 818 | dependencies: 819 | acorn "^8.8.0" 820 | acorn-jsx "^5.3.2" 821 | eslint-visitor-keys "^3.3.0" 822 | 823 | esquery@^1.4.0: 824 | version "1.4.2" 825 | resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.2.tgz#c6d3fee05dd665808e2ad870631f221f5617b1d1" 826 | integrity sha512-JVSoLdTlTDkmjFmab7H/9SL9qGSyjElT3myyKp7krqjVFQCDLmj1QFaCLRFBszBKI0XVZaiiXvuPIX3ZwHe1Ng== 827 | dependencies: 828 | estraverse "^5.1.0" 829 | 830 | esrecurse@^4.3.0: 831 | version "4.3.0" 832 | resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" 833 | integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== 834 | dependencies: 835 | estraverse "^5.2.0" 836 | 837 | estraverse@^5.1.0, estraverse@^5.2.0, estraverse@^5.3.0: 838 | version "5.3.0" 839 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" 840 | integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== 841 | 842 | esutils@^2.0.2: 843 | version "2.0.3" 844 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" 845 | integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== 846 | 847 | eventsource-parser@^0.1.0: 848 | version "0.1.0" 849 | resolved "https://registry.yarnpkg.com/eventsource-parser/-/eventsource-parser-0.1.0.tgz#4a6b84751ca8e704040e6f7f50e7d77344fa1b7c" 850 | integrity sha512-M9QjFtEIkwytUarnx113HGmgtk52LSn3jNAtnWKi3V+b9rqSfQeVdLsaD5AG/O4IrGQwmAAHBIsqbmURPTd2rA== 851 | 852 | fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: 853 | version "3.1.3" 854 | resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" 855 | integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== 856 | 857 | fast-glob@^3.2.11, fast-glob@^3.2.9: 858 | version "3.2.12" 859 | resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80" 860 | integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w== 861 | dependencies: 862 | "@nodelib/fs.stat" "^2.0.2" 863 | "@nodelib/fs.walk" "^1.2.3" 864 | glob-parent "^5.1.2" 865 | merge2 "^1.3.0" 866 | micromatch "^4.0.4" 867 | 868 | fast-json-stable-stringify@^2.0.0: 869 | version "2.1.0" 870 | resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" 871 | integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== 872 | 873 | fast-levenshtein@^2.0.6: 874 | version "2.0.6" 875 | resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" 876 | integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== 877 | 878 | fastq@^1.6.0: 879 | version "1.15.0" 880 | resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a" 881 | integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw== 882 | dependencies: 883 | reusify "^1.0.4" 884 | 885 | file-entry-cache@^6.0.1: 886 | version "6.0.1" 887 | resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" 888 | integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== 889 | dependencies: 890 | flat-cache "^3.0.4" 891 | 892 | fill-range@^7.0.1: 893 | version "7.0.1" 894 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" 895 | integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== 896 | dependencies: 897 | to-regex-range "^5.0.1" 898 | 899 | find-up@^5.0.0: 900 | version "5.0.0" 901 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" 902 | integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== 903 | dependencies: 904 | locate-path "^6.0.0" 905 | path-exists "^4.0.0" 906 | 907 | flat-cache@^3.0.4: 908 | version "3.0.4" 909 | resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" 910 | integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== 911 | dependencies: 912 | flatted "^3.1.0" 913 | rimraf "^3.0.2" 914 | 915 | flatted@^3.1.0: 916 | version "3.2.7" 917 | resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787" 918 | integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ== 919 | 920 | for-each@^0.3.3: 921 | version "0.3.3" 922 | resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" 923 | integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== 924 | dependencies: 925 | is-callable "^1.1.3" 926 | 927 | fs.realpath@^1.0.0: 928 | version "1.0.0" 929 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 930 | integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== 931 | 932 | function-bind@^1.1.1: 933 | version "1.1.1" 934 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" 935 | integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== 936 | 937 | function.prototype.name@^1.1.5: 938 | version "1.1.5" 939 | resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.5.tgz#cce0505fe1ffb80503e6f9e46cc64e46a12a9621" 940 | integrity sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA== 941 | dependencies: 942 | call-bind "^1.0.2" 943 | define-properties "^1.1.3" 944 | es-abstract "^1.19.0" 945 | functions-have-names "^1.2.2" 946 | 947 | functions-have-names@^1.2.2: 948 | version "1.2.3" 949 | resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" 950 | integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== 951 | 952 | get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0: 953 | version "1.2.0" 954 | resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.0.tgz#7ad1dc0535f3a2904bba075772763e5051f6d05f" 955 | integrity sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q== 956 | dependencies: 957 | function-bind "^1.1.1" 958 | has "^1.0.3" 959 | has-symbols "^1.0.3" 960 | 961 | get-symbol-description@^1.0.0: 962 | version "1.0.0" 963 | resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" 964 | integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== 965 | dependencies: 966 | call-bind "^1.0.2" 967 | get-intrinsic "^1.1.1" 968 | 969 | get-tsconfig@^4.2.0: 970 | version "4.4.0" 971 | resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.4.0.tgz#64eee64596668a81b8fce18403f94f245ee0d4e5" 972 | integrity sha512-0Gdjo/9+FzsYhXCEFueo2aY1z1tpXrxWZzP7k8ul9qt1U5o8rYJwTJYmaeHdrVosYIVYkOy2iwCJ9FdpocJhPQ== 973 | 974 | glob-parent@^5.1.2: 975 | version "5.1.2" 976 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" 977 | integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== 978 | dependencies: 979 | is-glob "^4.0.1" 980 | 981 | glob-parent@^6.0.2: 982 | version "6.0.2" 983 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" 984 | integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== 985 | dependencies: 986 | is-glob "^4.0.3" 987 | 988 | glob@7.1.7: 989 | version "7.1.7" 990 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90" 991 | integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== 992 | dependencies: 993 | fs.realpath "^1.0.0" 994 | inflight "^1.0.4" 995 | inherits "2" 996 | minimatch "^3.0.4" 997 | once "^1.3.0" 998 | path-is-absolute "^1.0.0" 999 | 1000 | glob@^7.1.3: 1001 | version "7.2.3" 1002 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" 1003 | integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== 1004 | dependencies: 1005 | fs.realpath "^1.0.0" 1006 | inflight "^1.0.4" 1007 | inherits "2" 1008 | minimatch "^3.1.1" 1009 | once "^1.3.0" 1010 | path-is-absolute "^1.0.0" 1011 | 1012 | globals@^13.19.0: 1013 | version "13.20.0" 1014 | resolved "https://registry.yarnpkg.com/globals/-/globals-13.20.0.tgz#ea276a1e508ffd4f1612888f9d1bad1e2717bf82" 1015 | integrity sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ== 1016 | dependencies: 1017 | type-fest "^0.20.2" 1018 | 1019 | globalthis@^1.0.3: 1020 | version "1.0.3" 1021 | resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.3.tgz#5852882a52b80dc301b0660273e1ed082f0b6ccf" 1022 | integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA== 1023 | dependencies: 1024 | define-properties "^1.1.3" 1025 | 1026 | globalyzer@0.1.0: 1027 | version "0.1.0" 1028 | resolved "https://registry.yarnpkg.com/globalyzer/-/globalyzer-0.1.0.tgz#cb76da79555669a1519d5a8edf093afaa0bf1465" 1029 | integrity sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q== 1030 | 1031 | globby@^11.1.0: 1032 | version "11.1.0" 1033 | resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" 1034 | integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== 1035 | dependencies: 1036 | array-union "^2.1.0" 1037 | dir-glob "^3.0.1" 1038 | fast-glob "^3.2.9" 1039 | ignore "^5.2.0" 1040 | merge2 "^1.4.1" 1041 | slash "^3.0.0" 1042 | 1043 | globby@^13.1.2: 1044 | version "13.1.3" 1045 | resolved "https://registry.yarnpkg.com/globby/-/globby-13.1.3.tgz#f62baf5720bcb2c1330c8d4ef222ee12318563ff" 1046 | integrity sha512-8krCNHXvlCgHDpegPzleMq07yMYTO2sXKASmZmquEYWEmCx6J5UTRbp5RwMJkTJGtcQ44YpiUYUiN0b9mzy8Bw== 1047 | dependencies: 1048 | dir-glob "^3.0.1" 1049 | fast-glob "^3.2.11" 1050 | ignore "^5.2.0" 1051 | merge2 "^1.4.1" 1052 | slash "^4.0.0" 1053 | 1054 | globrex@^0.1.2: 1055 | version "0.1.2" 1056 | resolved "https://registry.yarnpkg.com/globrex/-/globrex-0.1.2.tgz#dd5d9ec826232730cd6793a5e33a9302985e6098" 1057 | integrity sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg== 1058 | 1059 | gopd@^1.0.1: 1060 | version "1.0.1" 1061 | resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" 1062 | integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== 1063 | dependencies: 1064 | get-intrinsic "^1.1.3" 1065 | 1066 | graceful-fs@^4.2.4: 1067 | version "4.2.10" 1068 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" 1069 | integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== 1070 | 1071 | grapheme-splitter@^1.0.4: 1072 | version "1.0.4" 1073 | resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" 1074 | integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== 1075 | 1076 | has-bigints@^1.0.1, has-bigints@^1.0.2: 1077 | version "1.0.2" 1078 | resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" 1079 | integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== 1080 | 1081 | has-flag@^4.0.0: 1082 | version "4.0.0" 1083 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" 1084 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== 1085 | 1086 | has-property-descriptors@^1.0.0: 1087 | version "1.0.0" 1088 | resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861" 1089 | integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== 1090 | dependencies: 1091 | get-intrinsic "^1.1.1" 1092 | 1093 | has-proto@^1.0.1: 1094 | version "1.0.1" 1095 | resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" 1096 | integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== 1097 | 1098 | has-symbols@^1.0.2, has-symbols@^1.0.3: 1099 | version "1.0.3" 1100 | resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" 1101 | integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== 1102 | 1103 | has-tostringtag@^1.0.0: 1104 | version "1.0.0" 1105 | resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" 1106 | integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== 1107 | dependencies: 1108 | has-symbols "^1.0.2" 1109 | 1110 | has@^1.0.3: 1111 | version "1.0.3" 1112 | resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" 1113 | integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== 1114 | dependencies: 1115 | function-bind "^1.1.1" 1116 | 1117 | ignore@^5.2.0: 1118 | version "5.2.4" 1119 | resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" 1120 | integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== 1121 | 1122 | import-fresh@^3.0.0, import-fresh@^3.2.1: 1123 | version "3.3.0" 1124 | resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" 1125 | integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== 1126 | dependencies: 1127 | parent-module "^1.0.0" 1128 | resolve-from "^4.0.0" 1129 | 1130 | imurmurhash@^0.1.4: 1131 | version "0.1.4" 1132 | resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" 1133 | integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== 1134 | 1135 | inflight@^1.0.4: 1136 | version "1.0.6" 1137 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 1138 | integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== 1139 | dependencies: 1140 | once "^1.3.0" 1141 | wrappy "1" 1142 | 1143 | inherits@2: 1144 | version "2.0.4" 1145 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 1146 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 1147 | 1148 | internal-slot@^1.0.3, internal-slot@^1.0.4: 1149 | version "1.0.5" 1150 | resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.5.tgz#f2a2ee21f668f8627a4667f309dc0f4fb6674986" 1151 | integrity sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ== 1152 | dependencies: 1153 | get-intrinsic "^1.2.0" 1154 | has "^1.0.3" 1155 | side-channel "^1.0.4" 1156 | 1157 | is-arguments@^1.1.1: 1158 | version "1.1.1" 1159 | resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b" 1160 | integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== 1161 | dependencies: 1162 | call-bind "^1.0.2" 1163 | has-tostringtag "^1.0.0" 1164 | 1165 | is-array-buffer@^3.0.1: 1166 | version "3.0.1" 1167 | resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.1.tgz#deb1db4fcae48308d54ef2442706c0393997052a" 1168 | integrity sha512-ASfLknmY8Xa2XtB4wmbz13Wu202baeA18cJBCeCy0wXUHZF0IPyVEXqKEcd+t2fNSLLL1vC6k7lxZEojNbISXQ== 1169 | dependencies: 1170 | call-bind "^1.0.2" 1171 | get-intrinsic "^1.1.3" 1172 | is-typed-array "^1.1.10" 1173 | 1174 | is-bigint@^1.0.1: 1175 | version "1.0.4" 1176 | resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" 1177 | integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== 1178 | dependencies: 1179 | has-bigints "^1.0.1" 1180 | 1181 | is-boolean-object@^1.1.0: 1182 | version "1.1.2" 1183 | resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" 1184 | integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== 1185 | dependencies: 1186 | call-bind "^1.0.2" 1187 | has-tostringtag "^1.0.0" 1188 | 1189 | is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: 1190 | version "1.2.7" 1191 | resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" 1192 | integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== 1193 | 1194 | is-core-module@^2.10.0, is-core-module@^2.11.0, is-core-module@^2.9.0: 1195 | version "2.11.0" 1196 | resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.11.0.tgz#ad4cb3e3863e814523c96f3f58d26cc570ff0144" 1197 | integrity sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw== 1198 | dependencies: 1199 | has "^1.0.3" 1200 | 1201 | is-date-object@^1.0.1, is-date-object@^1.0.5: 1202 | version "1.0.5" 1203 | resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" 1204 | integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== 1205 | dependencies: 1206 | has-tostringtag "^1.0.0" 1207 | 1208 | is-docker@^2.0.0, is-docker@^2.1.1: 1209 | version "2.2.1" 1210 | resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" 1211 | integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== 1212 | 1213 | is-extglob@^2.1.1: 1214 | version "2.1.1" 1215 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" 1216 | integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== 1217 | 1218 | is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3: 1219 | version "4.0.3" 1220 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" 1221 | integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== 1222 | dependencies: 1223 | is-extglob "^2.1.1" 1224 | 1225 | is-map@^2.0.1, is-map@^2.0.2: 1226 | version "2.0.2" 1227 | resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.2.tgz#00922db8c9bf73e81b7a335827bc2a43f2b91127" 1228 | integrity sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg== 1229 | 1230 | is-negative-zero@^2.0.2: 1231 | version "2.0.2" 1232 | resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" 1233 | integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== 1234 | 1235 | is-number-object@^1.0.4: 1236 | version "1.0.7" 1237 | resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc" 1238 | integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== 1239 | dependencies: 1240 | has-tostringtag "^1.0.0" 1241 | 1242 | is-number@^7.0.0: 1243 | version "7.0.0" 1244 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" 1245 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== 1246 | 1247 | is-path-inside@^3.0.3: 1248 | version "3.0.3" 1249 | resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" 1250 | integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== 1251 | 1252 | is-regex@^1.1.4: 1253 | version "1.1.4" 1254 | resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" 1255 | integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== 1256 | dependencies: 1257 | call-bind "^1.0.2" 1258 | has-tostringtag "^1.0.0" 1259 | 1260 | is-set@^2.0.1, is-set@^2.0.2: 1261 | version "2.0.2" 1262 | resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.2.tgz#90755fa4c2562dc1c5d4024760d6119b94ca18ec" 1263 | integrity sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g== 1264 | 1265 | is-shared-array-buffer@^1.0.2: 1266 | version "1.0.2" 1267 | resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79" 1268 | integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== 1269 | dependencies: 1270 | call-bind "^1.0.2" 1271 | 1272 | is-string@^1.0.5, is-string@^1.0.7: 1273 | version "1.0.7" 1274 | resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" 1275 | integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== 1276 | dependencies: 1277 | has-tostringtag "^1.0.0" 1278 | 1279 | is-symbol@^1.0.2, is-symbol@^1.0.3: 1280 | version "1.0.4" 1281 | resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" 1282 | integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== 1283 | dependencies: 1284 | has-symbols "^1.0.2" 1285 | 1286 | is-typed-array@^1.1.10, is-typed-array@^1.1.9: 1287 | version "1.1.10" 1288 | resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.10.tgz#36a5b5cb4189b575d1a3e4b08536bfb485801e3f" 1289 | integrity sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A== 1290 | dependencies: 1291 | available-typed-arrays "^1.0.5" 1292 | call-bind "^1.0.2" 1293 | for-each "^0.3.3" 1294 | gopd "^1.0.1" 1295 | has-tostringtag "^1.0.0" 1296 | 1297 | is-weakmap@^2.0.1: 1298 | version "2.0.1" 1299 | resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.1.tgz#5008b59bdc43b698201d18f62b37b2ca243e8cf2" 1300 | integrity sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA== 1301 | 1302 | is-weakref@^1.0.2: 1303 | version "1.0.2" 1304 | resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" 1305 | integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== 1306 | dependencies: 1307 | call-bind "^1.0.2" 1308 | 1309 | is-weakset@^2.0.1: 1310 | version "2.0.2" 1311 | resolved "https://registry.yarnpkg.com/is-weakset/-/is-weakset-2.0.2.tgz#4569d67a747a1ce5a994dfd4ef6dcea76e7c0a1d" 1312 | integrity sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg== 1313 | dependencies: 1314 | call-bind "^1.0.2" 1315 | get-intrinsic "^1.1.1" 1316 | 1317 | is-wsl@^2.2.0: 1318 | version "2.2.0" 1319 | resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" 1320 | integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== 1321 | dependencies: 1322 | is-docker "^2.0.0" 1323 | 1324 | isarray@^2.0.5: 1325 | version "2.0.5" 1326 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" 1327 | integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== 1328 | 1329 | isexe@^2.0.0: 1330 | version "2.0.0" 1331 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 1332 | integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== 1333 | 1334 | js-sdsl@^4.1.4: 1335 | version "4.3.0" 1336 | resolved "https://registry.yarnpkg.com/js-sdsl/-/js-sdsl-4.3.0.tgz#aeefe32a451f7af88425b11fdb5f58c90ae1d711" 1337 | integrity sha512-mifzlm2+5nZ+lEcLJMoBK0/IH/bDg8XnJfd/Wq6IP+xoCjLZsTOnV2QpxlVbX9bMnkl5PdEjNtBJ9Cj1NjifhQ== 1338 | 1339 | "js-tokens@^3.0.0 || ^4.0.0": 1340 | version "4.0.0" 1341 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" 1342 | integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== 1343 | 1344 | js-yaml@^4.1.0: 1345 | version "4.1.0" 1346 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" 1347 | integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== 1348 | dependencies: 1349 | argparse "^2.0.1" 1350 | 1351 | json-schema-traverse@^0.4.1: 1352 | version "0.4.1" 1353 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" 1354 | integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== 1355 | 1356 | json-stable-stringify-without-jsonify@^1.0.1: 1357 | version "1.0.1" 1358 | resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" 1359 | integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== 1360 | 1361 | json5@^1.0.1: 1362 | version "1.0.2" 1363 | resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593" 1364 | integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA== 1365 | dependencies: 1366 | minimist "^1.2.0" 1367 | 1368 | "jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.3.3: 1369 | version "3.3.3" 1370 | resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz#76b3e6e6cece5c69d49a5792c3d01bd1a0cdc7ea" 1371 | integrity sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw== 1372 | dependencies: 1373 | array-includes "^3.1.5" 1374 | object.assign "^4.1.3" 1375 | 1376 | language-subtag-registry@~0.3.2: 1377 | version "0.3.22" 1378 | resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz#2e1500861b2e457eba7e7ae86877cbd08fa1fd1d" 1379 | integrity sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w== 1380 | 1381 | language-tags@=1.0.5: 1382 | version "1.0.5" 1383 | resolved "https://registry.yarnpkg.com/language-tags/-/language-tags-1.0.5.tgz#d321dbc4da30ba8bf3024e040fa5c14661f9193a" 1384 | integrity sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ== 1385 | dependencies: 1386 | language-subtag-registry "~0.3.2" 1387 | 1388 | levn@^0.4.1: 1389 | version "0.4.1" 1390 | resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" 1391 | integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== 1392 | dependencies: 1393 | prelude-ls "^1.2.1" 1394 | type-check "~0.4.0" 1395 | 1396 | locate-path@^6.0.0: 1397 | version "6.0.0" 1398 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" 1399 | integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== 1400 | dependencies: 1401 | p-locate "^5.0.0" 1402 | 1403 | lodash.merge@^4.6.2: 1404 | version "4.6.2" 1405 | resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" 1406 | integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== 1407 | 1408 | loose-envify@^1.1.0, loose-envify@^1.4.0: 1409 | version "1.4.0" 1410 | resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" 1411 | integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== 1412 | dependencies: 1413 | js-tokens "^3.0.0 || ^4.0.0" 1414 | 1415 | lru-cache@^6.0.0: 1416 | version "6.0.0" 1417 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" 1418 | integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== 1419 | dependencies: 1420 | yallist "^4.0.0" 1421 | 1422 | merge2@^1.3.0, merge2@^1.4.1: 1423 | version "1.4.1" 1424 | resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" 1425 | integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== 1426 | 1427 | micromatch@^4.0.4: 1428 | version "4.0.5" 1429 | resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" 1430 | integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== 1431 | dependencies: 1432 | braces "^3.0.2" 1433 | picomatch "^2.3.1" 1434 | 1435 | minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: 1436 | version "3.1.2" 1437 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" 1438 | integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== 1439 | dependencies: 1440 | brace-expansion "^1.1.7" 1441 | 1442 | minimist@^1.2.0, minimist@^1.2.6: 1443 | version "1.2.8" 1444 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" 1445 | integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== 1446 | 1447 | ms@2.1.2: 1448 | version "2.1.2" 1449 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" 1450 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== 1451 | 1452 | ms@^2.1.1: 1453 | version "2.1.3" 1454 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" 1455 | integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== 1456 | 1457 | nanoid@^3.3.4: 1458 | version "3.3.4" 1459 | resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.4.tgz#730b67e3cd09e2deacf03c027c81c9d9dbc5e8ab" 1460 | integrity sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw== 1461 | 1462 | natural-compare@^1.4.0: 1463 | version "1.4.0" 1464 | resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" 1465 | integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== 1466 | 1467 | next@13.1.6: 1468 | version "13.1.6" 1469 | resolved "https://registry.yarnpkg.com/next/-/next-13.1.6.tgz#054babe20b601f21f682f197063c9b0b32f1a27c" 1470 | integrity sha512-hHlbhKPj9pW+Cymvfzc15lvhaOZ54l+8sXDXJWm3OBNBzgrVj6hwGPmqqsXg40xO1Leq+kXpllzRPuncpC0Phw== 1471 | dependencies: 1472 | "@next/env" "13.1.6" 1473 | "@swc/helpers" "0.4.14" 1474 | caniuse-lite "^1.0.30001406" 1475 | postcss "8.4.14" 1476 | styled-jsx "5.1.1" 1477 | optionalDependencies: 1478 | "@next/swc-android-arm-eabi" "13.1.6" 1479 | "@next/swc-android-arm64" "13.1.6" 1480 | "@next/swc-darwin-arm64" "13.1.6" 1481 | "@next/swc-darwin-x64" "13.1.6" 1482 | "@next/swc-freebsd-x64" "13.1.6" 1483 | "@next/swc-linux-arm-gnueabihf" "13.1.6" 1484 | "@next/swc-linux-arm64-gnu" "13.1.6" 1485 | "@next/swc-linux-arm64-musl" "13.1.6" 1486 | "@next/swc-linux-x64-gnu" "13.1.6" 1487 | "@next/swc-linux-x64-musl" "13.1.6" 1488 | "@next/swc-win32-arm64-msvc" "13.1.6" 1489 | "@next/swc-win32-ia32-msvc" "13.1.6" 1490 | "@next/swc-win32-x64-msvc" "13.1.6" 1491 | 1492 | object-assign@^4.1.1: 1493 | version "4.1.1" 1494 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" 1495 | integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== 1496 | 1497 | object-inspect@^1.12.2, object-inspect@^1.9.0: 1498 | version "1.12.3" 1499 | resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9" 1500 | integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== 1501 | 1502 | object-is@^1.1.5: 1503 | version "1.1.5" 1504 | resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.5.tgz#b9deeaa5fc7f1846a0faecdceec138e5778f53ac" 1505 | integrity sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw== 1506 | dependencies: 1507 | call-bind "^1.0.2" 1508 | define-properties "^1.1.3" 1509 | 1510 | object-keys@^1.1.1: 1511 | version "1.1.1" 1512 | resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" 1513 | integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== 1514 | 1515 | object.assign@^4.1.3, object.assign@^4.1.4: 1516 | version "4.1.4" 1517 | resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f" 1518 | integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== 1519 | dependencies: 1520 | call-bind "^1.0.2" 1521 | define-properties "^1.1.4" 1522 | has-symbols "^1.0.3" 1523 | object-keys "^1.1.1" 1524 | 1525 | object.entries@^1.1.6: 1526 | version "1.1.6" 1527 | resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.6.tgz#9737d0e5b8291edd340a3e3264bb8a3b00d5fa23" 1528 | integrity sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w== 1529 | dependencies: 1530 | call-bind "^1.0.2" 1531 | define-properties "^1.1.4" 1532 | es-abstract "^1.20.4" 1533 | 1534 | object.fromentries@^2.0.6: 1535 | version "2.0.6" 1536 | resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.6.tgz#cdb04da08c539cffa912dcd368b886e0904bfa73" 1537 | integrity sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg== 1538 | dependencies: 1539 | call-bind "^1.0.2" 1540 | define-properties "^1.1.4" 1541 | es-abstract "^1.20.4" 1542 | 1543 | object.hasown@^1.1.2: 1544 | version "1.1.2" 1545 | resolved "https://registry.yarnpkg.com/object.hasown/-/object.hasown-1.1.2.tgz#f919e21fad4eb38a57bc6345b3afd496515c3f92" 1546 | integrity sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw== 1547 | dependencies: 1548 | define-properties "^1.1.4" 1549 | es-abstract "^1.20.4" 1550 | 1551 | object.values@^1.1.6: 1552 | version "1.1.6" 1553 | resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.6.tgz#4abbaa71eba47d63589d402856f908243eea9b1d" 1554 | integrity sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw== 1555 | dependencies: 1556 | call-bind "^1.0.2" 1557 | define-properties "^1.1.4" 1558 | es-abstract "^1.20.4" 1559 | 1560 | once@^1.3.0: 1561 | version "1.4.0" 1562 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 1563 | integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== 1564 | dependencies: 1565 | wrappy "1" 1566 | 1567 | open@^8.4.0: 1568 | version "8.4.1" 1569 | resolved "https://registry.yarnpkg.com/open/-/open-8.4.1.tgz#2ab3754c07f5d1f99a7a8d6a82737c95e3101cff" 1570 | integrity sha512-/4b7qZNhv6Uhd7jjnREh1NjnPxlTq+XNWPG88Ydkj5AILcA5m3ajvcg57pB24EQjKv0dK62XnDqk9c/hkIG5Kg== 1571 | dependencies: 1572 | define-lazy-prop "^2.0.0" 1573 | is-docker "^2.1.1" 1574 | is-wsl "^2.2.0" 1575 | 1576 | openai-streams@^1.0.19: 1577 | version "1.0.19" 1578 | resolved "https://registry.yarnpkg.com/openai-streams/-/openai-streams-1.0.19.tgz#04247fdb83a6102b9518db0eff48912f1bea2632" 1579 | integrity sha512-Gc6fAxbJwqpj+Rm0Ueg4zQGrXlkaziUci6QrfrIki/HC50HrlNlPy6CuUvDfepuOOCC5m1CGNPpiX9wrcr9X+g== 1580 | dependencies: 1581 | dotenv "^16.0.3" 1582 | eventsource-parser "^0.1.0" 1583 | yield-stream "^2.0.4" 1584 | 1585 | optionator@^0.9.1: 1586 | version "0.9.1" 1587 | resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" 1588 | integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== 1589 | dependencies: 1590 | deep-is "^0.1.3" 1591 | fast-levenshtein "^2.0.6" 1592 | levn "^0.4.1" 1593 | prelude-ls "^1.2.1" 1594 | type-check "^0.4.0" 1595 | word-wrap "^1.2.3" 1596 | 1597 | p-limit@^3.0.2: 1598 | version "3.1.0" 1599 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" 1600 | integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== 1601 | dependencies: 1602 | yocto-queue "^0.1.0" 1603 | 1604 | p-locate@^5.0.0: 1605 | version "5.0.0" 1606 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" 1607 | integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== 1608 | dependencies: 1609 | p-limit "^3.0.2" 1610 | 1611 | parent-module@^1.0.0: 1612 | version "1.0.1" 1613 | resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" 1614 | integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== 1615 | dependencies: 1616 | callsites "^3.0.0" 1617 | 1618 | path-exists@^4.0.0: 1619 | version "4.0.0" 1620 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" 1621 | integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== 1622 | 1623 | path-is-absolute@^1.0.0: 1624 | version "1.0.1" 1625 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 1626 | integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== 1627 | 1628 | path-key@^3.1.0: 1629 | version "3.1.1" 1630 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" 1631 | integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== 1632 | 1633 | path-parse@^1.0.7: 1634 | version "1.0.7" 1635 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" 1636 | integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== 1637 | 1638 | path-type@^4.0.0: 1639 | version "4.0.0" 1640 | resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" 1641 | integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== 1642 | 1643 | picocolors@^1.0.0: 1644 | version "1.0.0" 1645 | resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" 1646 | integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== 1647 | 1648 | picomatch@^2.3.1: 1649 | version "2.3.1" 1650 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" 1651 | integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== 1652 | 1653 | postcss@8.4.14: 1654 | version "8.4.14" 1655 | resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.14.tgz#ee9274d5622b4858c1007a74d76e42e56fd21caf" 1656 | integrity sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig== 1657 | dependencies: 1658 | nanoid "^3.3.4" 1659 | picocolors "^1.0.0" 1660 | source-map-js "^1.0.2" 1661 | 1662 | prelude-ls@^1.2.1: 1663 | version "1.2.1" 1664 | resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" 1665 | integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== 1666 | 1667 | prop-types@^15.8.1: 1668 | version "15.8.1" 1669 | resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" 1670 | integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== 1671 | dependencies: 1672 | loose-envify "^1.4.0" 1673 | object-assign "^4.1.1" 1674 | react-is "^16.13.1" 1675 | 1676 | punycode@^2.1.0: 1677 | version "2.3.0" 1678 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" 1679 | integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== 1680 | 1681 | queue-microtask@^1.2.2: 1682 | version "1.2.3" 1683 | resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" 1684 | integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== 1685 | 1686 | react-dom@18.2.0: 1687 | version "18.2.0" 1688 | resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.2.0.tgz#22aaf38708db2674ed9ada224ca4aa708d821e3d" 1689 | integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g== 1690 | dependencies: 1691 | loose-envify "^1.1.0" 1692 | scheduler "^0.23.0" 1693 | 1694 | react-is@^16.13.1: 1695 | version "16.13.1" 1696 | resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" 1697 | integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== 1698 | 1699 | react@18.2.0: 1700 | version "18.2.0" 1701 | resolved "https://registry.yarnpkg.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5" 1702 | integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ== 1703 | dependencies: 1704 | loose-envify "^1.1.0" 1705 | 1706 | regenerator-runtime@^0.13.11: 1707 | version "0.13.11" 1708 | resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9" 1709 | integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== 1710 | 1711 | regexp.prototype.flags@^1.4.3: 1712 | version "1.4.3" 1713 | resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz#87cab30f80f66660181a3bb7bf5981a872b367ac" 1714 | integrity sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA== 1715 | dependencies: 1716 | call-bind "^1.0.2" 1717 | define-properties "^1.1.3" 1718 | functions-have-names "^1.2.2" 1719 | 1720 | regexpp@^3.2.0: 1721 | version "3.2.0" 1722 | resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" 1723 | integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== 1724 | 1725 | resolve-from@^4.0.0: 1726 | version "4.0.0" 1727 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" 1728 | integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== 1729 | 1730 | resolve@^1.22.1: 1731 | version "1.22.1" 1732 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" 1733 | integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== 1734 | dependencies: 1735 | is-core-module "^2.9.0" 1736 | path-parse "^1.0.7" 1737 | supports-preserve-symlinks-flag "^1.0.0" 1738 | 1739 | resolve@^2.0.0-next.4: 1740 | version "2.0.0-next.4" 1741 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.4.tgz#3d37a113d6429f496ec4752d2a2e58efb1fd4660" 1742 | integrity sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ== 1743 | dependencies: 1744 | is-core-module "^2.9.0" 1745 | path-parse "^1.0.7" 1746 | supports-preserve-symlinks-flag "^1.0.0" 1747 | 1748 | reusify@^1.0.4: 1749 | version "1.0.4" 1750 | resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" 1751 | integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== 1752 | 1753 | rimraf@^3.0.2: 1754 | version "3.0.2" 1755 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" 1756 | integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== 1757 | dependencies: 1758 | glob "^7.1.3" 1759 | 1760 | run-parallel@^1.1.9: 1761 | version "1.2.0" 1762 | resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" 1763 | integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== 1764 | dependencies: 1765 | queue-microtask "^1.2.2" 1766 | 1767 | safe-regex-test@^1.0.0: 1768 | version "1.0.0" 1769 | resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.0.tgz#793b874d524eb3640d1873aad03596db2d4f2295" 1770 | integrity sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA== 1771 | dependencies: 1772 | call-bind "^1.0.2" 1773 | get-intrinsic "^1.1.3" 1774 | is-regex "^1.1.4" 1775 | 1776 | scheduler@^0.23.0: 1777 | version "0.23.0" 1778 | resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.0.tgz#ba8041afc3d30eb206a487b6b384002e4e61fdfe" 1779 | integrity sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw== 1780 | dependencies: 1781 | loose-envify "^1.1.0" 1782 | 1783 | semver@^6.3.0: 1784 | version "6.3.0" 1785 | resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" 1786 | integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== 1787 | 1788 | semver@^7.3.7: 1789 | version "7.3.8" 1790 | resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798" 1791 | integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== 1792 | dependencies: 1793 | lru-cache "^6.0.0" 1794 | 1795 | shebang-command@^2.0.0: 1796 | version "2.0.0" 1797 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" 1798 | integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== 1799 | dependencies: 1800 | shebang-regex "^3.0.0" 1801 | 1802 | shebang-regex@^3.0.0: 1803 | version "3.0.0" 1804 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" 1805 | integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== 1806 | 1807 | shim-streams@^0.0.2: 1808 | version "0.0.2" 1809 | resolved "https://registry.yarnpkg.com/shim-streams/-/shim-streams-0.0.2.tgz#816a9faf9bc158cbc57b5593f2d4c3c9087b02e6" 1810 | integrity sha512-9Otb+FCl13XxRp1nVddtsCbwvB7AEMTjzc3/fixowyzvSVoCzu/VEstblB2SdIDbd61u5D/zpS5u9fGzDdOoZg== 1811 | 1812 | side-channel@^1.0.4: 1813 | version "1.0.4" 1814 | resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" 1815 | integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== 1816 | dependencies: 1817 | call-bind "^1.0.0" 1818 | get-intrinsic "^1.0.2" 1819 | object-inspect "^1.9.0" 1820 | 1821 | slash@^3.0.0: 1822 | version "3.0.0" 1823 | resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" 1824 | integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== 1825 | 1826 | slash@^4.0.0: 1827 | version "4.0.0" 1828 | resolved "https://registry.yarnpkg.com/slash/-/slash-4.0.0.tgz#2422372176c4c6c5addb5e2ada885af984b396a7" 1829 | integrity sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew== 1830 | 1831 | source-map-js@^1.0.2: 1832 | version "1.0.2" 1833 | resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" 1834 | integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== 1835 | 1836 | stop-iteration-iterator@^1.0.0: 1837 | version "1.0.0" 1838 | resolved "https://registry.yarnpkg.com/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz#6a60be0b4ee757d1ed5254858ec66b10c49285e4" 1839 | integrity sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ== 1840 | dependencies: 1841 | internal-slot "^1.0.4" 1842 | 1843 | string.prototype.matchall@^4.0.8: 1844 | version "4.0.8" 1845 | resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz#3bf85722021816dcd1bf38bb714915887ca79fd3" 1846 | integrity sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg== 1847 | dependencies: 1848 | call-bind "^1.0.2" 1849 | define-properties "^1.1.4" 1850 | es-abstract "^1.20.4" 1851 | get-intrinsic "^1.1.3" 1852 | has-symbols "^1.0.3" 1853 | internal-slot "^1.0.3" 1854 | regexp.prototype.flags "^1.4.3" 1855 | side-channel "^1.0.4" 1856 | 1857 | string.prototype.trimend@^1.0.6: 1858 | version "1.0.6" 1859 | resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz#c4a27fa026d979d79c04f17397f250a462944533" 1860 | integrity sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ== 1861 | dependencies: 1862 | call-bind "^1.0.2" 1863 | define-properties "^1.1.4" 1864 | es-abstract "^1.20.4" 1865 | 1866 | string.prototype.trimstart@^1.0.6: 1867 | version "1.0.6" 1868 | resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz#e90ab66aa8e4007d92ef591bbf3cd422c56bdcf4" 1869 | integrity sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA== 1870 | dependencies: 1871 | call-bind "^1.0.2" 1872 | define-properties "^1.1.4" 1873 | es-abstract "^1.20.4" 1874 | 1875 | strip-ansi@^6.0.1: 1876 | version "6.0.1" 1877 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" 1878 | integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== 1879 | dependencies: 1880 | ansi-regex "^5.0.1" 1881 | 1882 | strip-bom@^3.0.0: 1883 | version "3.0.0" 1884 | resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" 1885 | integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== 1886 | 1887 | strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: 1888 | version "3.1.1" 1889 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" 1890 | integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== 1891 | 1892 | styled-jsx@5.1.1: 1893 | version "5.1.1" 1894 | resolved "https://registry.yarnpkg.com/styled-jsx/-/styled-jsx-5.1.1.tgz#839a1c3aaacc4e735fed0781b8619ea5d0009d1f" 1895 | integrity sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw== 1896 | dependencies: 1897 | client-only "0.0.1" 1898 | 1899 | supports-color@^7.1.0: 1900 | version "7.2.0" 1901 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" 1902 | integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== 1903 | dependencies: 1904 | has-flag "^4.0.0" 1905 | 1906 | supports-preserve-symlinks-flag@^1.0.0: 1907 | version "1.0.0" 1908 | resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" 1909 | integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== 1910 | 1911 | synckit@^0.8.4: 1912 | version "0.8.5" 1913 | resolved "https://registry.yarnpkg.com/synckit/-/synckit-0.8.5.tgz#b7f4358f9bb559437f9f167eb6bc46b3c9818fa3" 1914 | integrity sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q== 1915 | dependencies: 1916 | "@pkgr/utils" "^2.3.1" 1917 | tslib "^2.5.0" 1918 | 1919 | tapable@^2.2.0: 1920 | version "2.2.1" 1921 | resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" 1922 | integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== 1923 | 1924 | text-table@^0.2.0: 1925 | version "0.2.0" 1926 | resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" 1927 | integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== 1928 | 1929 | tiny-glob@^0.2.9: 1930 | version "0.2.9" 1931 | resolved "https://registry.yarnpkg.com/tiny-glob/-/tiny-glob-0.2.9.tgz#2212d441ac17928033b110f8b3640683129d31e2" 1932 | integrity sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg== 1933 | dependencies: 1934 | globalyzer "0.1.0" 1935 | globrex "^0.1.2" 1936 | 1937 | to-regex-range@^5.0.1: 1938 | version "5.0.1" 1939 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" 1940 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== 1941 | dependencies: 1942 | is-number "^7.0.0" 1943 | 1944 | tsconfig-paths@^3.14.1: 1945 | version "3.14.1" 1946 | resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz#ba0734599e8ea36c862798e920bcf163277b137a" 1947 | integrity sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ== 1948 | dependencies: 1949 | "@types/json5" "^0.0.29" 1950 | json5 "^1.0.1" 1951 | minimist "^1.2.6" 1952 | strip-bom "^3.0.0" 1953 | 1954 | tslib@^1.8.1: 1955 | version "1.14.1" 1956 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" 1957 | integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== 1958 | 1959 | tslib@^2.4.0, tslib@^2.5.0: 1960 | version "2.5.0" 1961 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.0.tgz#42bfed86f5787aeb41d031866c8f402429e0fddf" 1962 | integrity sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg== 1963 | 1964 | tsutils@^3.21.0: 1965 | version "3.21.0" 1966 | resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" 1967 | integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== 1968 | dependencies: 1969 | tslib "^1.8.1" 1970 | 1971 | type-check@^0.4.0, type-check@~0.4.0: 1972 | version "0.4.0" 1973 | resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" 1974 | integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== 1975 | dependencies: 1976 | prelude-ls "^1.2.1" 1977 | 1978 | type-fest@^0.20.2: 1979 | version "0.20.2" 1980 | resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" 1981 | integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== 1982 | 1983 | typed-array-length@^1.0.4: 1984 | version "1.0.4" 1985 | resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.4.tgz#89d83785e5c4098bec72e08b319651f0eac9c1bb" 1986 | integrity sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng== 1987 | dependencies: 1988 | call-bind "^1.0.2" 1989 | for-each "^0.3.3" 1990 | is-typed-array "^1.1.9" 1991 | 1992 | typescript@4.9.5: 1993 | version "4.9.5" 1994 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" 1995 | integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== 1996 | 1997 | unbox-primitive@^1.0.2: 1998 | version "1.0.2" 1999 | resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" 2000 | integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== 2001 | dependencies: 2002 | call-bind "^1.0.2" 2003 | has-bigints "^1.0.2" 2004 | has-symbols "^1.0.3" 2005 | which-boxed-primitive "^1.0.2" 2006 | 2007 | uri-js@^4.2.2: 2008 | version "4.4.1" 2009 | resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" 2010 | integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== 2011 | dependencies: 2012 | punycode "^2.1.0" 2013 | 2014 | web-streams-polyfill@^3.2.1: 2015 | version "3.2.1" 2016 | resolved "https://registry.yarnpkg.com/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz#71c2718c52b45fd49dbeee88634b3a60ceab42a6" 2017 | integrity sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q== 2018 | 2019 | which-boxed-primitive@^1.0.2: 2020 | version "1.0.2" 2021 | resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" 2022 | integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== 2023 | dependencies: 2024 | is-bigint "^1.0.1" 2025 | is-boolean-object "^1.1.0" 2026 | is-number-object "^1.0.4" 2027 | is-string "^1.0.5" 2028 | is-symbol "^1.0.3" 2029 | 2030 | which-collection@^1.0.1: 2031 | version "1.0.1" 2032 | resolved "https://registry.yarnpkg.com/which-collection/-/which-collection-1.0.1.tgz#70eab71ebbbd2aefaf32f917082fc62cdcb70906" 2033 | integrity sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A== 2034 | dependencies: 2035 | is-map "^2.0.1" 2036 | is-set "^2.0.1" 2037 | is-weakmap "^2.0.1" 2038 | is-weakset "^2.0.1" 2039 | 2040 | which-typed-array@^1.1.9: 2041 | version "1.1.9" 2042 | resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.9.tgz#307cf898025848cf995e795e8423c7f337efbde6" 2043 | integrity sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA== 2044 | dependencies: 2045 | available-typed-arrays "^1.0.5" 2046 | call-bind "^1.0.2" 2047 | for-each "^0.3.3" 2048 | gopd "^1.0.1" 2049 | has-tostringtag "^1.0.0" 2050 | is-typed-array "^1.1.10" 2051 | 2052 | which@^2.0.1: 2053 | version "2.0.2" 2054 | resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" 2055 | integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== 2056 | dependencies: 2057 | isexe "^2.0.0" 2058 | 2059 | word-wrap@^1.2.3: 2060 | version "1.2.3" 2061 | resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" 2062 | integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== 2063 | 2064 | wrappy@1: 2065 | version "1.0.2" 2066 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 2067 | integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== 2068 | 2069 | yallist@^4.0.0: 2070 | version "4.0.0" 2071 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" 2072 | integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== 2073 | 2074 | yield-stream@^2.0.4: 2075 | version "2.0.4" 2076 | resolved "https://registry.yarnpkg.com/yield-stream/-/yield-stream-2.0.4.tgz#d8e4dd620114214abf63a308a2b42586d9b3b4ad" 2077 | integrity sha512-v+E/99dPqq4tveNPIdpOBfrVji//9BOSHOtfW58/zf8aIceevtIdHCTS4YqywQfVdW9wglV2P0oJtlx+jG/ZKw== 2078 | dependencies: 2079 | shim-streams "^0.0.2" 2080 | web-streams-polyfill "^3.2.1" 2081 | 2082 | yocto-queue@^0.1.0: 2083 | version "0.1.0" 2084 | resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" 2085 | integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== 2086 | --------------------------------------------------------------------------------