├── .github └── workflows │ └── server.yml ├── CMD.md ├── README.md ├── server ├── .gitignore ├── Caddyfile ├── Dockerfile ├── docker-compose.yml ├── package.json ├── pnpm-lock.yaml ├── src │ └── main.ts └── tsconfig.json ├── ui ├── .eslintrc.json ├── .gitignore ├── README.md ├── components.json ├── next.config.js ├── package.json ├── pnpm-lock.yaml ├── postcss.config.js ├── public │ ├── favicon.ico │ ├── next.svg │ └── vercel.svg ├── src │ ├── components │ │ └── ui │ │ │ ├── button.tsx │ │ │ ├── form.tsx │ │ │ ├── label.tsx │ │ │ └── textarea.tsx │ ├── lib │ │ └── utils.ts │ ├── pages │ │ ├── _app.tsx │ │ ├── _document.tsx │ │ ├── api │ │ │ └── hello.ts │ │ └── index.tsx │ └── styles │ │ └── globals.css ├── tailwind.config.js ├── tailwind.config.ts └── tsconfig.json └── upstash-inc-vector-logo.png /.github/workflows/server.yml: -------------------------------------------------------------------------------- 1 | name: Deploy server 2 | 3 | on: 4 | push: 5 | branches: 6 | - main 7 | 8 | defaults: 9 | run: 10 | working-directory: ./server 11 | 12 | jobs: 13 | deploy: 14 | runs-on: ubuntu-latest 15 | steps: 16 | - name: Checkout code 17 | uses: actions/checkout@v2 18 | 19 | - name: Deploy server 20 | uses: appleboy/ssh-action@master 21 | with: 22 | host: ${{ secrets.DROPLET_HOST }} 23 | username: ${{ secrets.DROPLET_USER }} 24 | key: ${{ secrets.DROPLET_PRIVATE_KEY }} 25 | script_stop: true 26 | script: | 27 | export UPSTASH_REDIS_REST_URL=${{ secrets.UPSTASH_REDIS_REST_URL }} 28 | export CORS_ORIGIN=${{ secrets.CORS_ORIGIN }} 29 | cd chat-tutorial 30 | git pull 31 | cd server 32 | docker-compose down 33 | docker-compose --project-name chat up -d --build 34 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /CMD.md: -------------------------------------------------------------------------------- 1 | 2 | ## Server 3 | ### Create a new project 4 | ```bash 5 | pnpm init 6 | ``` 7 | 8 | ### Install dependencies 9 | ```bash 10 | pnpm add fastify fastify-socket.io ioredis close-with-grace dotenv socket.io @fastify/cors 11 | ``` 12 | 13 | ### Install dev dependencies 14 | ```bash 15 | pnpm add @types/node tsx typescript @types/ws -D 16 | ``` 17 | 18 | ### Create tsconfig.json 19 | ```bash 20 | pnpm tsc --init 21 | ``` 22 | ## UI 23 | ### Create Next.js app 24 | ```base 25 | pnpm create next-app ui 26 | ``` 27 | 28 | ### Install dependencies 29 | ```bash 30 | pnpm add socket.io-client 31 | ``` 32 | ### Install dev dependencies 33 | ```bash 34 | pnpm add @types/ws -D 35 | ``` 36 | 37 | ### Install shadcn-ui 38 | ```bash 39 | npx shadcn-ui@latest init 40 | ``` 41 | 42 | 43 | ### Add components 44 | ```bash 45 | npx shadcn-ui@latest add textarea button form 46 | ``` 47 | 48 | 49 | ## Deploy steps 50 | ### Create the server 51 | 1. Generate some keys https://www.wpoven.com/tools/create-ssh-key# 52 | 1. Create a DO droplet 53 | 54 | ### Configure the server 55 | 1. SSH intro droplet 56 | 1. Update the package repository metadata - sudo apt update 57 | 1. Add the NodeJS package - `curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -` 58 | 1. Install Node.js `sudo apt-get install nodejs` 59 | 1. Install docker compose - `sudo apt install docker-compose` 60 | 1. Install NodeJS (so we can build the UI) - `sudo apt install nodejs npm` 61 | 1. Install pnpm - `wget -qO- https://get.pnpm.io/install.sh | sh -` 62 | 1. `source /root/.bashrc` 63 | 1. If you're using a private repo get a GitHub PAT 64 | 1. Clone the repo - git clone `https://@` 65 | 66 | ### Start deploying 67 | 1. Configure the GH action -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## Build and Deploy a Chat Application That Scales Horizontally with WebSockets and Upstash Redis 2 | 3 | ## Thank you to Upstash for sponsoring this video! 4 | 5 |
6 | Upstash is a serverless data platform that provides serverless Redis, kafka & QStash. 7 | 8 | ## Who is this video for? 9 | 1. Those who are already familiar with JavaScript/TypeScript 10 | 11 | ## Features 12 | 1. Send and receive messages 13 | 1. Show current connection count 14 | 15 | ## What will you learn? 16 | 1. Create realtime communications with WebSockets 17 | 1. Use Redis Pub/Sub to communicate across multiple instances 18 | 1. Use Redis to stop data (connection count/ messages) 19 | 1. Use Docker and docker-compose to containerize the application 20 | 1. Docker multi-stage builds 21 | 1. Use GitHub actions to automate CI/CD 22 | 1. Graceful shutdowns 23 | 24 | ## What are we using? 25 | 1. Fastify - Backend 26 | 1. Websockets - Realtime 27 | 1. Next.js - Frontend 28 | 1. Tailwind & Shadcn UI - Styling 29 | 1. Redis - Pub/Sub 30 | 1. Docker/docker-compose - Containerization 31 | 1. GitHub actions - CI/CD 32 | 1. DigitalOcean - Host the backend 33 | 1. Vercel - Host the frontend 34 | 35 | ## What will you need? 36 | 1. [Upstash account](https://upstash.com/) 37 | 1. [Node.js](https://nodejs.org/en) 38 | 1. [Docker & docker-compose](https://docs.docker.com/engine/install/) 39 | 1. An editor - [VSCode](https://code.visualstudio.com/) 40 | 1. [DigitalOcean](https://www.digitalocean.com/) account 41 | 1. [Vercel](https://vercel.com/) account 42 | 1. [Vercel CLI](https://vercel.com/docs/cli) 43 | 1. [GitHub](https://github.com) account 44 | 45 | 46 | ## Video structure 47 | 1. Build backend 48 | 1. Dockerise backend 49 | 1. Deploy backend 50 | 1. Create DigitalOcean droplet 51 | 1. Configure droplet 52 | 1. Write github action 53 | 1. Build frontend 54 | 1. Deploy frontend 55 | 56 | ## Debugging 57 | ### Websockets 58 | 1. Make sure you are using `wss://` and not `ws://` in production 59 | 2. Use debug mode in Caddy server 60 | ``` 61 | { 62 | debug 63 | } 64 | ``` 65 | 66 | ### Docker 67 | 1. List our running docker containers 68 | ```bash 69 | docker ps 70 | ``` 71 | 1. Stop a running container 72 | ```bash 73 | docker stop 74 | ``` 75 | 76 | 1. Remove a container 77 | ```bash 78 | docker rm 79 | ``` 80 | 81 | 1. List out networks 82 | ```bash 83 | docker network ls 84 | ``` 85 | 86 | 1. Remove a network 87 | ```bash 88 | docker network rm 89 | ``` 90 | -------------------------------------------------------------------------------- /server/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | build 3 | .env 4 | run.sh -------------------------------------------------------------------------------- /server/Caddyfile: -------------------------------------------------------------------------------- 1 | { 2 | debug 3 | } 4 | 5 | api.chat.tomdoes.tech { 6 | reverse_proxy chat-app-1:3001 chat-app-2:4000 chat-app-3:5000 { 7 | header_down Strict-Transport-Security max-age=31536000 8 | } 9 | } -------------------------------------------------------------------------------- /server/Dockerfile: -------------------------------------------------------------------------------- 1 | # Stage 1 - Build the base 2 | FROM node:18-alpine AS base 3 | WORKDIR /app 4 | COPY src ./src 5 | COPY package*.json ./ 6 | COPY tsconfig*.json ./ 7 | RUN npm install 8 | 9 | # Stage 2 - Build the app 10 | FROM base AS build 11 | WORKDIR /app 12 | RUN npm run build 13 | 14 | # Stage 3 - Production 15 | FROM node:18-alpine 16 | WORKDIR /app 17 | COPY package*.json ./ 18 | RUN npm install --only-production 19 | COPY --from=build /app/build ./ 20 | 21 | CMD ["node", "main.js"] -------------------------------------------------------------------------------- /server/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | 3 | services: 4 | chat-app-1: 5 | build: 6 | context: . 7 | dockerfile: Dockerfile 8 | ports: 9 | - "3001:3001" 10 | environment: 11 | - PORT=3001 12 | - CORS_ORIGIN=${CORS_ORIGIN} 13 | - UPSTASH_REDIS_REST_URL=${UPSTASH_REDIS_REST_URL} 14 | 15 | chat-app-2: 16 | build: 17 | context: . 18 | dockerfile: Dockerfile 19 | ports: 20 | - "4000:4000" 21 | environment: 22 | - PORT=4000 23 | - CORS_ORIGIN=${CORS_ORIGIN} 24 | - UPSTASH_REDIS_REST_URL=${UPSTASH_REDIS_REST_URL} 25 | 26 | chat-app-3: 27 | build: 28 | context: . 29 | dockerfile: Dockerfile 30 | ports: 31 | - "5000:5000" 32 | environment: 33 | - PORT=5000 34 | - CORS_ORIGIN=${CORS_ORIGIN} 35 | - UPSTASH_REDIS_REST_URL=${UPSTASH_REDIS_REST_URL} 36 | 37 | caddy: 38 | image: caddy/caddy:2.7.3-alpine 39 | container_name: caddy-server 40 | restart: unless-stopped 41 | ports: 42 | - "80:80" 43 | - "443:443" 44 | volumes: 45 | - $PWD/Caddyfile:/etc/caddy/Caddyfile 46 | - $PWD/site:/srv 47 | - caddy_data:/data 48 | - caddy_config:/config 49 | 50 | volumes: 51 | caddy_data: 52 | caddy_config: -------------------------------------------------------------------------------- /server/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "server", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "dev": "tsx watch src/main.ts", 8 | "build": "tsc" 9 | }, 10 | "keywords": [], 11 | "author": "Tom Nagle", 12 | "license": "ISC", 13 | "dependencies": { 14 | "@fastify/cors": "^8.3.0", 15 | "close-with-grace": "^1.2.0", 16 | "dotenv": "^16.3.1", 17 | "fastify": "^4.21.0", 18 | "fastify-socket.io": "^4.0.0", 19 | "ioredis": "^5.3.2", 20 | "socket.io": "^4.7.2" 21 | }, 22 | "devDependencies": { 23 | "@types/node": "^20.5.1", 24 | "@types/ws": "^8.5.5", 25 | "tsx": "^3.12.7", 26 | "typescript": "^5.1.6" 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /server/pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: 5.4 2 | 3 | specifiers: 4 | '@fastify/cors': ^8.3.0 5 | '@types/node': ^20.5.1 6 | '@types/ws': ^8.5.5 7 | close-with-grace: ^1.2.0 8 | dotenv: ^16.3.1 9 | fastify: ^4.21.0 10 | fastify-socket.io: ^4.0.0 11 | ioredis: ^5.3.2 12 | socket.io: ^4.7.2 13 | tsx: ^3.12.7 14 | typescript: ^5.1.6 15 | 16 | dependencies: 17 | '@fastify/cors': 8.3.0 18 | close-with-grace: 1.2.0 19 | dotenv: 16.3.1 20 | fastify: 4.21.0 21 | fastify-socket.io: 4.0.0_socket.io@4.7.2 22 | ioredis: 5.3.2 23 | socket.io: 4.7.2 24 | 25 | devDependencies: 26 | '@types/node': 20.5.1 27 | '@types/ws': 8.5.5 28 | tsx: 3.12.7 29 | typescript: 5.1.6 30 | 31 | packages: 32 | 33 | /@esbuild-kit/cjs-loader/2.4.2: 34 | resolution: {integrity: sha512-BDXFbYOJzT/NBEtp71cvsrGPwGAMGRB/349rwKuoxNSiKjPraNNnlK6MIIabViCjqZugu6j+xeMDlEkWdHHJSg==} 35 | dependencies: 36 | '@esbuild-kit/core-utils': 3.1.0 37 | get-tsconfig: 4.7.0 38 | dev: true 39 | 40 | /@esbuild-kit/core-utils/3.1.0: 41 | resolution: {integrity: sha512-Uuk8RpCg/7fdHSceR1M6XbSZFSuMrxcePFuGgyvsBn+u339dk5OeL4jv2EojwTN2st/unJGsVm4qHWjWNmJ/tw==} 42 | dependencies: 43 | esbuild: 0.17.19 44 | source-map-support: 0.5.21 45 | dev: true 46 | 47 | /@esbuild-kit/esm-loader/2.5.5: 48 | resolution: {integrity: sha512-Qwfvj/qoPbClxCRNuac1Du01r9gvNOT+pMYtJDapfB1eoGN1YlJ1BixLyL9WVENRx5RXgNLdfYdx/CuswlGhMw==} 49 | dependencies: 50 | '@esbuild-kit/core-utils': 3.1.0 51 | get-tsconfig: 4.7.0 52 | dev: true 53 | 54 | /@esbuild/android-arm/0.17.19: 55 | resolution: {integrity: sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==} 56 | engines: {node: '>=12'} 57 | cpu: [arm] 58 | os: [android] 59 | requiresBuild: true 60 | dev: true 61 | optional: true 62 | 63 | /@esbuild/android-arm64/0.17.19: 64 | resolution: {integrity: sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==} 65 | engines: {node: '>=12'} 66 | cpu: [arm64] 67 | os: [android] 68 | requiresBuild: true 69 | dev: true 70 | optional: true 71 | 72 | /@esbuild/android-x64/0.17.19: 73 | resolution: {integrity: sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==} 74 | engines: {node: '>=12'} 75 | cpu: [x64] 76 | os: [android] 77 | requiresBuild: true 78 | dev: true 79 | optional: true 80 | 81 | /@esbuild/darwin-arm64/0.17.19: 82 | resolution: {integrity: sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==} 83 | engines: {node: '>=12'} 84 | cpu: [arm64] 85 | os: [darwin] 86 | requiresBuild: true 87 | dev: true 88 | optional: true 89 | 90 | /@esbuild/darwin-x64/0.17.19: 91 | resolution: {integrity: sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==} 92 | engines: {node: '>=12'} 93 | cpu: [x64] 94 | os: [darwin] 95 | requiresBuild: true 96 | dev: true 97 | optional: true 98 | 99 | /@esbuild/freebsd-arm64/0.17.19: 100 | resolution: {integrity: sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==} 101 | engines: {node: '>=12'} 102 | cpu: [arm64] 103 | os: [freebsd] 104 | requiresBuild: true 105 | dev: true 106 | optional: true 107 | 108 | /@esbuild/freebsd-x64/0.17.19: 109 | resolution: {integrity: sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==} 110 | engines: {node: '>=12'} 111 | cpu: [x64] 112 | os: [freebsd] 113 | requiresBuild: true 114 | dev: true 115 | optional: true 116 | 117 | /@esbuild/linux-arm/0.17.19: 118 | resolution: {integrity: sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==} 119 | engines: {node: '>=12'} 120 | cpu: [arm] 121 | os: [linux] 122 | requiresBuild: true 123 | dev: true 124 | optional: true 125 | 126 | /@esbuild/linux-arm64/0.17.19: 127 | resolution: {integrity: sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==} 128 | engines: {node: '>=12'} 129 | cpu: [arm64] 130 | os: [linux] 131 | requiresBuild: true 132 | dev: true 133 | optional: true 134 | 135 | /@esbuild/linux-ia32/0.17.19: 136 | resolution: {integrity: sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==} 137 | engines: {node: '>=12'} 138 | cpu: [ia32] 139 | os: [linux] 140 | requiresBuild: true 141 | dev: true 142 | optional: true 143 | 144 | /@esbuild/linux-loong64/0.17.19: 145 | resolution: {integrity: sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==} 146 | engines: {node: '>=12'} 147 | cpu: [loong64] 148 | os: [linux] 149 | requiresBuild: true 150 | dev: true 151 | optional: true 152 | 153 | /@esbuild/linux-mips64el/0.17.19: 154 | resolution: {integrity: sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==} 155 | engines: {node: '>=12'} 156 | cpu: [mips64el] 157 | os: [linux] 158 | requiresBuild: true 159 | dev: true 160 | optional: true 161 | 162 | /@esbuild/linux-ppc64/0.17.19: 163 | resolution: {integrity: sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==} 164 | engines: {node: '>=12'} 165 | cpu: [ppc64] 166 | os: [linux] 167 | requiresBuild: true 168 | dev: true 169 | optional: true 170 | 171 | /@esbuild/linux-riscv64/0.17.19: 172 | resolution: {integrity: sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==} 173 | engines: {node: '>=12'} 174 | cpu: [riscv64] 175 | os: [linux] 176 | requiresBuild: true 177 | dev: true 178 | optional: true 179 | 180 | /@esbuild/linux-s390x/0.17.19: 181 | resolution: {integrity: sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==} 182 | engines: {node: '>=12'} 183 | cpu: [s390x] 184 | os: [linux] 185 | requiresBuild: true 186 | dev: true 187 | optional: true 188 | 189 | /@esbuild/linux-x64/0.17.19: 190 | resolution: {integrity: sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==} 191 | engines: {node: '>=12'} 192 | cpu: [x64] 193 | os: [linux] 194 | requiresBuild: true 195 | dev: true 196 | optional: true 197 | 198 | /@esbuild/netbsd-x64/0.17.19: 199 | resolution: {integrity: sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==} 200 | engines: {node: '>=12'} 201 | cpu: [x64] 202 | os: [netbsd] 203 | requiresBuild: true 204 | dev: true 205 | optional: true 206 | 207 | /@esbuild/openbsd-x64/0.17.19: 208 | resolution: {integrity: sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==} 209 | engines: {node: '>=12'} 210 | cpu: [x64] 211 | os: [openbsd] 212 | requiresBuild: true 213 | dev: true 214 | optional: true 215 | 216 | /@esbuild/sunos-x64/0.17.19: 217 | resolution: {integrity: sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==} 218 | engines: {node: '>=12'} 219 | cpu: [x64] 220 | os: [sunos] 221 | requiresBuild: true 222 | dev: true 223 | optional: true 224 | 225 | /@esbuild/win32-arm64/0.17.19: 226 | resolution: {integrity: sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==} 227 | engines: {node: '>=12'} 228 | cpu: [arm64] 229 | os: [win32] 230 | requiresBuild: true 231 | dev: true 232 | optional: true 233 | 234 | /@esbuild/win32-ia32/0.17.19: 235 | resolution: {integrity: sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==} 236 | engines: {node: '>=12'} 237 | cpu: [ia32] 238 | os: [win32] 239 | requiresBuild: true 240 | dev: true 241 | optional: true 242 | 243 | /@esbuild/win32-x64/0.17.19: 244 | resolution: {integrity: sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==} 245 | engines: {node: '>=12'} 246 | cpu: [x64] 247 | os: [win32] 248 | requiresBuild: true 249 | dev: true 250 | optional: true 251 | 252 | /@fastify/ajv-compiler/3.5.0: 253 | resolution: {integrity: sha512-ebbEtlI7dxXF5ziNdr05mOY8NnDiPB1XvAlLHctRt/Rc+C3LCOVW5imUVX+mhvUhnNzmPBHewUkOFgGlCxgdAA==} 254 | dependencies: 255 | ajv: 8.12.0 256 | ajv-formats: 2.1.1 257 | fast-uri: 2.2.0 258 | dev: false 259 | 260 | /@fastify/cors/8.3.0: 261 | resolution: {integrity: sha512-oj9xkka2Tg0MrwuKhsSUumcAkfp2YCnKxmFEusi01pjk1YrdDsuSYTHXEelWNW+ilSy/ApZq0c2SvhKrLX0H1g==} 262 | dependencies: 263 | fastify-plugin: 4.5.1 264 | mnemonist: 0.39.5 265 | dev: false 266 | 267 | /@fastify/deepmerge/1.3.0: 268 | resolution: {integrity: sha512-J8TOSBq3SoZbDhM9+R/u77hP93gz/rajSA+K2kGyijPpORPWUXHUpTaleoj+92As0S9uPRP7Oi8IqMf0u+ro6A==} 269 | dev: false 270 | 271 | /@fastify/error/3.3.0: 272 | resolution: {integrity: sha512-dj7vjIn1Ar8sVXj2yAXiMNCJDmS9MQ9XMlIecX2dIzzhjSHCyKo4DdXjXMs7wKW2kj6yvVRSpuQjOZ3YLrh56w==} 273 | dev: false 274 | 275 | /@fastify/fast-json-stringify-compiler/4.3.0: 276 | resolution: {integrity: sha512-aZAXGYo6m22Fk1zZzEUKBvut/CIIQe/BapEORnxiD5Qr0kPHqqI69NtEMCme74h+at72sPhbkb4ZrLd1W3KRLA==} 277 | dependencies: 278 | fast-json-stringify: 5.8.0 279 | dev: false 280 | 281 | /@ioredis/commands/1.2.0: 282 | resolution: {integrity: sha512-Sx1pU8EM64o2BrqNpEO1CNLtKQwyhuXuqyfH7oGKCk+1a33d2r5saW8zNwm3j6BTExtjrv2BxTgzzkMwts6vGg==} 283 | dev: false 284 | 285 | /@socket.io/component-emitter/3.1.0: 286 | resolution: {integrity: sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==} 287 | dev: false 288 | 289 | /@types/cookie/0.4.1: 290 | resolution: {integrity: sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==} 291 | dev: false 292 | 293 | /@types/cors/2.8.13: 294 | resolution: {integrity: sha512-RG8AStHlUiV5ysZQKq97copd2UmVYw3/pRMLefISZ3S1hK104Cwm7iLQ3fTKx+lsUH2CE8FlLaYeEA2LSeqYUA==} 295 | dependencies: 296 | '@types/node': 20.5.1 297 | dev: false 298 | 299 | /@types/node/20.5.1: 300 | resolution: {integrity: sha512-4tT2UrL5LBqDwoed9wZ6N3umC4Yhz3W3FloMmiiG4JwmUJWpie0c7lcnUNd4gtMKuDEO4wRVS8B6Xa0uMRsMKg==} 301 | 302 | /@types/ws/8.5.5: 303 | resolution: {integrity: sha512-lwhs8hktwxSjf9UaZ9tG5M03PGogvFaH8gUgLNbN9HKIg0dvv6q+gkSuJ8HN4/VbyxkuLzCjlN7GquQ0gUJfIg==} 304 | dependencies: 305 | '@types/node': 20.5.1 306 | dev: true 307 | 308 | /abort-controller/3.0.0: 309 | resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} 310 | engines: {node: '>=6.5'} 311 | dependencies: 312 | event-target-shim: 5.0.1 313 | dev: false 314 | 315 | /abstract-logging/2.0.1: 316 | resolution: {integrity: sha512-2BjRTZxTPvheOvGbBslFSYOUkr+SjPtOnrLP33f+VIWLzezQpZcqVg7ja3L4dBXmzzgwT+a029jRx5PCi3JuiA==} 317 | dev: false 318 | 319 | /accepts/1.3.8: 320 | resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} 321 | engines: {node: '>= 0.6'} 322 | dependencies: 323 | mime-types: 2.1.35 324 | negotiator: 0.6.3 325 | dev: false 326 | 327 | /ajv-formats/2.1.1: 328 | resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} 329 | peerDependenciesMeta: 330 | ajv: 331 | optional: true 332 | dependencies: 333 | ajv: 8.12.0 334 | dev: false 335 | 336 | /ajv/8.12.0: 337 | resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==} 338 | dependencies: 339 | fast-deep-equal: 3.1.3 340 | json-schema-traverse: 1.0.0 341 | require-from-string: 2.0.2 342 | uri-js: 4.4.1 343 | dev: false 344 | 345 | /archy/1.0.0: 346 | resolution: {integrity: sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==} 347 | dev: false 348 | 349 | /atomic-sleep/1.0.0: 350 | resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==} 351 | engines: {node: '>=8.0.0'} 352 | dev: false 353 | 354 | /avvio/8.2.1: 355 | resolution: {integrity: sha512-TAlMYvOuwGyLK3PfBb5WKBXZmXz2fVCgv23d6zZFdle/q3gPjmxBaeuC0pY0Dzs5PWMSgfqqEZkrye19GlDTgw==} 356 | dependencies: 357 | archy: 1.0.0 358 | debug: 4.3.4 359 | fastq: 1.15.0 360 | transitivePeerDependencies: 361 | - supports-color 362 | dev: false 363 | 364 | /base64-js/1.5.1: 365 | resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} 366 | dev: false 367 | 368 | /base64id/2.0.0: 369 | resolution: {integrity: sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==} 370 | engines: {node: ^4.5.0 || >= 5.9} 371 | dev: false 372 | 373 | /buffer-from/1.1.2: 374 | resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} 375 | dev: true 376 | 377 | /buffer/6.0.3: 378 | resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} 379 | dependencies: 380 | base64-js: 1.5.1 381 | ieee754: 1.2.1 382 | dev: false 383 | 384 | /close-with-grace/1.2.0: 385 | resolution: {integrity: sha512-Xga0jyAb4fX98u5pZAgqlbqHP8cHuy5M3Wto0k0L/36aP2C25Cjp51XfPw3Hz7dNC2L2/hF/PK/KJhO275L+VA==} 386 | dev: false 387 | 388 | /cluster-key-slot/1.1.2: 389 | resolution: {integrity: sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA==} 390 | engines: {node: '>=0.10.0'} 391 | dev: false 392 | 393 | /cookie/0.4.2: 394 | resolution: {integrity: sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==} 395 | engines: {node: '>= 0.6'} 396 | dev: false 397 | 398 | /cookie/0.5.0: 399 | resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==} 400 | engines: {node: '>= 0.6'} 401 | dev: false 402 | 403 | /cors/2.8.5: 404 | resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==} 405 | engines: {node: '>= 0.10'} 406 | dependencies: 407 | object-assign: 4.1.1 408 | vary: 1.1.2 409 | dev: false 410 | 411 | /debug/4.3.4: 412 | resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} 413 | engines: {node: '>=6.0'} 414 | peerDependencies: 415 | supports-color: '*' 416 | peerDependenciesMeta: 417 | supports-color: 418 | optional: true 419 | dependencies: 420 | ms: 2.1.2 421 | dev: false 422 | 423 | /denque/2.1.0: 424 | resolution: {integrity: sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==} 425 | engines: {node: '>=0.10'} 426 | dev: false 427 | 428 | /dotenv/16.3.1: 429 | resolution: {integrity: sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==} 430 | engines: {node: '>=12'} 431 | dev: false 432 | 433 | /engine.io-parser/5.2.1: 434 | resolution: {integrity: sha512-9JktcM3u18nU9N2Lz3bWeBgxVgOKpw7yhRaoxQA3FUDZzzw+9WlA6p4G4u0RixNkg14fH7EfEc/RhpurtiROTQ==} 435 | engines: {node: '>=10.0.0'} 436 | dev: false 437 | 438 | /engine.io/6.5.2: 439 | resolution: {integrity: sha512-IXsMcGpw/xRfjra46sVZVHiSWo/nJ/3g1337q9KNXtS6YRzbW5yIzTCb9DjhrBe7r3GZQR0I4+nq+4ODk5g/cA==} 440 | engines: {node: '>=10.2.0'} 441 | dependencies: 442 | '@types/cookie': 0.4.1 443 | '@types/cors': 2.8.13 444 | '@types/node': 20.5.1 445 | accepts: 1.3.8 446 | base64id: 2.0.0 447 | cookie: 0.4.2 448 | cors: 2.8.5 449 | debug: 4.3.4 450 | engine.io-parser: 5.2.1 451 | ws: 8.11.0 452 | transitivePeerDependencies: 453 | - bufferutil 454 | - supports-color 455 | - utf-8-validate 456 | dev: false 457 | 458 | /esbuild/0.17.19: 459 | resolution: {integrity: sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==} 460 | engines: {node: '>=12'} 461 | hasBin: true 462 | requiresBuild: true 463 | optionalDependencies: 464 | '@esbuild/android-arm': 0.17.19 465 | '@esbuild/android-arm64': 0.17.19 466 | '@esbuild/android-x64': 0.17.19 467 | '@esbuild/darwin-arm64': 0.17.19 468 | '@esbuild/darwin-x64': 0.17.19 469 | '@esbuild/freebsd-arm64': 0.17.19 470 | '@esbuild/freebsd-x64': 0.17.19 471 | '@esbuild/linux-arm': 0.17.19 472 | '@esbuild/linux-arm64': 0.17.19 473 | '@esbuild/linux-ia32': 0.17.19 474 | '@esbuild/linux-loong64': 0.17.19 475 | '@esbuild/linux-mips64el': 0.17.19 476 | '@esbuild/linux-ppc64': 0.17.19 477 | '@esbuild/linux-riscv64': 0.17.19 478 | '@esbuild/linux-s390x': 0.17.19 479 | '@esbuild/linux-x64': 0.17.19 480 | '@esbuild/netbsd-x64': 0.17.19 481 | '@esbuild/openbsd-x64': 0.17.19 482 | '@esbuild/sunos-x64': 0.17.19 483 | '@esbuild/win32-arm64': 0.17.19 484 | '@esbuild/win32-ia32': 0.17.19 485 | '@esbuild/win32-x64': 0.17.19 486 | dev: true 487 | 488 | /event-target-shim/5.0.1: 489 | resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} 490 | engines: {node: '>=6'} 491 | dev: false 492 | 493 | /events/3.3.0: 494 | resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} 495 | engines: {node: '>=0.8.x'} 496 | dev: false 497 | 498 | /fast-content-type-parse/1.0.0: 499 | resolution: {integrity: sha512-Xbc4XcysUXcsP5aHUU7Nq3OwvHq97C+WnbkeIefpeYLX+ryzFJlU6OStFJhs6Ol0LkUGpcK+wL0JwfM+FCU5IA==} 500 | dev: false 501 | 502 | /fast-decode-uri-component/1.0.1: 503 | resolution: {integrity: sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg==} 504 | dev: false 505 | 506 | /fast-deep-equal/3.1.3: 507 | resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} 508 | dev: false 509 | 510 | /fast-json-stringify/5.8.0: 511 | resolution: {integrity: sha512-VVwK8CFMSALIvt14U8AvrSzQAwN/0vaVRiFFUVlpnXSnDGrSkOAO5MtzyN8oQNjLd5AqTW5OZRgyjoNuAuR3jQ==} 512 | dependencies: 513 | '@fastify/deepmerge': 1.3.0 514 | ajv: 8.12.0 515 | ajv-formats: 2.1.1 516 | fast-deep-equal: 3.1.3 517 | fast-uri: 2.2.0 518 | rfdc: 1.3.0 519 | dev: false 520 | 521 | /fast-querystring/1.1.2: 522 | resolution: {integrity: sha512-g6KuKWmFXc0fID8WWH0jit4g0AGBoJhCkJMb1RmbsSEUNvQ+ZC8D6CUZ+GtF8nMzSPXnhiePyyqqipzNNEnHjg==} 523 | dependencies: 524 | fast-decode-uri-component: 1.0.1 525 | dev: false 526 | 527 | /fast-redact/3.3.0: 528 | resolution: {integrity: sha512-6T5V1QK1u4oF+ATxs1lWUmlEk6P2T9HqJG3e2DnHOdVgZy2rFJBoEnrIedcTXlkAHU/zKC+7KETJ+KGGKwxgMQ==} 529 | engines: {node: '>=6'} 530 | dev: false 531 | 532 | /fast-uri/2.2.0: 533 | resolution: {integrity: sha512-cIusKBIt/R/oI6z/1nyfe2FvGKVTohVRfvkOhvx0nCEW+xf5NoCXjAHcWp93uOUBchzYcsvPlrapAdX1uW+YGg==} 534 | dev: false 535 | 536 | /fastify-plugin/3.0.1: 537 | resolution: {integrity: sha512-qKcDXmuZadJqdTm6vlCqioEbyewF60b/0LOFCcYN1B6BIZGlYJumWWOYs70SFYLDAH4YqdE1cxH/RKMG7rFxgA==} 538 | dev: false 539 | 540 | /fastify-plugin/4.5.1: 541 | resolution: {integrity: sha512-stRHYGeuqpEZTL1Ef0Ovr2ltazUT9g844X5z/zEBFLG8RYlpDiOCIG+ATvYEp+/zmc7sN29mcIMp8gvYplYPIQ==} 542 | dev: false 543 | 544 | /fastify-socket.io/4.0.0_socket.io@4.7.2: 545 | resolution: {integrity: sha512-j5mgvHZpQ0Iiz9HyKwGdLOQGjFKH/6KOwx8esxCIBkIjtiQkdC8e4J1xX4JAMISLfTJOY9EHQG/1MmU/9cXaog==} 546 | peerDependencies: 547 | socket.io: ^4.4.0 548 | dependencies: 549 | fastify-plugin: 3.0.1 550 | socket.io: 4.7.2 551 | dev: false 552 | 553 | /fastify/4.21.0: 554 | resolution: {integrity: sha512-tsu4bcwE4HetxqW8prA5fbC9bKHMYDp7jGEDWyzK1l90a3uOaLoIcQbdGcWeODNLVJviQnzh1wvIjTZE3MJFEg==} 555 | dependencies: 556 | '@fastify/ajv-compiler': 3.5.0 557 | '@fastify/error': 3.3.0 558 | '@fastify/fast-json-stringify-compiler': 4.3.0 559 | abstract-logging: 2.0.1 560 | avvio: 8.2.1 561 | fast-content-type-parse: 1.0.0 562 | fast-json-stringify: 5.8.0 563 | find-my-way: 7.6.2 564 | light-my-request: 5.10.0 565 | pino: 8.15.0 566 | process-warning: 2.2.0 567 | proxy-addr: 2.0.7 568 | rfdc: 1.3.0 569 | secure-json-parse: 2.7.0 570 | semver: 7.5.4 571 | tiny-lru: 11.0.1 572 | transitivePeerDependencies: 573 | - supports-color 574 | dev: false 575 | 576 | /fastq/1.15.0: 577 | resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} 578 | dependencies: 579 | reusify: 1.0.4 580 | dev: false 581 | 582 | /find-my-way/7.6.2: 583 | resolution: {integrity: sha512-0OjHn1b1nCX3eVbm9ByeEHiscPYiHLfhei1wOUU9qffQkk98wE0Lo8VrVYfSGMgnSnDh86DxedduAnBf4nwUEw==} 584 | engines: {node: '>=14'} 585 | dependencies: 586 | fast-deep-equal: 3.1.3 587 | fast-querystring: 1.1.2 588 | safe-regex2: 2.0.0 589 | dev: false 590 | 591 | /forwarded/0.2.0: 592 | resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} 593 | engines: {node: '>= 0.6'} 594 | dev: false 595 | 596 | /fsevents/2.3.3: 597 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} 598 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 599 | os: [darwin] 600 | requiresBuild: true 601 | dev: true 602 | optional: true 603 | 604 | /get-tsconfig/4.7.0: 605 | resolution: {integrity: sha512-pmjiZ7xtB8URYm74PlGJozDNyhvsVLUcpBa8DZBG3bWHwaHa9bPiRpiSfovw+fjhwONSCWKRyk+JQHEGZmMrzw==} 606 | dependencies: 607 | resolve-pkg-maps: 1.0.0 608 | dev: true 609 | 610 | /ieee754/1.2.1: 611 | resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} 612 | dev: false 613 | 614 | /ioredis/5.3.2: 615 | resolution: {integrity: sha512-1DKMMzlIHM02eBBVOFQ1+AolGjs6+xEcM4PDL7NqOS6szq7H9jSaEkIUH6/a5Hl241LzW6JLSiAbNvTQjUupUA==} 616 | engines: {node: '>=12.22.0'} 617 | dependencies: 618 | '@ioredis/commands': 1.2.0 619 | cluster-key-slot: 1.1.2 620 | debug: 4.3.4 621 | denque: 2.1.0 622 | lodash.defaults: 4.2.0 623 | lodash.isarguments: 3.1.0 624 | redis-errors: 1.2.0 625 | redis-parser: 3.0.0 626 | standard-as-callback: 2.1.0 627 | transitivePeerDependencies: 628 | - supports-color 629 | dev: false 630 | 631 | /ipaddr.js/1.9.1: 632 | resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} 633 | engines: {node: '>= 0.10'} 634 | dev: false 635 | 636 | /json-schema-traverse/1.0.0: 637 | resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} 638 | dev: false 639 | 640 | /light-my-request/5.10.0: 641 | resolution: {integrity: sha512-ZU2D9GmAcOUculTTdH9/zryej6n8TzT+fNGdNtm6SDp5MMMpHrJJkvAdE3c6d8d2chE9i+a//dS9CWZtisknqA==} 642 | dependencies: 643 | cookie: 0.5.0 644 | process-warning: 2.2.0 645 | set-cookie-parser: 2.6.0 646 | dev: false 647 | 648 | /lodash.defaults/4.2.0: 649 | resolution: {integrity: sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==} 650 | dev: false 651 | 652 | /lodash.isarguments/3.1.0: 653 | resolution: {integrity: sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==} 654 | dev: false 655 | 656 | /lru-cache/6.0.0: 657 | resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} 658 | engines: {node: '>=10'} 659 | dependencies: 660 | yallist: 4.0.0 661 | dev: false 662 | 663 | /mime-db/1.52.0: 664 | resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} 665 | engines: {node: '>= 0.6'} 666 | dev: false 667 | 668 | /mime-types/2.1.35: 669 | resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} 670 | engines: {node: '>= 0.6'} 671 | dependencies: 672 | mime-db: 1.52.0 673 | dev: false 674 | 675 | /mnemonist/0.39.5: 676 | resolution: {integrity: sha512-FPUtkhtJ0efmEFGpU14x7jGbTB+s18LrzRL2KgoWz9YvcY3cPomz8tih01GbHwnGk/OmkOKfqd/RAQoc8Lm7DQ==} 677 | dependencies: 678 | obliterator: 2.0.4 679 | dev: false 680 | 681 | /ms/2.1.2: 682 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} 683 | dev: false 684 | 685 | /negotiator/0.6.3: 686 | resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} 687 | engines: {node: '>= 0.6'} 688 | dev: false 689 | 690 | /object-assign/4.1.1: 691 | resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} 692 | engines: {node: '>=0.10.0'} 693 | dev: false 694 | 695 | /obliterator/2.0.4: 696 | resolution: {integrity: sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ==} 697 | dev: false 698 | 699 | /on-exit-leak-free/2.1.0: 700 | resolution: {integrity: sha512-VuCaZZAjReZ3vUwgOB8LxAosIurDiAW0s13rI1YwmaP++jvcxP77AWoQvenZebpCA2m8WC1/EosPYPMjnRAp/w==} 701 | dev: false 702 | 703 | /pino-abstract-transport/1.0.0: 704 | resolution: {integrity: sha512-c7vo5OpW4wIS42hUVcT5REsL8ZljsUfBjqV/e2sFxmFEFZiq1XLUp5EYLtuDH6PEHq9W1egWqRbnLUP5FuZmOA==} 705 | dependencies: 706 | readable-stream: 4.4.2 707 | split2: 4.2.0 708 | dev: false 709 | 710 | /pino-std-serializers/6.2.2: 711 | resolution: {integrity: sha512-cHjPPsE+vhj/tnhCy/wiMh3M3z3h/j15zHQX+S9GkTBgqJuTuJzYJ4gUyACLhDaJ7kk9ba9iRDmbH2tJU03OiA==} 712 | dev: false 713 | 714 | /pino/8.15.0: 715 | resolution: {integrity: sha512-olUADJByk4twxccmAxb1RiGKOSvddHugCV3wkqjyv+3Sooa2KLrmXrKEWOKi0XPCLasRR5jBXxioE1jxUa4KzQ==} 716 | hasBin: true 717 | dependencies: 718 | atomic-sleep: 1.0.0 719 | fast-redact: 3.3.0 720 | on-exit-leak-free: 2.1.0 721 | pino-abstract-transport: 1.0.0 722 | pino-std-serializers: 6.2.2 723 | process-warning: 2.2.0 724 | quick-format-unescaped: 4.0.4 725 | real-require: 0.2.0 726 | safe-stable-stringify: 2.4.3 727 | sonic-boom: 3.3.0 728 | thread-stream: 2.4.0 729 | dev: false 730 | 731 | /process-warning/2.2.0: 732 | resolution: {integrity: sha512-/1WZ8+VQjR6avWOgHeEPd7SDQmFQ1B5mC1eRXsCm5TarlNmx/wCsa5GEaxGm05BORRtyG/Ex/3xq3TuRvq57qg==} 733 | dev: false 734 | 735 | /process/0.11.10: 736 | resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} 737 | engines: {node: '>= 0.6.0'} 738 | dev: false 739 | 740 | /proxy-addr/2.0.7: 741 | resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} 742 | engines: {node: '>= 0.10'} 743 | dependencies: 744 | forwarded: 0.2.0 745 | ipaddr.js: 1.9.1 746 | dev: false 747 | 748 | /punycode/2.3.0: 749 | resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==} 750 | engines: {node: '>=6'} 751 | dev: false 752 | 753 | /quick-format-unescaped/4.0.4: 754 | resolution: {integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==} 755 | dev: false 756 | 757 | /readable-stream/4.4.2: 758 | resolution: {integrity: sha512-Lk/fICSyIhodxy1IDK2HazkeGjSmezAWX2egdtJnYhtzKEsBPJowlI6F6LPb5tqIQILrMbx22S5o3GuJavPusA==} 759 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 760 | dependencies: 761 | abort-controller: 3.0.0 762 | buffer: 6.0.3 763 | events: 3.3.0 764 | process: 0.11.10 765 | string_decoder: 1.3.0 766 | dev: false 767 | 768 | /real-require/0.2.0: 769 | resolution: {integrity: sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==} 770 | engines: {node: '>= 12.13.0'} 771 | dev: false 772 | 773 | /redis-errors/1.2.0: 774 | resolution: {integrity: sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w==} 775 | engines: {node: '>=4'} 776 | dev: false 777 | 778 | /redis-parser/3.0.0: 779 | resolution: {integrity: sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A==} 780 | engines: {node: '>=4'} 781 | dependencies: 782 | redis-errors: 1.2.0 783 | dev: false 784 | 785 | /require-from-string/2.0.2: 786 | resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} 787 | engines: {node: '>=0.10.0'} 788 | dev: false 789 | 790 | /resolve-pkg-maps/1.0.0: 791 | resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} 792 | dev: true 793 | 794 | /ret/0.2.2: 795 | resolution: {integrity: sha512-M0b3YWQs7R3Z917WRQy1HHA7Ba7D8hvZg6UE5mLykJxQVE2ju0IXbGlaHPPlkY+WN7wFP+wUMXmBFA0aV6vYGQ==} 796 | engines: {node: '>=4'} 797 | dev: false 798 | 799 | /reusify/1.0.4: 800 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} 801 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 802 | dev: false 803 | 804 | /rfdc/1.3.0: 805 | resolution: {integrity: sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==} 806 | dev: false 807 | 808 | /safe-buffer/5.2.1: 809 | resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} 810 | dev: false 811 | 812 | /safe-regex2/2.0.0: 813 | resolution: {integrity: sha512-PaUSFsUaNNuKwkBijoAPHAK6/eM6VirvyPWlZ7BAQy4D+hCvh4B6lIG+nPdhbFfIbP+gTGBcrdsOaUs0F+ZBOQ==} 814 | dependencies: 815 | ret: 0.2.2 816 | dev: false 817 | 818 | /safe-stable-stringify/2.4.3: 819 | resolution: {integrity: sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==} 820 | engines: {node: '>=10'} 821 | dev: false 822 | 823 | /secure-json-parse/2.7.0: 824 | resolution: {integrity: sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==} 825 | dev: false 826 | 827 | /semver/7.5.4: 828 | resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} 829 | engines: {node: '>=10'} 830 | hasBin: true 831 | dependencies: 832 | lru-cache: 6.0.0 833 | dev: false 834 | 835 | /set-cookie-parser/2.6.0: 836 | resolution: {integrity: sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ==} 837 | dev: false 838 | 839 | /socket.io-adapter/2.5.2: 840 | resolution: {integrity: sha512-87C3LO/NOMc+eMcpcxUBebGjkpMDkNBS9tf7KJqcDsmL936EChtVva71Dw2q4tQcuVC+hAUy4an2NO/sYXmwRA==} 841 | dependencies: 842 | ws: 8.11.0 843 | transitivePeerDependencies: 844 | - bufferutil 845 | - utf-8-validate 846 | dev: false 847 | 848 | /socket.io-parser/4.2.4: 849 | resolution: {integrity: sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==} 850 | engines: {node: '>=10.0.0'} 851 | dependencies: 852 | '@socket.io/component-emitter': 3.1.0 853 | debug: 4.3.4 854 | transitivePeerDependencies: 855 | - supports-color 856 | dev: false 857 | 858 | /socket.io/4.7.2: 859 | resolution: {integrity: sha512-bvKVS29/I5fl2FGLNHuXlQaUH/BlzX1IN6S+NKLNZpBsPZIDH+90eQmCs2Railn4YUiww4SzUedJ6+uzwFnKLw==} 860 | engines: {node: '>=10.2.0'} 861 | dependencies: 862 | accepts: 1.3.8 863 | base64id: 2.0.0 864 | cors: 2.8.5 865 | debug: 4.3.4 866 | engine.io: 6.5.2 867 | socket.io-adapter: 2.5.2 868 | socket.io-parser: 4.2.4 869 | transitivePeerDependencies: 870 | - bufferutil 871 | - supports-color 872 | - utf-8-validate 873 | dev: false 874 | 875 | /sonic-boom/3.3.0: 876 | resolution: {integrity: sha512-LYxp34KlZ1a2Jb8ZQgFCK3niIHzibdwtwNUWKg0qQRzsDoJ3Gfgkf8KdBTFU3SkejDEIlWwnSnpVdOZIhFMl/g==} 877 | dependencies: 878 | atomic-sleep: 1.0.0 879 | dev: false 880 | 881 | /source-map-support/0.5.21: 882 | resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} 883 | dependencies: 884 | buffer-from: 1.1.2 885 | source-map: 0.6.1 886 | dev: true 887 | 888 | /source-map/0.6.1: 889 | resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} 890 | engines: {node: '>=0.10.0'} 891 | dev: true 892 | 893 | /split2/4.2.0: 894 | resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} 895 | engines: {node: '>= 10.x'} 896 | dev: false 897 | 898 | /standard-as-callback/2.1.0: 899 | resolution: {integrity: sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A==} 900 | dev: false 901 | 902 | /string_decoder/1.3.0: 903 | resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} 904 | dependencies: 905 | safe-buffer: 5.2.1 906 | dev: false 907 | 908 | /thread-stream/2.4.0: 909 | resolution: {integrity: sha512-xZYtOtmnA63zj04Q+F9bdEay5r47bvpo1CaNqsKi7TpoJHcotUez8Fkfo2RJWpW91lnnaApdpRbVwCWsy+ifcw==} 910 | dependencies: 911 | real-require: 0.2.0 912 | dev: false 913 | 914 | /tiny-lru/11.0.1: 915 | resolution: {integrity: sha512-iNgFugVuQgBKrqeO/mpiTTgmBsTP0WL6yeuLfLs/Ctf0pI/ixGqIRm8sDCwMcXGe9WWvt2sGXI5mNqZbValmJg==} 916 | engines: {node: '>=12'} 917 | dev: false 918 | 919 | /tsx/3.12.7: 920 | resolution: {integrity: sha512-C2Ip+jPmqKd1GWVQDvz/Eyc6QJbGfE7NrR3fx5BpEHMZsEHoIxHL1j+lKdGobr8ovEyqeNkPLSKp6SCSOt7gmw==} 921 | hasBin: true 922 | dependencies: 923 | '@esbuild-kit/cjs-loader': 2.4.2 924 | '@esbuild-kit/core-utils': 3.1.0 925 | '@esbuild-kit/esm-loader': 2.5.5 926 | optionalDependencies: 927 | fsevents: 2.3.3 928 | dev: true 929 | 930 | /typescript/5.1.6: 931 | resolution: {integrity: sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==} 932 | engines: {node: '>=14.17'} 933 | hasBin: true 934 | dev: true 935 | 936 | /uri-js/4.4.1: 937 | resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} 938 | dependencies: 939 | punycode: 2.3.0 940 | dev: false 941 | 942 | /vary/1.1.2: 943 | resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} 944 | engines: {node: '>= 0.8'} 945 | dev: false 946 | 947 | /ws/8.11.0: 948 | resolution: {integrity: sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==} 949 | engines: {node: '>=10.0.0'} 950 | peerDependencies: 951 | bufferutil: ^4.0.1 952 | utf-8-validate: ^5.0.2 953 | peerDependenciesMeta: 954 | bufferutil: 955 | optional: true 956 | utf-8-validate: 957 | optional: true 958 | dev: false 959 | 960 | /yallist/4.0.0: 961 | resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} 962 | dev: false 963 | -------------------------------------------------------------------------------- /server/src/main.ts: -------------------------------------------------------------------------------- 1 | import { randomUUID } from "crypto"; 2 | import dotenv from "dotenv"; 3 | import fastify from "fastify"; 4 | import fastifyCors from "@fastify/cors"; 5 | import fastifyIO from "fastify-socket.io"; 6 | import Redis from "ioredis"; 7 | import closeWithGrace from "close-with-grace"; 8 | 9 | dotenv.config(); 10 | 11 | const PORT = parseInt(process.env.PORT || "3001", 10); 12 | const HOST = process.env.HOST || "0.0.0.0"; 13 | const CORS_ORIGIN = process.env.CORS_ORIGIN || "http://localhost:3000"; 14 | const UPSTASH_REDIS_REST_URL = process.env.UPSTASH_REDIS_REST_URL; 15 | 16 | const CONNECTION_COUNT_KEY = "chat:connection-count"; 17 | const CONNECTION_COUNT_UPDATED_CHANNEL = "chat:connection-count-updated"; 18 | const NEW_MESSAGE_CHANNEL = "chat:new-message"; 19 | 20 | if (!UPSTASH_REDIS_REST_URL) { 21 | console.error("missing UPSTASH_REDIS_REST_URL"); 22 | process.exit(1); 23 | } 24 | 25 | const publisher = new Redis(UPSTASH_REDIS_REST_URL); 26 | const subscriber = new Redis(UPSTASH_REDIS_REST_URL); 27 | 28 | let connectedClients = 0; 29 | 30 | async function buildServer() { 31 | const app = fastify(); 32 | 33 | await app.register(fastifyCors, { 34 | origin: CORS_ORIGIN, 35 | }); 36 | 37 | await app.register(fastifyIO); 38 | 39 | const currentCount = await publisher.get(CONNECTION_COUNT_KEY); 40 | 41 | if (!currentCount) { 42 | await publisher.set(CONNECTION_COUNT_KEY, 0); 43 | } 44 | 45 | app.io.on("connection", async (io) => { 46 | const incResult = await publisher.incr(CONNECTION_COUNT_KEY); 47 | 48 | connectedClients++; 49 | 50 | await publisher.publish( 51 | CONNECTION_COUNT_UPDATED_CHANNEL, 52 | String(incResult) 53 | ); 54 | 55 | io.on(NEW_MESSAGE_CHANNEL, async (payload) => { 56 | const message = payload.message; 57 | 58 | if (!message) { 59 | return; 60 | } 61 | 62 | console.log("rest", message); 63 | await publisher.publish(NEW_MESSAGE_CHANNEL, message.toString()); 64 | }); 65 | 66 | io.on("disconnect", async () => { 67 | connectedClients--; 68 | const decrResult = await publisher.decr(CONNECTION_COUNT_KEY); 69 | await publisher.publish( 70 | CONNECTION_COUNT_UPDATED_CHANNEL, 71 | String(decrResult) 72 | ); 73 | }); 74 | }); 75 | 76 | subscriber.subscribe(CONNECTION_COUNT_UPDATED_CHANNEL, (err, count) => { 77 | if (err) { 78 | console.error( 79 | `Error subscribing to ${CONNECTION_COUNT_UPDATED_CHANNEL}`, 80 | err 81 | ); 82 | return; 83 | } 84 | 85 | console.log( 86 | `${count} clients subscribes to ${CONNECTION_COUNT_UPDATED_CHANNEL} channel` 87 | ); 88 | }); 89 | 90 | subscriber.subscribe(NEW_MESSAGE_CHANNEL, (err, count) => { 91 | if (err) { 92 | console.error(`Error subscribing to ${NEW_MESSAGE_CHANNEL}`); 93 | return; 94 | } 95 | 96 | console.log( 97 | `${count} clients subscribes to ${NEW_MESSAGE_CHANNEL} channel` 98 | ); 99 | }); 100 | 101 | subscriber.on("message", (channel, text) => { 102 | if (channel === CONNECTION_COUNT_UPDATED_CHANNEL) { 103 | app.io.emit(CONNECTION_COUNT_UPDATED_CHANNEL, { 104 | count: text, 105 | }); 106 | 107 | return; 108 | } 109 | 110 | if (channel === NEW_MESSAGE_CHANNEL) { 111 | app.io.emit(NEW_MESSAGE_CHANNEL, { 112 | message: text, 113 | id: randomUUID(), 114 | createdAt: new Date(), 115 | port: PORT, 116 | }); 117 | 118 | return; 119 | } 120 | }); 121 | 122 | app.get("/healthcheck", () => { 123 | return { 124 | status: "ok", 125 | port: PORT, 126 | }; 127 | }); 128 | 129 | return app; 130 | } 131 | 132 | async function main() { 133 | const app = await buildServer(); 134 | 135 | try { 136 | await app.listen({ 137 | port: PORT, 138 | host: HOST, 139 | }); 140 | 141 | closeWithGrace({ delay: 2000 }, async ({ signal, err }) => { 142 | if (connectedClients > 0) { 143 | const currentCount = parseInt( 144 | (await publisher.get(CONNECTION_COUNT_KEY)) || "0", 145 | 10 146 | ); 147 | 148 | const newCount = Math.max(currentCount - connectedClients, 0); 149 | 150 | await publisher.set(CONNECTION_COUNT_KEY, newCount); 151 | } 152 | 153 | await app.close(); 154 | }); 155 | 156 | console.log(`Server started at http://${HOST}:${PORT}`); 157 | } catch (e) { 158 | console.error(e); 159 | process.exit(1); 160 | } 161 | } 162 | 163 | main(); 164 | -------------------------------------------------------------------------------- /server/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | /* Visit https://aka.ms/tsconfig to read more about this file */ 4 | 5 | /* Projects */ 6 | // "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */ 7 | // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ 8 | // "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */ 9 | // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */ 10 | // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ 11 | // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ 12 | 13 | /* Language and Environment */ 14 | "target": "es2016" /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */, 15 | // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ 16 | // "jsx": "preserve", /* Specify what JSX code is generated. */ 17 | // "experimentalDecorators": true, /* Enable experimental support for legacy experimental decorators. */ 18 | // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ 19 | // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */ 20 | // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ 21 | // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */ 22 | // "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */ 23 | // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ 24 | // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ 25 | // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ 26 | 27 | /* Modules */ 28 | "module": "commonjs" /* Specify what module code is generated. */, 29 | // "rootDir": "./", /* Specify the root folder within your source files. */ 30 | // "moduleResolution": "node10", /* Specify how TypeScript looks up a file from a given module specifier. */ 31 | // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ 32 | // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ 33 | // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ 34 | // "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */ 35 | // "types": [], /* Specify type package names to be included without being referenced in a source file. */ 36 | // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ 37 | // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */ 38 | // "allowImportingTsExtensions": true, /* Allow imports to include TypeScript file extensions. Requires '--moduleResolution bundler' and either '--noEmit' or '--emitDeclarationOnly' to be set. */ 39 | // "resolvePackageJsonExports": true, /* Use the package.json 'exports' field when resolving package imports. */ 40 | // "resolvePackageJsonImports": true, /* Use the package.json 'imports' field when resolving imports. */ 41 | // "customConditions": [], /* Conditions to set in addition to the resolver-specific defaults when resolving imports. */ 42 | // "resolveJsonModule": true, /* Enable importing .json files. */ 43 | // "allowArbitraryExtensions": true, /* Enable importing files with any extension, provided a declaration file is present. */ 44 | // "noResolve": true, /* Disallow 'import's, 'require's or ''s from expanding the number of files TypeScript should add to a project. */ 45 | 46 | /* JavaScript Support */ 47 | // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */ 48 | // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ 49 | // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */ 50 | 51 | /* Emit */ 52 | // "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ 53 | // "declarationMap": true, /* Create sourcemaps for d.ts files. */ 54 | // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ 55 | // "sourceMap": true, /* Create source map files for emitted JavaScript files. */ 56 | // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ 57 | // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */ 58 | "outDir": "./build" /* Specify an output folder for all emitted files. */, 59 | // "removeComments": true, /* Disable emitting comments. */ 60 | // "noEmit": true, /* Disable emitting files from a compilation. */ 61 | // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ 62 | // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types. */ 63 | // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ 64 | // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ 65 | // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ 66 | // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ 67 | // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ 68 | // "newLine": "crlf", /* Set the newline character for emitting files. */ 69 | // "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */ 70 | // "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */ 71 | // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ 72 | // "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */ 73 | // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ 74 | // "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */ 75 | 76 | /* Interop Constraints */ 77 | // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ 78 | // "verbatimModuleSyntax": true, /* Do not transform or elide any imports or exports not marked as type-only, ensuring they are written in the output file's format based on the 'module' setting. */ 79 | // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ 80 | "esModuleInterop": true /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */, 81 | // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ 82 | "forceConsistentCasingInFileNames": true /* Ensure that casing is correct in imports. */, 83 | 84 | /* Type Checking */ 85 | "strict": true /* Enable all strict type-checking options. */, 86 | // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */ 87 | // "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */ 88 | // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ 89 | // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */ 90 | // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ 91 | // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */ 92 | // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */ 93 | // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ 94 | // "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */ 95 | // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */ 96 | // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ 97 | // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ 98 | // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ 99 | // "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */ 100 | // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ 101 | // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */ 102 | // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ 103 | // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ 104 | 105 | /* Completeness */ 106 | // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ 107 | "skipLibCheck": true /* Skip type checking all .d.ts files. */ 108 | } 109 | } 110 | -------------------------------------------------------------------------------- /ui/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "next/core-web-vitals" 3 | } 4 | -------------------------------------------------------------------------------- /ui/.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 | 27 | # local env files 28 | .env*.local 29 | 30 | # vercel 31 | .vercel 32 | 33 | # typescript 34 | *.tsbuildinfo 35 | next-env.d.ts 36 | -------------------------------------------------------------------------------- /ui/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 | -------------------------------------------------------------------------------- /ui/components.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://ui.shadcn.com/schema.json", 3 | "style": "default", 4 | "rsc": false, 5 | "tsx": true, 6 | "tailwind": { 7 | "config": "tailwind.config.js", 8 | "css": "src/styles/global.css", 9 | "baseColor": "slate", 10 | "cssVariables": true 11 | }, 12 | "aliases": { 13 | "components": "@/components", 14 | "utils": "@/lib/utils" 15 | } 16 | } -------------------------------------------------------------------------------- /ui/next.config.js: -------------------------------------------------------------------------------- 1 | /** @type {import('next').NextConfig} */ 2 | const nextConfig = { 3 | reactStrictMode: true, 4 | } 5 | 6 | module.exports = nextConfig 7 | -------------------------------------------------------------------------------- /ui/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ui", 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 | "@hookform/resolvers": "^3.2.0", 13 | "@radix-ui/react-label": "^2.0.2", 14 | "@radix-ui/react-slot": "^1.0.2", 15 | "@types/node": "20.5.1", 16 | "@types/react": "18.2.20", 17 | "@types/react-dom": "18.2.7", 18 | "@vercel/analytics": "^1.0.2", 19 | "autoprefixer": "10.4.15", 20 | "class-variance-authority": "^0.7.0", 21 | "clsx": "^2.0.0", 22 | "eslint": "8.47.0", 23 | "eslint-config-next": "13.4.19", 24 | "lucide-react": "^0.268.0", 25 | "next": "13.4.19", 26 | "postcss": "8.4.28", 27 | "react": "18.2.0", 28 | "react-dom": "18.2.0", 29 | "react-hook-form": "^7.45.4", 30 | "socket.io-client": "^4.7.2", 31 | "tailwind-merge": "^1.14.0", 32 | "tailwindcss": "3.3.3", 33 | "tailwindcss-animate": "^1.0.6", 34 | "typescript": "5.1.6", 35 | "zod": "^3.22.2" 36 | }, 37 | "devDependencies": { 38 | "@types/ws": "^8.5.5" 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /ui/pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: 5.4 2 | 3 | specifiers: 4 | '@hookform/resolvers': ^3.2.0 5 | '@radix-ui/react-label': ^2.0.2 6 | '@radix-ui/react-slot': ^1.0.2 7 | '@types/node': 20.5.1 8 | '@types/react': 18.2.20 9 | '@types/react-dom': 18.2.7 10 | '@types/ws': ^8.5.5 11 | '@vercel/analytics': ^1.0.2 12 | autoprefixer: 10.4.15 13 | class-variance-authority: ^0.7.0 14 | clsx: ^2.0.0 15 | eslint: 8.47.0 16 | eslint-config-next: 13.4.19 17 | lucide-react: ^0.268.0 18 | next: 13.4.19 19 | postcss: 8.4.28 20 | react: 18.2.0 21 | react-dom: 18.2.0 22 | react-hook-form: ^7.45.4 23 | socket.io-client: ^4.7.2 24 | tailwind-merge: ^1.14.0 25 | tailwindcss: 3.3.3 26 | tailwindcss-animate: ^1.0.6 27 | typescript: 5.1.6 28 | zod: ^3.22.2 29 | 30 | dependencies: 31 | '@hookform/resolvers': 3.2.0_react-hook-form@7.45.4 32 | '@radix-ui/react-label': 2.0.2_gltvt74xzh7f5lvw2hzxriz5bu 33 | '@radix-ui/react-slot': 1.0.2_j3ahe22lw6ac2w6qvqp4kjqnqy 34 | '@types/node': 20.5.1 35 | '@types/react': 18.2.20 36 | '@types/react-dom': 18.2.7 37 | '@vercel/analytics': 1.0.2 38 | autoprefixer: 10.4.15_postcss@8.4.28 39 | class-variance-authority: 0.7.0 40 | clsx: 2.0.0 41 | eslint: 8.47.0 42 | eslint-config-next: 13.4.19_qj3u6ezxe2airdzjq3nyoxe24m 43 | lucide-react: 0.268.0_react@18.2.0 44 | next: 13.4.19_biqbaboplfbrettd7655fr4n2y 45 | postcss: 8.4.28 46 | react: 18.2.0 47 | react-dom: 18.2.0_react@18.2.0 48 | react-hook-form: 7.45.4_react@18.2.0 49 | socket.io-client: 4.7.2 50 | tailwind-merge: 1.14.0 51 | tailwindcss: 3.3.3 52 | tailwindcss-animate: 1.0.6_tailwindcss@3.3.3 53 | typescript: 5.1.6 54 | zod: 3.22.2 55 | 56 | devDependencies: 57 | '@types/ws': 8.5.5 58 | 59 | packages: 60 | 61 | /@aashutoshrathi/word-wrap/1.2.6: 62 | resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} 63 | engines: {node: '>=0.10.0'} 64 | dev: false 65 | 66 | /@alloc/quick-lru/5.2.0: 67 | resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} 68 | engines: {node: '>=10'} 69 | dev: false 70 | 71 | /@babel/runtime/7.22.10: 72 | resolution: {integrity: sha512-21t/fkKLMZI4pqP2wlmsQAWnYW1PDyKyyUV4vCi+B25ydmdaYTKXPwCj0BzSUnZf4seIiYvSA3jcZ3gdsMFkLQ==} 73 | engines: {node: '>=6.9.0'} 74 | dependencies: 75 | regenerator-runtime: 0.14.0 76 | dev: false 77 | 78 | /@eslint-community/eslint-utils/4.4.0_eslint@8.47.0: 79 | resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} 80 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 81 | peerDependencies: 82 | eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 83 | dependencies: 84 | eslint: 8.47.0 85 | eslint-visitor-keys: 3.4.3 86 | dev: false 87 | 88 | /@eslint-community/regexpp/4.7.0: 89 | resolution: {integrity: sha512-+HencqxU7CFJnQb7IKtuNBqS6Yx3Tz4kOL8BJXo+JyeiBm5MEX6pO8onXDkjrkCRlfYXS1Axro15ZjVFe9YgsA==} 90 | engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} 91 | dev: false 92 | 93 | /@eslint/eslintrc/2.1.2: 94 | resolution: {integrity: sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==} 95 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 96 | dependencies: 97 | ajv: 6.12.6 98 | debug: 4.3.4 99 | espree: 9.6.1 100 | globals: 13.21.0 101 | ignore: 5.2.4 102 | import-fresh: 3.3.0 103 | js-yaml: 4.1.0 104 | minimatch: 3.1.2 105 | strip-json-comments: 3.1.1 106 | transitivePeerDependencies: 107 | - supports-color 108 | dev: false 109 | 110 | /@eslint/js/8.47.0: 111 | resolution: {integrity: sha512-P6omY1zv5MItm93kLM8s2vr1HICJH8v0dvddDhysbIuZ+vcjOHg5Zbkf1mTkcmi2JA9oBG2anOkRnW8WJTS8Og==} 112 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 113 | dev: false 114 | 115 | /@hookform/resolvers/3.2.0_react-hook-form@7.45.4: 116 | resolution: {integrity: sha512-skXQHhLxq0Sz2xDwCyv5dygBCtXJe1GmWwxDzfdtl0X6agD6qcyTG8HrZWkjJoy8AkiLARqYvSYJ8z7+Nwmi7w==} 117 | peerDependencies: 118 | react-hook-form: ^7.0.0 119 | dependencies: 120 | react-hook-form: 7.45.4_react@18.2.0 121 | dev: false 122 | 123 | /@humanwhocodes/config-array/0.11.10: 124 | resolution: {integrity: sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==} 125 | engines: {node: '>=10.10.0'} 126 | dependencies: 127 | '@humanwhocodes/object-schema': 1.2.1 128 | debug: 4.3.4 129 | minimatch: 3.1.2 130 | transitivePeerDependencies: 131 | - supports-color 132 | dev: false 133 | 134 | /@humanwhocodes/module-importer/1.0.1: 135 | resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} 136 | engines: {node: '>=12.22'} 137 | dev: false 138 | 139 | /@humanwhocodes/object-schema/1.2.1: 140 | resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} 141 | dev: false 142 | 143 | /@jridgewell/gen-mapping/0.3.3: 144 | resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} 145 | engines: {node: '>=6.0.0'} 146 | dependencies: 147 | '@jridgewell/set-array': 1.1.2 148 | '@jridgewell/sourcemap-codec': 1.4.15 149 | '@jridgewell/trace-mapping': 0.3.19 150 | dev: false 151 | 152 | /@jridgewell/resolve-uri/3.1.1: 153 | resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} 154 | engines: {node: '>=6.0.0'} 155 | dev: false 156 | 157 | /@jridgewell/set-array/1.1.2: 158 | resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} 159 | engines: {node: '>=6.0.0'} 160 | dev: false 161 | 162 | /@jridgewell/sourcemap-codec/1.4.15: 163 | resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} 164 | dev: false 165 | 166 | /@jridgewell/trace-mapping/0.3.19: 167 | resolution: {integrity: sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==} 168 | dependencies: 169 | '@jridgewell/resolve-uri': 3.1.1 170 | '@jridgewell/sourcemap-codec': 1.4.15 171 | dev: false 172 | 173 | /@next/env/13.4.19: 174 | resolution: {integrity: sha512-FsAT5x0jF2kkhNkKkukhsyYOrRqtSxrEhfliniIq0bwWbuXLgyt3Gv0Ml+b91XwjwArmuP7NxCiGd++GGKdNMQ==} 175 | dev: false 176 | 177 | /@next/eslint-plugin-next/13.4.19: 178 | resolution: {integrity: sha512-N/O+zGb6wZQdwu6atMZHbR7T9Np5SUFUjZqCbj0sXm+MwQO35M8TazVB4otm87GkXYs2l6OPwARd3/PUWhZBVQ==} 179 | dependencies: 180 | glob: 7.1.7 181 | dev: false 182 | 183 | /@next/swc-darwin-arm64/13.4.19: 184 | resolution: {integrity: sha512-vv1qrjXeGbuF2mOkhkdxMDtv9np7W4mcBtaDnHU+yJG+bBwa6rYsYSCI/9Xm5+TuF5SbZbrWO6G1NfTh1TMjvQ==} 185 | engines: {node: '>= 10'} 186 | cpu: [arm64] 187 | os: [darwin] 188 | requiresBuild: true 189 | dev: false 190 | optional: true 191 | 192 | /@next/swc-darwin-x64/13.4.19: 193 | resolution: {integrity: sha512-jyzO6wwYhx6F+7gD8ddZfuqO4TtpJdw3wyOduR4fxTUCm3aLw7YmHGYNjS0xRSYGAkLpBkH1E0RcelyId6lNsw==} 194 | engines: {node: '>= 10'} 195 | cpu: [x64] 196 | os: [darwin] 197 | requiresBuild: true 198 | dev: false 199 | optional: true 200 | 201 | /@next/swc-linux-arm64-gnu/13.4.19: 202 | resolution: {integrity: sha512-vdlnIlaAEh6H+G6HrKZB9c2zJKnpPVKnA6LBwjwT2BTjxI7e0Hx30+FoWCgi50e+YO49p6oPOtesP9mXDRiiUg==} 203 | engines: {node: '>= 10'} 204 | cpu: [arm64] 205 | os: [linux] 206 | requiresBuild: true 207 | dev: false 208 | optional: true 209 | 210 | /@next/swc-linux-arm64-musl/13.4.19: 211 | resolution: {integrity: sha512-aU0HkH2XPgxqrbNRBFb3si9Ahu/CpaR5RPmN2s9GiM9qJCiBBlZtRTiEca+DC+xRPyCThTtWYgxjWHgU7ZkyvA==} 212 | engines: {node: '>= 10'} 213 | cpu: [arm64] 214 | os: [linux] 215 | requiresBuild: true 216 | dev: false 217 | optional: true 218 | 219 | /@next/swc-linux-x64-gnu/13.4.19: 220 | resolution: {integrity: sha512-htwOEagMa/CXNykFFeAHHvMJeqZfNQEoQvHfsA4wgg5QqGNqD5soeCer4oGlCol6NGUxknrQO6VEustcv+Md+g==} 221 | engines: {node: '>= 10'} 222 | cpu: [x64] 223 | os: [linux] 224 | requiresBuild: true 225 | dev: false 226 | optional: true 227 | 228 | /@next/swc-linux-x64-musl/13.4.19: 229 | resolution: {integrity: sha512-4Gj4vvtbK1JH8ApWTT214b3GwUh9EKKQjY41hH/t+u55Knxi/0wesMzwQRhppK6Ddalhu0TEttbiJ+wRcoEj5Q==} 230 | engines: {node: '>= 10'} 231 | cpu: [x64] 232 | os: [linux] 233 | requiresBuild: true 234 | dev: false 235 | optional: true 236 | 237 | /@next/swc-win32-arm64-msvc/13.4.19: 238 | resolution: {integrity: sha512-bUfDevQK4NsIAHXs3/JNgnvEY+LRyneDN788W2NYiRIIzmILjba7LaQTfihuFawZDhRtkYCv3JDC3B4TwnmRJw==} 239 | engines: {node: '>= 10'} 240 | cpu: [arm64] 241 | os: [win32] 242 | requiresBuild: true 243 | dev: false 244 | optional: true 245 | 246 | /@next/swc-win32-ia32-msvc/13.4.19: 247 | resolution: {integrity: sha512-Y5kikILFAr81LYIFaw6j/NrOtmiM4Sf3GtOc0pn50ez2GCkr+oejYuKGcwAwq3jiTKuzF6OF4iT2INPoxRycEA==} 248 | engines: {node: '>= 10'} 249 | cpu: [ia32] 250 | os: [win32] 251 | requiresBuild: true 252 | dev: false 253 | optional: true 254 | 255 | /@next/swc-win32-x64-msvc/13.4.19: 256 | resolution: {integrity: sha512-YzA78jBDXMYiINdPdJJwGgPNT3YqBNNGhsthsDoWHL9p24tEJn9ViQf/ZqTbwSpX/RrkPupLfuuTH2sf73JBAw==} 257 | engines: {node: '>= 10'} 258 | cpu: [x64] 259 | os: [win32] 260 | requiresBuild: true 261 | dev: false 262 | optional: true 263 | 264 | /@nodelib/fs.scandir/2.1.5: 265 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} 266 | engines: {node: '>= 8'} 267 | dependencies: 268 | '@nodelib/fs.stat': 2.0.5 269 | run-parallel: 1.2.0 270 | dev: false 271 | 272 | /@nodelib/fs.stat/2.0.5: 273 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} 274 | engines: {node: '>= 8'} 275 | dev: false 276 | 277 | /@nodelib/fs.walk/1.2.8: 278 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} 279 | engines: {node: '>= 8'} 280 | dependencies: 281 | '@nodelib/fs.scandir': 2.1.5 282 | fastq: 1.15.0 283 | dev: false 284 | 285 | /@radix-ui/react-compose-refs/1.0.1_j3ahe22lw6ac2w6qvqp4kjqnqy: 286 | resolution: {integrity: sha512-fDSBgd44FKHa1FRMU59qBMPFcl2PZE+2nmqunj+BWFyYYjnhIDWL2ItDs3rrbJDQOtzt5nIebLCQc4QRfz6LJw==} 287 | peerDependencies: 288 | '@types/react': '*' 289 | react: ^16.8 || ^17.0 || ^18.0 290 | peerDependenciesMeta: 291 | '@types/react': 292 | optional: true 293 | dependencies: 294 | '@babel/runtime': 7.22.10 295 | '@types/react': 18.2.20 296 | react: 18.2.0 297 | dev: false 298 | 299 | /@radix-ui/react-label/2.0.2_gltvt74xzh7f5lvw2hzxriz5bu: 300 | resolution: {integrity: sha512-N5ehvlM7qoTLx7nWPodsPYPgMzA5WM8zZChQg8nyFJKnDO5WHdba1vv5/H6IO5LtJMfD2Q3wh1qHFGNtK0w3bQ==} 301 | peerDependencies: 302 | '@types/react': '*' 303 | '@types/react-dom': '*' 304 | react: ^16.8 || ^17.0 || ^18.0 305 | react-dom: ^16.8 || ^17.0 || ^18.0 306 | peerDependenciesMeta: 307 | '@types/react': 308 | optional: true 309 | '@types/react-dom': 310 | optional: true 311 | dependencies: 312 | '@babel/runtime': 7.22.10 313 | '@radix-ui/react-primitive': 1.0.3_gltvt74xzh7f5lvw2hzxriz5bu 314 | '@types/react': 18.2.20 315 | '@types/react-dom': 18.2.7 316 | react: 18.2.0 317 | react-dom: 18.2.0_react@18.2.0 318 | dev: false 319 | 320 | /@radix-ui/react-primitive/1.0.3_gltvt74xzh7f5lvw2hzxriz5bu: 321 | resolution: {integrity: sha512-yi58uVyoAcK/Nq1inRY56ZSjKypBNKTa/1mcL8qdl6oJeEaDbOldlzrGn7P6Q3Id5d+SYNGc5AJgc4vGhjs5+g==} 322 | peerDependencies: 323 | '@types/react': '*' 324 | '@types/react-dom': '*' 325 | react: ^16.8 || ^17.0 || ^18.0 326 | react-dom: ^16.8 || ^17.0 || ^18.0 327 | peerDependenciesMeta: 328 | '@types/react': 329 | optional: true 330 | '@types/react-dom': 331 | optional: true 332 | dependencies: 333 | '@babel/runtime': 7.22.10 334 | '@radix-ui/react-slot': 1.0.2_j3ahe22lw6ac2w6qvqp4kjqnqy 335 | '@types/react': 18.2.20 336 | '@types/react-dom': 18.2.7 337 | react: 18.2.0 338 | react-dom: 18.2.0_react@18.2.0 339 | dev: false 340 | 341 | /@radix-ui/react-slot/1.0.2_j3ahe22lw6ac2w6qvqp4kjqnqy: 342 | resolution: {integrity: sha512-YeTpuq4deV+6DusvVUW4ivBgnkHwECUu0BiN43L5UCDFgdhsRUWAghhTF5MbvNTPzmiFOx90asDSUjWuCNapwg==} 343 | peerDependencies: 344 | '@types/react': '*' 345 | react: ^16.8 || ^17.0 || ^18.0 346 | peerDependenciesMeta: 347 | '@types/react': 348 | optional: true 349 | dependencies: 350 | '@babel/runtime': 7.22.10 351 | '@radix-ui/react-compose-refs': 1.0.1_j3ahe22lw6ac2w6qvqp4kjqnqy 352 | '@types/react': 18.2.20 353 | react: 18.2.0 354 | dev: false 355 | 356 | /@rushstack/eslint-patch/1.3.3: 357 | resolution: {integrity: sha512-0xd7qez0AQ+MbHatZTlI1gu5vkG8r7MYRUJAHPAHJBmGLs16zpkrpAVLvjQKQOqaXPDUBwOiJzNc00znHSCVBw==} 358 | dev: false 359 | 360 | /@socket.io/component-emitter/3.1.0: 361 | resolution: {integrity: sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==} 362 | dev: false 363 | 364 | /@swc/helpers/0.5.1: 365 | resolution: {integrity: sha512-sJ902EfIzn1Fa+qYmjdQqh8tPsoxyBz+8yBKC2HKUxyezKJFwPGOn7pv4WY6QuQW//ySQi5lJjA/ZT9sNWWNTg==} 366 | dependencies: 367 | tslib: 2.6.2 368 | dev: false 369 | 370 | /@types/json5/0.0.29: 371 | resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} 372 | dev: false 373 | 374 | /@types/node/20.5.1: 375 | resolution: {integrity: sha512-4tT2UrL5LBqDwoed9wZ6N3umC4Yhz3W3FloMmiiG4JwmUJWpie0c7lcnUNd4gtMKuDEO4wRVS8B6Xa0uMRsMKg==} 376 | 377 | /@types/prop-types/15.7.5: 378 | resolution: {integrity: sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==} 379 | dev: false 380 | 381 | /@types/react-dom/18.2.7: 382 | resolution: {integrity: sha512-GRaAEriuT4zp9N4p1i8BDBYmEyfo+xQ3yHjJU4eiK5NDa1RmUZG+unZABUTK4/Ox/M+GaHwb6Ow8rUITrtjszA==} 383 | dependencies: 384 | '@types/react': 18.2.20 385 | dev: false 386 | 387 | /@types/react/18.2.20: 388 | resolution: {integrity: sha512-WKNtmsLWJM/3D5mG4U84cysVY31ivmyw85dE84fOCk5Hx78wezB/XEjVPWl2JTZ5FkEeaTJf+VgUAUn3PE7Isw==} 389 | dependencies: 390 | '@types/prop-types': 15.7.5 391 | '@types/scheduler': 0.16.3 392 | csstype: 3.1.2 393 | dev: false 394 | 395 | /@types/scheduler/0.16.3: 396 | resolution: {integrity: sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==} 397 | dev: false 398 | 399 | /@types/ws/8.5.5: 400 | resolution: {integrity: sha512-lwhs8hktwxSjf9UaZ9tG5M03PGogvFaH8gUgLNbN9HKIg0dvv6q+gkSuJ8HN4/VbyxkuLzCjlN7GquQ0gUJfIg==} 401 | dependencies: 402 | '@types/node': 20.5.1 403 | dev: true 404 | 405 | /@typescript-eslint/parser/6.4.1_qj3u6ezxe2airdzjq3nyoxe24m: 406 | resolution: {integrity: sha512-610G6KHymg9V7EqOaNBMtD1GgpAmGROsmfHJPXNLCU9bfIuLrkdOygltK784F6Crboyd5tBFayPB7Sf0McrQwg==} 407 | engines: {node: ^16.0.0 || >=18.0.0} 408 | peerDependencies: 409 | eslint: ^7.0.0 || ^8.0.0 410 | typescript: '*' 411 | peerDependenciesMeta: 412 | typescript: 413 | optional: true 414 | dependencies: 415 | '@typescript-eslint/scope-manager': 6.4.1 416 | '@typescript-eslint/types': 6.4.1 417 | '@typescript-eslint/typescript-estree': 6.4.1_typescript@5.1.6 418 | '@typescript-eslint/visitor-keys': 6.4.1 419 | debug: 4.3.4 420 | eslint: 8.47.0 421 | typescript: 5.1.6 422 | transitivePeerDependencies: 423 | - supports-color 424 | dev: false 425 | 426 | /@typescript-eslint/scope-manager/6.4.1: 427 | resolution: {integrity: sha512-p/OavqOQfm4/Hdrr7kvacOSFjwQ2rrDVJRPxt/o0TOWdFnjJptnjnZ+sYDR7fi4OimvIuKp+2LCkc+rt9fIW+A==} 428 | engines: {node: ^16.0.0 || >=18.0.0} 429 | dependencies: 430 | '@typescript-eslint/types': 6.4.1 431 | '@typescript-eslint/visitor-keys': 6.4.1 432 | dev: false 433 | 434 | /@typescript-eslint/types/6.4.1: 435 | resolution: {integrity: sha512-zAAopbNuYu++ijY1GV2ylCsQsi3B8QvfPHVqhGdDcbx/NK5lkqMnCGU53amAjccSpk+LfeONxwzUhDzArSfZJg==} 436 | engines: {node: ^16.0.0 || >=18.0.0} 437 | dev: false 438 | 439 | /@typescript-eslint/typescript-estree/6.4.1_typescript@5.1.6: 440 | resolution: {integrity: sha512-xF6Y7SatVE/OyV93h1xGgfOkHr2iXuo8ip0gbfzaKeGGuKiAnzS+HtVhSPx8Www243bwlW8IF7X0/B62SzFftg==} 441 | engines: {node: ^16.0.0 || >=18.0.0} 442 | peerDependencies: 443 | typescript: '*' 444 | peerDependenciesMeta: 445 | typescript: 446 | optional: true 447 | dependencies: 448 | '@typescript-eslint/types': 6.4.1 449 | '@typescript-eslint/visitor-keys': 6.4.1 450 | debug: 4.3.4 451 | globby: 11.1.0 452 | is-glob: 4.0.3 453 | semver: 7.5.4 454 | ts-api-utils: 1.0.2_typescript@5.1.6 455 | typescript: 5.1.6 456 | transitivePeerDependencies: 457 | - supports-color 458 | dev: false 459 | 460 | /@typescript-eslint/visitor-keys/6.4.1: 461 | resolution: {integrity: sha512-y/TyRJsbZPkJIZQXrHfdnxVnxyKegnpEvnRGNam7s3TRR2ykGefEWOhaef00/UUN3IZxizS7BTO3svd3lCOJRQ==} 462 | engines: {node: ^16.0.0 || >=18.0.0} 463 | dependencies: 464 | '@typescript-eslint/types': 6.4.1 465 | eslint-visitor-keys: 3.4.3 466 | dev: false 467 | 468 | /@vercel/analytics/1.0.2: 469 | resolution: {integrity: sha512-BZFxVrv24VbNNl5xMxqUojQIegEeXMI6rX3rg1uVLYUEXsuKNBSAEQf4BWEcjQDp/8aYJOj6m8V4PUA3x/cxgg==} 470 | dev: false 471 | 472 | /acorn-jsx/5.3.2_acorn@8.10.0: 473 | resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} 474 | peerDependencies: 475 | acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 476 | dependencies: 477 | acorn: 8.10.0 478 | dev: false 479 | 480 | /acorn/8.10.0: 481 | resolution: {integrity: sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==} 482 | engines: {node: '>=0.4.0'} 483 | hasBin: true 484 | dev: false 485 | 486 | /ajv/6.12.6: 487 | resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} 488 | dependencies: 489 | fast-deep-equal: 3.1.3 490 | fast-json-stable-stringify: 2.1.0 491 | json-schema-traverse: 0.4.1 492 | uri-js: 4.4.1 493 | dev: false 494 | 495 | /ansi-regex/5.0.1: 496 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} 497 | engines: {node: '>=8'} 498 | dev: false 499 | 500 | /ansi-styles/4.3.0: 501 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 502 | engines: {node: '>=8'} 503 | dependencies: 504 | color-convert: 2.0.1 505 | dev: false 506 | 507 | /any-promise/1.3.0: 508 | resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} 509 | dev: false 510 | 511 | /anymatch/3.1.3: 512 | resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} 513 | engines: {node: '>= 8'} 514 | dependencies: 515 | normalize-path: 3.0.0 516 | picomatch: 2.3.1 517 | dev: false 518 | 519 | /arg/5.0.2: 520 | resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} 521 | dev: false 522 | 523 | /argparse/2.0.1: 524 | resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} 525 | dev: false 526 | 527 | /aria-query/5.3.0: 528 | resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==} 529 | dependencies: 530 | dequal: 2.0.3 531 | dev: false 532 | 533 | /array-buffer-byte-length/1.0.0: 534 | resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==} 535 | dependencies: 536 | call-bind: 1.0.2 537 | is-array-buffer: 3.0.2 538 | dev: false 539 | 540 | /array-includes/3.1.6: 541 | resolution: {integrity: sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==} 542 | engines: {node: '>= 0.4'} 543 | dependencies: 544 | call-bind: 1.0.2 545 | define-properties: 1.2.0 546 | es-abstract: 1.22.1 547 | get-intrinsic: 1.2.1 548 | is-string: 1.0.7 549 | dev: false 550 | 551 | /array-union/2.1.0: 552 | resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} 553 | engines: {node: '>=8'} 554 | dev: false 555 | 556 | /array.prototype.findlastindex/1.2.2: 557 | resolution: {integrity: sha512-tb5thFFlUcp7NdNF6/MpDk/1r/4awWG1FIz3YqDf+/zJSTezBb+/5WViH41obXULHVpDzoiCLpJ/ZO9YbJMsdw==} 558 | engines: {node: '>= 0.4'} 559 | dependencies: 560 | call-bind: 1.0.2 561 | define-properties: 1.2.0 562 | es-abstract: 1.22.1 563 | es-shim-unscopables: 1.0.0 564 | get-intrinsic: 1.2.1 565 | dev: false 566 | 567 | /array.prototype.flat/1.3.1: 568 | resolution: {integrity: sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==} 569 | engines: {node: '>= 0.4'} 570 | dependencies: 571 | call-bind: 1.0.2 572 | define-properties: 1.2.0 573 | es-abstract: 1.22.1 574 | es-shim-unscopables: 1.0.0 575 | dev: false 576 | 577 | /array.prototype.flatmap/1.3.1: 578 | resolution: {integrity: sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==} 579 | engines: {node: '>= 0.4'} 580 | dependencies: 581 | call-bind: 1.0.2 582 | define-properties: 1.2.0 583 | es-abstract: 1.22.1 584 | es-shim-unscopables: 1.0.0 585 | dev: false 586 | 587 | /array.prototype.tosorted/1.1.1: 588 | resolution: {integrity: sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ==} 589 | dependencies: 590 | call-bind: 1.0.2 591 | define-properties: 1.2.0 592 | es-abstract: 1.22.1 593 | es-shim-unscopables: 1.0.0 594 | get-intrinsic: 1.2.1 595 | dev: false 596 | 597 | /arraybuffer.prototype.slice/1.0.1: 598 | resolution: {integrity: sha512-09x0ZWFEjj4WD8PDbykUwo3t9arLn8NIzmmYEJFpYekOAQjpkGSyrQhNoRTcwwcFRu+ycWF78QZ63oWTqSjBcw==} 599 | engines: {node: '>= 0.4'} 600 | dependencies: 601 | array-buffer-byte-length: 1.0.0 602 | call-bind: 1.0.2 603 | define-properties: 1.2.0 604 | get-intrinsic: 1.2.1 605 | is-array-buffer: 3.0.2 606 | is-shared-array-buffer: 1.0.2 607 | dev: false 608 | 609 | /ast-types-flow/0.0.7: 610 | resolution: {integrity: sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==} 611 | dev: false 612 | 613 | /asynciterator.prototype/1.0.0: 614 | resolution: {integrity: sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==} 615 | dependencies: 616 | has-symbols: 1.0.3 617 | dev: false 618 | 619 | /autoprefixer/10.4.15_postcss@8.4.28: 620 | resolution: {integrity: sha512-KCuPB8ZCIqFdA4HwKXsvz7j6gvSDNhDP7WnUjBleRkKjPdvCmHFuQ77ocavI8FT6NdvlBnE2UFr2H4Mycn8Vew==} 621 | engines: {node: ^10 || ^12 || >=14} 622 | hasBin: true 623 | peerDependencies: 624 | postcss: ^8.1.0 625 | dependencies: 626 | browserslist: 4.21.10 627 | caniuse-lite: 1.0.30001522 628 | fraction.js: 4.2.1 629 | normalize-range: 0.1.2 630 | picocolors: 1.0.0 631 | postcss: 8.4.28 632 | postcss-value-parser: 4.2.0 633 | dev: false 634 | 635 | /available-typed-arrays/1.0.5: 636 | resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} 637 | engines: {node: '>= 0.4'} 638 | dev: false 639 | 640 | /axe-core/4.7.2: 641 | resolution: {integrity: sha512-zIURGIS1E1Q4pcrMjp+nnEh+16G56eG/MUllJH8yEvw7asDo7Ac9uhC9KIH5jzpITueEZolfYglnCGIuSBz39g==} 642 | engines: {node: '>=4'} 643 | dev: false 644 | 645 | /axobject-query/3.2.1: 646 | resolution: {integrity: sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==} 647 | dependencies: 648 | dequal: 2.0.3 649 | dev: false 650 | 651 | /balanced-match/1.0.2: 652 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 653 | dev: false 654 | 655 | /binary-extensions/2.2.0: 656 | resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} 657 | engines: {node: '>=8'} 658 | dev: false 659 | 660 | /brace-expansion/1.1.11: 661 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} 662 | dependencies: 663 | balanced-match: 1.0.2 664 | concat-map: 0.0.1 665 | dev: false 666 | 667 | /braces/3.0.2: 668 | resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} 669 | engines: {node: '>=8'} 670 | dependencies: 671 | fill-range: 7.0.1 672 | dev: false 673 | 674 | /browserslist/4.21.10: 675 | resolution: {integrity: sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==} 676 | engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} 677 | hasBin: true 678 | dependencies: 679 | caniuse-lite: 1.0.30001522 680 | electron-to-chromium: 1.4.498 681 | node-releases: 2.0.13 682 | update-browserslist-db: 1.0.11_browserslist@4.21.10 683 | dev: false 684 | 685 | /busboy/1.6.0: 686 | resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} 687 | engines: {node: '>=10.16.0'} 688 | dependencies: 689 | streamsearch: 1.1.0 690 | dev: false 691 | 692 | /call-bind/1.0.2: 693 | resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} 694 | dependencies: 695 | function-bind: 1.1.1 696 | get-intrinsic: 1.2.1 697 | dev: false 698 | 699 | /callsites/3.1.0: 700 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} 701 | engines: {node: '>=6'} 702 | dev: false 703 | 704 | /camelcase-css/2.0.1: 705 | resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} 706 | engines: {node: '>= 6'} 707 | dev: false 708 | 709 | /caniuse-lite/1.0.30001522: 710 | resolution: {integrity: sha512-TKiyTVZxJGhsTszLuzb+6vUZSjVOAhClszBr2Ta2k9IwtNBT/4dzmL6aywt0HCgEZlmwJzXJd8yNiob6HgwTRg==} 711 | dev: false 712 | 713 | /chalk/4.1.2: 714 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 715 | engines: {node: '>=10'} 716 | dependencies: 717 | ansi-styles: 4.3.0 718 | supports-color: 7.2.0 719 | dev: false 720 | 721 | /chokidar/3.5.3: 722 | resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} 723 | engines: {node: '>= 8.10.0'} 724 | dependencies: 725 | anymatch: 3.1.3 726 | braces: 3.0.2 727 | glob-parent: 5.1.2 728 | is-binary-path: 2.1.0 729 | is-glob: 4.0.3 730 | normalize-path: 3.0.0 731 | readdirp: 3.6.0 732 | optionalDependencies: 733 | fsevents: 2.3.3 734 | dev: false 735 | 736 | /class-variance-authority/0.7.0: 737 | resolution: {integrity: sha512-jFI8IQw4hczaL4ALINxqLEXQbWcNjoSkloa4IaufXCJr6QawJyw7tuRysRsrE8w2p/4gGaxKIt/hX3qz/IbD1A==} 738 | dependencies: 739 | clsx: 2.0.0 740 | dev: false 741 | 742 | /client-only/0.0.1: 743 | resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} 744 | dev: false 745 | 746 | /clsx/2.0.0: 747 | resolution: {integrity: sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q==} 748 | engines: {node: '>=6'} 749 | dev: false 750 | 751 | /color-convert/2.0.1: 752 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 753 | engines: {node: '>=7.0.0'} 754 | dependencies: 755 | color-name: 1.1.4 756 | dev: false 757 | 758 | /color-name/1.1.4: 759 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 760 | dev: false 761 | 762 | /commander/4.1.1: 763 | resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} 764 | engines: {node: '>= 6'} 765 | dev: false 766 | 767 | /concat-map/0.0.1: 768 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} 769 | dev: false 770 | 771 | /cross-spawn/7.0.3: 772 | resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} 773 | engines: {node: '>= 8'} 774 | dependencies: 775 | path-key: 3.1.1 776 | shebang-command: 2.0.0 777 | which: 2.0.2 778 | dev: false 779 | 780 | /cssesc/3.0.0: 781 | resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} 782 | engines: {node: '>=4'} 783 | hasBin: true 784 | dev: false 785 | 786 | /csstype/3.1.2: 787 | resolution: {integrity: sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==} 788 | dev: false 789 | 790 | /damerau-levenshtein/1.0.8: 791 | resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} 792 | dev: false 793 | 794 | /debug/3.2.7: 795 | resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} 796 | peerDependencies: 797 | supports-color: '*' 798 | peerDependenciesMeta: 799 | supports-color: 800 | optional: true 801 | dependencies: 802 | ms: 2.1.3 803 | dev: false 804 | 805 | /debug/4.3.4: 806 | resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} 807 | engines: {node: '>=6.0'} 808 | peerDependencies: 809 | supports-color: '*' 810 | peerDependenciesMeta: 811 | supports-color: 812 | optional: true 813 | dependencies: 814 | ms: 2.1.2 815 | dev: false 816 | 817 | /deep-is/0.1.4: 818 | resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} 819 | dev: false 820 | 821 | /define-properties/1.2.0: 822 | resolution: {integrity: sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==} 823 | engines: {node: '>= 0.4'} 824 | dependencies: 825 | has-property-descriptors: 1.0.0 826 | object-keys: 1.1.1 827 | dev: false 828 | 829 | /dequal/2.0.3: 830 | resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} 831 | engines: {node: '>=6'} 832 | dev: false 833 | 834 | /didyoumean/1.2.2: 835 | resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} 836 | dev: false 837 | 838 | /dir-glob/3.0.1: 839 | resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} 840 | engines: {node: '>=8'} 841 | dependencies: 842 | path-type: 4.0.0 843 | dev: false 844 | 845 | /dlv/1.1.3: 846 | resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} 847 | dev: false 848 | 849 | /doctrine/2.1.0: 850 | resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} 851 | engines: {node: '>=0.10.0'} 852 | dependencies: 853 | esutils: 2.0.3 854 | dev: false 855 | 856 | /doctrine/3.0.0: 857 | resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} 858 | engines: {node: '>=6.0.0'} 859 | dependencies: 860 | esutils: 2.0.3 861 | dev: false 862 | 863 | /electron-to-chromium/1.4.498: 864 | resolution: {integrity: sha512-4LODxAzKGVy7CJyhhN5mebwe7U2L29P+0G+HUriHnabm0d7LSff8Yn7t+Wq+2/9ze2Fu1dhX7mww090xfv7qXQ==} 865 | dev: false 866 | 867 | /emoji-regex/9.2.2: 868 | resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} 869 | dev: false 870 | 871 | /engine.io-client/6.5.2: 872 | resolution: {integrity: sha512-CQZqbrpEYnrpGqC07a9dJDz4gePZUgTPMU3NKJPSeQOyw27Tst4Pl3FemKoFGAlHzgZmKjoRmiJvbWfhCXUlIg==} 873 | dependencies: 874 | '@socket.io/component-emitter': 3.1.0 875 | debug: 4.3.4 876 | engine.io-parser: 5.2.1 877 | ws: 8.11.0 878 | xmlhttprequest-ssl: 2.0.0 879 | transitivePeerDependencies: 880 | - bufferutil 881 | - supports-color 882 | - utf-8-validate 883 | dev: false 884 | 885 | /engine.io-parser/5.2.1: 886 | resolution: {integrity: sha512-9JktcM3u18nU9N2Lz3bWeBgxVgOKpw7yhRaoxQA3FUDZzzw+9WlA6p4G4u0RixNkg14fH7EfEc/RhpurtiROTQ==} 887 | engines: {node: '>=10.0.0'} 888 | dev: false 889 | 890 | /enhanced-resolve/5.15.0: 891 | resolution: {integrity: sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==} 892 | engines: {node: '>=10.13.0'} 893 | dependencies: 894 | graceful-fs: 4.2.11 895 | tapable: 2.2.1 896 | dev: false 897 | 898 | /es-abstract/1.22.1: 899 | resolution: {integrity: sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw==} 900 | engines: {node: '>= 0.4'} 901 | dependencies: 902 | array-buffer-byte-length: 1.0.0 903 | arraybuffer.prototype.slice: 1.0.1 904 | available-typed-arrays: 1.0.5 905 | call-bind: 1.0.2 906 | es-set-tostringtag: 2.0.1 907 | es-to-primitive: 1.2.1 908 | function.prototype.name: 1.1.5 909 | get-intrinsic: 1.2.1 910 | get-symbol-description: 1.0.0 911 | globalthis: 1.0.3 912 | gopd: 1.0.1 913 | has: 1.0.3 914 | has-property-descriptors: 1.0.0 915 | has-proto: 1.0.1 916 | has-symbols: 1.0.3 917 | internal-slot: 1.0.5 918 | is-array-buffer: 3.0.2 919 | is-callable: 1.2.7 920 | is-negative-zero: 2.0.2 921 | is-regex: 1.1.4 922 | is-shared-array-buffer: 1.0.2 923 | is-string: 1.0.7 924 | is-typed-array: 1.1.12 925 | is-weakref: 1.0.2 926 | object-inspect: 1.12.3 927 | object-keys: 1.1.1 928 | object.assign: 4.1.4 929 | regexp.prototype.flags: 1.5.0 930 | safe-array-concat: 1.0.0 931 | safe-regex-test: 1.0.0 932 | string.prototype.trim: 1.2.7 933 | string.prototype.trimend: 1.0.6 934 | string.prototype.trimstart: 1.0.6 935 | typed-array-buffer: 1.0.0 936 | typed-array-byte-length: 1.0.0 937 | typed-array-byte-offset: 1.0.0 938 | typed-array-length: 1.0.4 939 | unbox-primitive: 1.0.2 940 | which-typed-array: 1.1.11 941 | dev: false 942 | 943 | /es-iterator-helpers/1.0.13: 944 | resolution: {integrity: sha512-LK3VGwzvaPWobO8xzXXGRUOGw8Dcjyfk62CsY/wfHN75CwsJPbuypOYJxK6g5RyEL8YDjIWcl6jgd8foO6mmrA==} 945 | dependencies: 946 | asynciterator.prototype: 1.0.0 947 | call-bind: 1.0.2 948 | define-properties: 1.2.0 949 | es-abstract: 1.22.1 950 | es-set-tostringtag: 2.0.1 951 | function-bind: 1.1.1 952 | get-intrinsic: 1.2.1 953 | globalthis: 1.0.3 954 | has-property-descriptors: 1.0.0 955 | has-proto: 1.0.1 956 | has-symbols: 1.0.3 957 | internal-slot: 1.0.5 958 | iterator.prototype: 1.1.0 959 | safe-array-concat: 1.0.0 960 | dev: false 961 | 962 | /es-set-tostringtag/2.0.1: 963 | resolution: {integrity: sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==} 964 | engines: {node: '>= 0.4'} 965 | dependencies: 966 | get-intrinsic: 1.2.1 967 | has: 1.0.3 968 | has-tostringtag: 1.0.0 969 | dev: false 970 | 971 | /es-shim-unscopables/1.0.0: 972 | resolution: {integrity: sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==} 973 | dependencies: 974 | has: 1.0.3 975 | dev: false 976 | 977 | /es-to-primitive/1.2.1: 978 | resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} 979 | engines: {node: '>= 0.4'} 980 | dependencies: 981 | is-callable: 1.2.7 982 | is-date-object: 1.0.5 983 | is-symbol: 1.0.4 984 | dev: false 985 | 986 | /escalade/3.1.1: 987 | resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} 988 | engines: {node: '>=6'} 989 | dev: false 990 | 991 | /escape-string-regexp/4.0.0: 992 | resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} 993 | engines: {node: '>=10'} 994 | dev: false 995 | 996 | /eslint-config-next/13.4.19_qj3u6ezxe2airdzjq3nyoxe24m: 997 | resolution: {integrity: sha512-WE8367sqMnjhWHvR5OivmfwENRQ1ixfNE9hZwQqNCsd+iM3KnuMc1V8Pt6ytgjxjf23D+xbesADv9x3xaKfT3g==} 998 | peerDependencies: 999 | eslint: ^7.23.0 || ^8.0.0 1000 | typescript: '>=3.3.1' 1001 | peerDependenciesMeta: 1002 | typescript: 1003 | optional: true 1004 | dependencies: 1005 | '@next/eslint-plugin-next': 13.4.19 1006 | '@rushstack/eslint-patch': 1.3.3 1007 | '@typescript-eslint/parser': 6.4.1_qj3u6ezxe2airdzjq3nyoxe24m 1008 | eslint: 8.47.0 1009 | eslint-import-resolver-node: 0.3.9 1010 | eslint-import-resolver-typescript: 3.6.0_vhuu6v3g26guwjsq5tcwxk2egm 1011 | eslint-plugin-import: 2.28.1_m3hbio6ehtrdclay2uuuyf54zm 1012 | eslint-plugin-jsx-a11y: 6.7.1_eslint@8.47.0 1013 | eslint-plugin-react: 7.33.2_eslint@8.47.0 1014 | eslint-plugin-react-hooks: 4.6.0_eslint@8.47.0 1015 | typescript: 5.1.6 1016 | transitivePeerDependencies: 1017 | - eslint-import-resolver-webpack 1018 | - supports-color 1019 | dev: false 1020 | 1021 | /eslint-import-resolver-node/0.3.9: 1022 | resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} 1023 | dependencies: 1024 | debug: 3.2.7 1025 | is-core-module: 2.13.0 1026 | resolve: 1.22.4 1027 | transitivePeerDependencies: 1028 | - supports-color 1029 | dev: false 1030 | 1031 | /eslint-import-resolver-typescript/3.6.0_vhuu6v3g26guwjsq5tcwxk2egm: 1032 | resolution: {integrity: sha512-QTHR9ddNnn35RTxlaEnx2gCxqFlF2SEN0SE2d17SqwyM7YOSI2GHWRYp5BiRkObTUNYPupC/3Fq2a0PpT+EKpg==} 1033 | engines: {node: ^14.18.0 || >=16.0.0} 1034 | peerDependencies: 1035 | eslint: '*' 1036 | eslint-plugin-import: '*' 1037 | dependencies: 1038 | debug: 4.3.4 1039 | enhanced-resolve: 5.15.0 1040 | eslint: 8.47.0 1041 | eslint-module-utils: 2.8.0_7hffknhhqv4r5ul56jarvzs3vm 1042 | eslint-plugin-import: 2.28.1_m3hbio6ehtrdclay2uuuyf54zm 1043 | fast-glob: 3.3.1 1044 | get-tsconfig: 4.7.0 1045 | is-core-module: 2.13.0 1046 | is-glob: 4.0.3 1047 | transitivePeerDependencies: 1048 | - '@typescript-eslint/parser' 1049 | - eslint-import-resolver-node 1050 | - eslint-import-resolver-webpack 1051 | - supports-color 1052 | dev: false 1053 | 1054 | /eslint-module-utils/2.8.0_7hffknhhqv4r5ul56jarvzs3vm: 1055 | resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} 1056 | engines: {node: '>=4'} 1057 | peerDependencies: 1058 | '@typescript-eslint/parser': '*' 1059 | eslint: '*' 1060 | eslint-import-resolver-node: '*' 1061 | eslint-import-resolver-typescript: '*' 1062 | eslint-import-resolver-webpack: '*' 1063 | peerDependenciesMeta: 1064 | '@typescript-eslint/parser': 1065 | optional: true 1066 | eslint: 1067 | optional: true 1068 | eslint-import-resolver-node: 1069 | optional: true 1070 | eslint-import-resolver-typescript: 1071 | optional: true 1072 | eslint-import-resolver-webpack: 1073 | optional: true 1074 | dependencies: 1075 | '@typescript-eslint/parser': 6.4.1_qj3u6ezxe2airdzjq3nyoxe24m 1076 | debug: 3.2.7 1077 | eslint: 8.47.0 1078 | eslint-import-resolver-node: 0.3.9 1079 | eslint-import-resolver-typescript: 3.6.0_vhuu6v3g26guwjsq5tcwxk2egm 1080 | transitivePeerDependencies: 1081 | - supports-color 1082 | dev: false 1083 | 1084 | /eslint-plugin-import/2.28.1_m3hbio6ehtrdclay2uuuyf54zm: 1085 | resolution: {integrity: sha512-9I9hFlITvOV55alzoKBI+K9q74kv0iKMeY6av5+umsNwayt59fz692daGyjR+oStBQgx6nwR9rXldDev3Clw+A==} 1086 | engines: {node: '>=4'} 1087 | peerDependencies: 1088 | '@typescript-eslint/parser': '*' 1089 | eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 1090 | peerDependenciesMeta: 1091 | '@typescript-eslint/parser': 1092 | optional: true 1093 | dependencies: 1094 | '@typescript-eslint/parser': 6.4.1_qj3u6ezxe2airdzjq3nyoxe24m 1095 | array-includes: 3.1.6 1096 | array.prototype.findlastindex: 1.2.2 1097 | array.prototype.flat: 1.3.1 1098 | array.prototype.flatmap: 1.3.1 1099 | debug: 3.2.7 1100 | doctrine: 2.1.0 1101 | eslint: 8.47.0 1102 | eslint-import-resolver-node: 0.3.9 1103 | eslint-module-utils: 2.8.0_7hffknhhqv4r5ul56jarvzs3vm 1104 | has: 1.0.3 1105 | is-core-module: 2.13.0 1106 | is-glob: 4.0.3 1107 | minimatch: 3.1.2 1108 | object.fromentries: 2.0.6 1109 | object.groupby: 1.0.0 1110 | object.values: 1.1.6 1111 | semver: 6.3.1 1112 | tsconfig-paths: 3.14.2 1113 | transitivePeerDependencies: 1114 | - eslint-import-resolver-typescript 1115 | - eslint-import-resolver-webpack 1116 | - supports-color 1117 | dev: false 1118 | 1119 | /eslint-plugin-jsx-a11y/6.7.1_eslint@8.47.0: 1120 | resolution: {integrity: sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA==} 1121 | engines: {node: '>=4.0'} 1122 | peerDependencies: 1123 | eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 1124 | dependencies: 1125 | '@babel/runtime': 7.22.10 1126 | aria-query: 5.3.0 1127 | array-includes: 3.1.6 1128 | array.prototype.flatmap: 1.3.1 1129 | ast-types-flow: 0.0.7 1130 | axe-core: 4.7.2 1131 | axobject-query: 3.2.1 1132 | damerau-levenshtein: 1.0.8 1133 | emoji-regex: 9.2.2 1134 | eslint: 8.47.0 1135 | has: 1.0.3 1136 | jsx-ast-utils: 3.3.5 1137 | language-tags: 1.0.5 1138 | minimatch: 3.1.2 1139 | object.entries: 1.1.6 1140 | object.fromentries: 2.0.6 1141 | semver: 6.3.1 1142 | dev: false 1143 | 1144 | /eslint-plugin-react-hooks/4.6.0_eslint@8.47.0: 1145 | resolution: {integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==} 1146 | engines: {node: '>=10'} 1147 | peerDependencies: 1148 | eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 1149 | dependencies: 1150 | eslint: 8.47.0 1151 | dev: false 1152 | 1153 | /eslint-plugin-react/7.33.2_eslint@8.47.0: 1154 | resolution: {integrity: sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==} 1155 | engines: {node: '>=4'} 1156 | peerDependencies: 1157 | eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 1158 | dependencies: 1159 | array-includes: 3.1.6 1160 | array.prototype.flatmap: 1.3.1 1161 | array.prototype.tosorted: 1.1.1 1162 | doctrine: 2.1.0 1163 | es-iterator-helpers: 1.0.13 1164 | eslint: 8.47.0 1165 | estraverse: 5.3.0 1166 | jsx-ast-utils: 3.3.5 1167 | minimatch: 3.1.2 1168 | object.entries: 1.1.6 1169 | object.fromentries: 2.0.6 1170 | object.hasown: 1.1.2 1171 | object.values: 1.1.6 1172 | prop-types: 15.8.1 1173 | resolve: 2.0.0-next.4 1174 | semver: 6.3.1 1175 | string.prototype.matchall: 4.0.8 1176 | dev: false 1177 | 1178 | /eslint-scope/7.2.2: 1179 | resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} 1180 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1181 | dependencies: 1182 | esrecurse: 4.3.0 1183 | estraverse: 5.3.0 1184 | dev: false 1185 | 1186 | /eslint-visitor-keys/3.4.3: 1187 | resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} 1188 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1189 | dev: false 1190 | 1191 | /eslint/8.47.0: 1192 | resolution: {integrity: sha512-spUQWrdPt+pRVP1TTJLmfRNJJHHZryFmptzcafwSvHsceV81djHOdnEeDmkdotZyLNjDhrOasNK8nikkoG1O8Q==} 1193 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1194 | hasBin: true 1195 | dependencies: 1196 | '@eslint-community/eslint-utils': 4.4.0_eslint@8.47.0 1197 | '@eslint-community/regexpp': 4.7.0 1198 | '@eslint/eslintrc': 2.1.2 1199 | '@eslint/js': 8.47.0 1200 | '@humanwhocodes/config-array': 0.11.10 1201 | '@humanwhocodes/module-importer': 1.0.1 1202 | '@nodelib/fs.walk': 1.2.8 1203 | ajv: 6.12.6 1204 | chalk: 4.1.2 1205 | cross-spawn: 7.0.3 1206 | debug: 4.3.4 1207 | doctrine: 3.0.0 1208 | escape-string-regexp: 4.0.0 1209 | eslint-scope: 7.2.2 1210 | eslint-visitor-keys: 3.4.3 1211 | espree: 9.6.1 1212 | esquery: 1.5.0 1213 | esutils: 2.0.3 1214 | fast-deep-equal: 3.1.3 1215 | file-entry-cache: 6.0.1 1216 | find-up: 5.0.0 1217 | glob-parent: 6.0.2 1218 | globals: 13.21.0 1219 | graphemer: 1.4.0 1220 | ignore: 5.2.4 1221 | imurmurhash: 0.1.4 1222 | is-glob: 4.0.3 1223 | is-path-inside: 3.0.3 1224 | js-yaml: 4.1.0 1225 | json-stable-stringify-without-jsonify: 1.0.1 1226 | levn: 0.4.1 1227 | lodash.merge: 4.6.2 1228 | minimatch: 3.1.2 1229 | natural-compare: 1.4.0 1230 | optionator: 0.9.3 1231 | strip-ansi: 6.0.1 1232 | text-table: 0.2.0 1233 | transitivePeerDependencies: 1234 | - supports-color 1235 | dev: false 1236 | 1237 | /espree/9.6.1: 1238 | resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} 1239 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1240 | dependencies: 1241 | acorn: 8.10.0 1242 | acorn-jsx: 5.3.2_acorn@8.10.0 1243 | eslint-visitor-keys: 3.4.3 1244 | dev: false 1245 | 1246 | /esquery/1.5.0: 1247 | resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} 1248 | engines: {node: '>=0.10'} 1249 | dependencies: 1250 | estraverse: 5.3.0 1251 | dev: false 1252 | 1253 | /esrecurse/4.3.0: 1254 | resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} 1255 | engines: {node: '>=4.0'} 1256 | dependencies: 1257 | estraverse: 5.3.0 1258 | dev: false 1259 | 1260 | /estraverse/5.3.0: 1261 | resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} 1262 | engines: {node: '>=4.0'} 1263 | dev: false 1264 | 1265 | /esutils/2.0.3: 1266 | resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} 1267 | engines: {node: '>=0.10.0'} 1268 | dev: false 1269 | 1270 | /fast-deep-equal/3.1.3: 1271 | resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} 1272 | dev: false 1273 | 1274 | /fast-glob/3.3.1: 1275 | resolution: {integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==} 1276 | engines: {node: '>=8.6.0'} 1277 | dependencies: 1278 | '@nodelib/fs.stat': 2.0.5 1279 | '@nodelib/fs.walk': 1.2.8 1280 | glob-parent: 5.1.2 1281 | merge2: 1.4.1 1282 | micromatch: 4.0.5 1283 | dev: false 1284 | 1285 | /fast-json-stable-stringify/2.1.0: 1286 | resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} 1287 | dev: false 1288 | 1289 | /fast-levenshtein/2.0.6: 1290 | resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} 1291 | dev: false 1292 | 1293 | /fastq/1.15.0: 1294 | resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} 1295 | dependencies: 1296 | reusify: 1.0.4 1297 | dev: false 1298 | 1299 | /file-entry-cache/6.0.1: 1300 | resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} 1301 | engines: {node: ^10.12.0 || >=12.0.0} 1302 | dependencies: 1303 | flat-cache: 3.0.4 1304 | dev: false 1305 | 1306 | /fill-range/7.0.1: 1307 | resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} 1308 | engines: {node: '>=8'} 1309 | dependencies: 1310 | to-regex-range: 5.0.1 1311 | dev: false 1312 | 1313 | /find-up/5.0.0: 1314 | resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} 1315 | engines: {node: '>=10'} 1316 | dependencies: 1317 | locate-path: 6.0.0 1318 | path-exists: 4.0.0 1319 | dev: false 1320 | 1321 | /flat-cache/3.0.4: 1322 | resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==} 1323 | engines: {node: ^10.12.0 || >=12.0.0} 1324 | dependencies: 1325 | flatted: 3.2.7 1326 | rimraf: 3.0.2 1327 | dev: false 1328 | 1329 | /flatted/3.2.7: 1330 | resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==} 1331 | dev: false 1332 | 1333 | /for-each/0.3.3: 1334 | resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} 1335 | dependencies: 1336 | is-callable: 1.2.7 1337 | dev: false 1338 | 1339 | /fraction.js/4.2.1: 1340 | resolution: {integrity: sha512-/KxoyCnPM0GwYI4NN0Iag38Tqt+od3/mLuguepLgCAKPn0ZhC544nssAW0tG2/00zXEYl9W+7hwAIpLHo6Oc7Q==} 1341 | dev: false 1342 | 1343 | /fs.realpath/1.0.0: 1344 | resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} 1345 | dev: false 1346 | 1347 | /fsevents/2.3.3: 1348 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} 1349 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 1350 | os: [darwin] 1351 | requiresBuild: true 1352 | dev: false 1353 | optional: true 1354 | 1355 | /function-bind/1.1.1: 1356 | resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} 1357 | dev: false 1358 | 1359 | /function.prototype.name/1.1.5: 1360 | resolution: {integrity: sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==} 1361 | engines: {node: '>= 0.4'} 1362 | dependencies: 1363 | call-bind: 1.0.2 1364 | define-properties: 1.2.0 1365 | es-abstract: 1.22.1 1366 | functions-have-names: 1.2.3 1367 | dev: false 1368 | 1369 | /functions-have-names/1.2.3: 1370 | resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} 1371 | dev: false 1372 | 1373 | /get-intrinsic/1.2.1: 1374 | resolution: {integrity: sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==} 1375 | dependencies: 1376 | function-bind: 1.1.1 1377 | has: 1.0.3 1378 | has-proto: 1.0.1 1379 | has-symbols: 1.0.3 1380 | dev: false 1381 | 1382 | /get-symbol-description/1.0.0: 1383 | resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} 1384 | engines: {node: '>= 0.4'} 1385 | dependencies: 1386 | call-bind: 1.0.2 1387 | get-intrinsic: 1.2.1 1388 | dev: false 1389 | 1390 | /get-tsconfig/4.7.0: 1391 | resolution: {integrity: sha512-pmjiZ7xtB8URYm74PlGJozDNyhvsVLUcpBa8DZBG3bWHwaHa9bPiRpiSfovw+fjhwONSCWKRyk+JQHEGZmMrzw==} 1392 | dependencies: 1393 | resolve-pkg-maps: 1.0.0 1394 | dev: false 1395 | 1396 | /glob-parent/5.1.2: 1397 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 1398 | engines: {node: '>= 6'} 1399 | dependencies: 1400 | is-glob: 4.0.3 1401 | dev: false 1402 | 1403 | /glob-parent/6.0.2: 1404 | resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} 1405 | engines: {node: '>=10.13.0'} 1406 | dependencies: 1407 | is-glob: 4.0.3 1408 | dev: false 1409 | 1410 | /glob-to-regexp/0.4.1: 1411 | resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} 1412 | dev: false 1413 | 1414 | /glob/7.1.6: 1415 | resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==} 1416 | dependencies: 1417 | fs.realpath: 1.0.0 1418 | inflight: 1.0.6 1419 | inherits: 2.0.4 1420 | minimatch: 3.1.2 1421 | once: 1.4.0 1422 | path-is-absolute: 1.0.1 1423 | dev: false 1424 | 1425 | /glob/7.1.7: 1426 | resolution: {integrity: sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==} 1427 | dependencies: 1428 | fs.realpath: 1.0.0 1429 | inflight: 1.0.6 1430 | inherits: 2.0.4 1431 | minimatch: 3.1.2 1432 | once: 1.4.0 1433 | path-is-absolute: 1.0.1 1434 | dev: false 1435 | 1436 | /glob/7.2.3: 1437 | resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} 1438 | dependencies: 1439 | fs.realpath: 1.0.0 1440 | inflight: 1.0.6 1441 | inherits: 2.0.4 1442 | minimatch: 3.1.2 1443 | once: 1.4.0 1444 | path-is-absolute: 1.0.1 1445 | dev: false 1446 | 1447 | /globals/13.21.0: 1448 | resolution: {integrity: sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==} 1449 | engines: {node: '>=8'} 1450 | dependencies: 1451 | type-fest: 0.20.2 1452 | dev: false 1453 | 1454 | /globalthis/1.0.3: 1455 | resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} 1456 | engines: {node: '>= 0.4'} 1457 | dependencies: 1458 | define-properties: 1.2.0 1459 | dev: false 1460 | 1461 | /globby/11.1.0: 1462 | resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} 1463 | engines: {node: '>=10'} 1464 | dependencies: 1465 | array-union: 2.1.0 1466 | dir-glob: 3.0.1 1467 | fast-glob: 3.3.1 1468 | ignore: 5.2.4 1469 | merge2: 1.4.1 1470 | slash: 3.0.0 1471 | dev: false 1472 | 1473 | /gopd/1.0.1: 1474 | resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} 1475 | dependencies: 1476 | get-intrinsic: 1.2.1 1477 | dev: false 1478 | 1479 | /graceful-fs/4.2.11: 1480 | resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} 1481 | dev: false 1482 | 1483 | /graphemer/1.4.0: 1484 | resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} 1485 | dev: false 1486 | 1487 | /has-bigints/1.0.2: 1488 | resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} 1489 | dev: false 1490 | 1491 | /has-flag/4.0.0: 1492 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 1493 | engines: {node: '>=8'} 1494 | dev: false 1495 | 1496 | /has-property-descriptors/1.0.0: 1497 | resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==} 1498 | dependencies: 1499 | get-intrinsic: 1.2.1 1500 | dev: false 1501 | 1502 | /has-proto/1.0.1: 1503 | resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} 1504 | engines: {node: '>= 0.4'} 1505 | dev: false 1506 | 1507 | /has-symbols/1.0.3: 1508 | resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} 1509 | engines: {node: '>= 0.4'} 1510 | dev: false 1511 | 1512 | /has-tostringtag/1.0.0: 1513 | resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} 1514 | engines: {node: '>= 0.4'} 1515 | dependencies: 1516 | has-symbols: 1.0.3 1517 | dev: false 1518 | 1519 | /has/1.0.3: 1520 | resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} 1521 | engines: {node: '>= 0.4.0'} 1522 | dependencies: 1523 | function-bind: 1.1.1 1524 | dev: false 1525 | 1526 | /ignore/5.2.4: 1527 | resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} 1528 | engines: {node: '>= 4'} 1529 | dev: false 1530 | 1531 | /import-fresh/3.3.0: 1532 | resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} 1533 | engines: {node: '>=6'} 1534 | dependencies: 1535 | parent-module: 1.0.1 1536 | resolve-from: 4.0.0 1537 | dev: false 1538 | 1539 | /imurmurhash/0.1.4: 1540 | resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} 1541 | engines: {node: '>=0.8.19'} 1542 | dev: false 1543 | 1544 | /inflight/1.0.6: 1545 | resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} 1546 | dependencies: 1547 | once: 1.4.0 1548 | wrappy: 1.0.2 1549 | dev: false 1550 | 1551 | /inherits/2.0.4: 1552 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} 1553 | dev: false 1554 | 1555 | /internal-slot/1.0.5: 1556 | resolution: {integrity: sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==} 1557 | engines: {node: '>= 0.4'} 1558 | dependencies: 1559 | get-intrinsic: 1.2.1 1560 | has: 1.0.3 1561 | side-channel: 1.0.4 1562 | dev: false 1563 | 1564 | /is-array-buffer/3.0.2: 1565 | resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==} 1566 | dependencies: 1567 | call-bind: 1.0.2 1568 | get-intrinsic: 1.2.1 1569 | is-typed-array: 1.1.12 1570 | dev: false 1571 | 1572 | /is-async-function/2.0.0: 1573 | resolution: {integrity: sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==} 1574 | engines: {node: '>= 0.4'} 1575 | dependencies: 1576 | has-tostringtag: 1.0.0 1577 | dev: false 1578 | 1579 | /is-bigint/1.0.4: 1580 | resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} 1581 | dependencies: 1582 | has-bigints: 1.0.2 1583 | dev: false 1584 | 1585 | /is-binary-path/2.1.0: 1586 | resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} 1587 | engines: {node: '>=8'} 1588 | dependencies: 1589 | binary-extensions: 2.2.0 1590 | dev: false 1591 | 1592 | /is-boolean-object/1.1.2: 1593 | resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} 1594 | engines: {node: '>= 0.4'} 1595 | dependencies: 1596 | call-bind: 1.0.2 1597 | has-tostringtag: 1.0.0 1598 | dev: false 1599 | 1600 | /is-callable/1.2.7: 1601 | resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} 1602 | engines: {node: '>= 0.4'} 1603 | dev: false 1604 | 1605 | /is-core-module/2.13.0: 1606 | resolution: {integrity: sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==} 1607 | dependencies: 1608 | has: 1.0.3 1609 | dev: false 1610 | 1611 | /is-date-object/1.0.5: 1612 | resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} 1613 | engines: {node: '>= 0.4'} 1614 | dependencies: 1615 | has-tostringtag: 1.0.0 1616 | dev: false 1617 | 1618 | /is-extglob/2.1.1: 1619 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 1620 | engines: {node: '>=0.10.0'} 1621 | dev: false 1622 | 1623 | /is-finalizationregistry/1.0.2: 1624 | resolution: {integrity: sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==} 1625 | dependencies: 1626 | call-bind: 1.0.2 1627 | dev: false 1628 | 1629 | /is-generator-function/1.0.10: 1630 | resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} 1631 | engines: {node: '>= 0.4'} 1632 | dependencies: 1633 | has-tostringtag: 1.0.0 1634 | dev: false 1635 | 1636 | /is-glob/4.0.3: 1637 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 1638 | engines: {node: '>=0.10.0'} 1639 | dependencies: 1640 | is-extglob: 2.1.1 1641 | dev: false 1642 | 1643 | /is-map/2.0.2: 1644 | resolution: {integrity: sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==} 1645 | dev: false 1646 | 1647 | /is-negative-zero/2.0.2: 1648 | resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} 1649 | engines: {node: '>= 0.4'} 1650 | dev: false 1651 | 1652 | /is-number-object/1.0.7: 1653 | resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} 1654 | engines: {node: '>= 0.4'} 1655 | dependencies: 1656 | has-tostringtag: 1.0.0 1657 | dev: false 1658 | 1659 | /is-number/7.0.0: 1660 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 1661 | engines: {node: '>=0.12.0'} 1662 | dev: false 1663 | 1664 | /is-path-inside/3.0.3: 1665 | resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} 1666 | engines: {node: '>=8'} 1667 | dev: false 1668 | 1669 | /is-regex/1.1.4: 1670 | resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} 1671 | engines: {node: '>= 0.4'} 1672 | dependencies: 1673 | call-bind: 1.0.2 1674 | has-tostringtag: 1.0.0 1675 | dev: false 1676 | 1677 | /is-set/2.0.2: 1678 | resolution: {integrity: sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==} 1679 | dev: false 1680 | 1681 | /is-shared-array-buffer/1.0.2: 1682 | resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} 1683 | dependencies: 1684 | call-bind: 1.0.2 1685 | dev: false 1686 | 1687 | /is-string/1.0.7: 1688 | resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} 1689 | engines: {node: '>= 0.4'} 1690 | dependencies: 1691 | has-tostringtag: 1.0.0 1692 | dev: false 1693 | 1694 | /is-symbol/1.0.4: 1695 | resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} 1696 | engines: {node: '>= 0.4'} 1697 | dependencies: 1698 | has-symbols: 1.0.3 1699 | dev: false 1700 | 1701 | /is-typed-array/1.1.12: 1702 | resolution: {integrity: sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==} 1703 | engines: {node: '>= 0.4'} 1704 | dependencies: 1705 | which-typed-array: 1.1.11 1706 | dev: false 1707 | 1708 | /is-weakmap/2.0.1: 1709 | resolution: {integrity: sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==} 1710 | dev: false 1711 | 1712 | /is-weakref/1.0.2: 1713 | resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} 1714 | dependencies: 1715 | call-bind: 1.0.2 1716 | dev: false 1717 | 1718 | /is-weakset/2.0.2: 1719 | resolution: {integrity: sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==} 1720 | dependencies: 1721 | call-bind: 1.0.2 1722 | get-intrinsic: 1.2.1 1723 | dev: false 1724 | 1725 | /isarray/2.0.5: 1726 | resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} 1727 | dev: false 1728 | 1729 | /isexe/2.0.0: 1730 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 1731 | dev: false 1732 | 1733 | /iterator.prototype/1.1.0: 1734 | resolution: {integrity: sha512-rjuhAk1AJ1fssphHD0IFV6TWL40CwRZ53FrztKx43yk2v6rguBYsY4Bj1VU4HmoMmKwZUlx7mfnhDf9cOp4YTw==} 1735 | dependencies: 1736 | define-properties: 1.2.0 1737 | get-intrinsic: 1.2.1 1738 | has-symbols: 1.0.3 1739 | has-tostringtag: 1.0.0 1740 | reflect.getprototypeof: 1.0.3 1741 | dev: false 1742 | 1743 | /jiti/1.19.3: 1744 | resolution: {integrity: sha512-5eEbBDQT/jF1xg6l36P+mWGGoH9Spuy0PCdSr2dtWRDGC6ph/w9ZCL4lmESW8f8F7MwT3XKescfP0wnZWAKL9w==} 1745 | hasBin: true 1746 | dev: false 1747 | 1748 | /js-tokens/4.0.0: 1749 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} 1750 | dev: false 1751 | 1752 | /js-yaml/4.1.0: 1753 | resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} 1754 | hasBin: true 1755 | dependencies: 1756 | argparse: 2.0.1 1757 | dev: false 1758 | 1759 | /json-schema-traverse/0.4.1: 1760 | resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} 1761 | dev: false 1762 | 1763 | /json-stable-stringify-without-jsonify/1.0.1: 1764 | resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} 1765 | dev: false 1766 | 1767 | /json5/1.0.2: 1768 | resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} 1769 | hasBin: true 1770 | dependencies: 1771 | minimist: 1.2.8 1772 | dev: false 1773 | 1774 | /jsx-ast-utils/3.3.5: 1775 | resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} 1776 | engines: {node: '>=4.0'} 1777 | dependencies: 1778 | array-includes: 3.1.6 1779 | array.prototype.flat: 1.3.1 1780 | object.assign: 4.1.4 1781 | object.values: 1.1.6 1782 | dev: false 1783 | 1784 | /language-subtag-registry/0.3.22: 1785 | resolution: {integrity: sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==} 1786 | dev: false 1787 | 1788 | /language-tags/1.0.5: 1789 | resolution: {integrity: sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==} 1790 | dependencies: 1791 | language-subtag-registry: 0.3.22 1792 | dev: false 1793 | 1794 | /levn/0.4.1: 1795 | resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} 1796 | engines: {node: '>= 0.8.0'} 1797 | dependencies: 1798 | prelude-ls: 1.2.1 1799 | type-check: 0.4.0 1800 | dev: false 1801 | 1802 | /lilconfig/2.1.0: 1803 | resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} 1804 | engines: {node: '>=10'} 1805 | dev: false 1806 | 1807 | /lines-and-columns/1.2.4: 1808 | resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} 1809 | dev: false 1810 | 1811 | /locate-path/6.0.0: 1812 | resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} 1813 | engines: {node: '>=10'} 1814 | dependencies: 1815 | p-locate: 5.0.0 1816 | dev: false 1817 | 1818 | /lodash.merge/4.6.2: 1819 | resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} 1820 | dev: false 1821 | 1822 | /loose-envify/1.4.0: 1823 | resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} 1824 | hasBin: true 1825 | dependencies: 1826 | js-tokens: 4.0.0 1827 | dev: false 1828 | 1829 | /lru-cache/6.0.0: 1830 | resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} 1831 | engines: {node: '>=10'} 1832 | dependencies: 1833 | yallist: 4.0.0 1834 | dev: false 1835 | 1836 | /lucide-react/0.268.0_react@18.2.0: 1837 | resolution: {integrity: sha512-XP/xY3ASJAViqNqVnDRcEfdxfRB7uNST8sqTLwZhL983ikmHMQ7qQak7ZxrnXOVhB3QDBawdr3ANq0P+iWHP/g==} 1838 | peerDependencies: 1839 | react: ^16.5.1 || ^17.0.0 || ^18.0.0 1840 | dependencies: 1841 | react: 18.2.0 1842 | dev: false 1843 | 1844 | /merge2/1.4.1: 1845 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} 1846 | engines: {node: '>= 8'} 1847 | dev: false 1848 | 1849 | /micromatch/4.0.5: 1850 | resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} 1851 | engines: {node: '>=8.6'} 1852 | dependencies: 1853 | braces: 3.0.2 1854 | picomatch: 2.3.1 1855 | dev: false 1856 | 1857 | /minimatch/3.1.2: 1858 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} 1859 | dependencies: 1860 | brace-expansion: 1.1.11 1861 | dev: false 1862 | 1863 | /minimist/1.2.8: 1864 | resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} 1865 | dev: false 1866 | 1867 | /ms/2.1.2: 1868 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} 1869 | dev: false 1870 | 1871 | /ms/2.1.3: 1872 | resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} 1873 | dev: false 1874 | 1875 | /mz/2.7.0: 1876 | resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} 1877 | dependencies: 1878 | any-promise: 1.3.0 1879 | object-assign: 4.1.1 1880 | thenify-all: 1.6.0 1881 | dev: false 1882 | 1883 | /nanoid/3.3.6: 1884 | resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==} 1885 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 1886 | hasBin: true 1887 | dev: false 1888 | 1889 | /natural-compare/1.4.0: 1890 | resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} 1891 | dev: false 1892 | 1893 | /next/13.4.19_biqbaboplfbrettd7655fr4n2y: 1894 | resolution: {integrity: sha512-HuPSzzAbJ1T4BD8e0bs6B9C1kWQ6gv8ykZoRWs5AQoiIuqbGHHdQO7Ljuvg05Q0Z24E2ABozHe6FxDvI6HfyAw==} 1895 | engines: {node: '>=16.8.0'} 1896 | hasBin: true 1897 | peerDependencies: 1898 | '@opentelemetry/api': ^1.1.0 1899 | react: ^18.2.0 1900 | react-dom: ^18.2.0 1901 | sass: ^1.3.0 1902 | peerDependenciesMeta: 1903 | '@opentelemetry/api': 1904 | optional: true 1905 | sass: 1906 | optional: true 1907 | dependencies: 1908 | '@next/env': 13.4.19 1909 | '@swc/helpers': 0.5.1 1910 | busboy: 1.6.0 1911 | caniuse-lite: 1.0.30001522 1912 | postcss: 8.4.14 1913 | react: 18.2.0 1914 | react-dom: 18.2.0_react@18.2.0 1915 | styled-jsx: 5.1.1_react@18.2.0 1916 | watchpack: 2.4.0 1917 | zod: 3.21.4 1918 | optionalDependencies: 1919 | '@next/swc-darwin-arm64': 13.4.19 1920 | '@next/swc-darwin-x64': 13.4.19 1921 | '@next/swc-linux-arm64-gnu': 13.4.19 1922 | '@next/swc-linux-arm64-musl': 13.4.19 1923 | '@next/swc-linux-x64-gnu': 13.4.19 1924 | '@next/swc-linux-x64-musl': 13.4.19 1925 | '@next/swc-win32-arm64-msvc': 13.4.19 1926 | '@next/swc-win32-ia32-msvc': 13.4.19 1927 | '@next/swc-win32-x64-msvc': 13.4.19 1928 | transitivePeerDependencies: 1929 | - '@babel/core' 1930 | - babel-plugin-macros 1931 | dev: false 1932 | 1933 | /node-releases/2.0.13: 1934 | resolution: {integrity: sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==} 1935 | dev: false 1936 | 1937 | /normalize-path/3.0.0: 1938 | resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} 1939 | engines: {node: '>=0.10.0'} 1940 | dev: false 1941 | 1942 | /normalize-range/0.1.2: 1943 | resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} 1944 | engines: {node: '>=0.10.0'} 1945 | dev: false 1946 | 1947 | /object-assign/4.1.1: 1948 | resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} 1949 | engines: {node: '>=0.10.0'} 1950 | dev: false 1951 | 1952 | /object-hash/3.0.0: 1953 | resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} 1954 | engines: {node: '>= 6'} 1955 | dev: false 1956 | 1957 | /object-inspect/1.12.3: 1958 | resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==} 1959 | dev: false 1960 | 1961 | /object-keys/1.1.1: 1962 | resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} 1963 | engines: {node: '>= 0.4'} 1964 | dev: false 1965 | 1966 | /object.assign/4.1.4: 1967 | resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==} 1968 | engines: {node: '>= 0.4'} 1969 | dependencies: 1970 | call-bind: 1.0.2 1971 | define-properties: 1.2.0 1972 | has-symbols: 1.0.3 1973 | object-keys: 1.1.1 1974 | dev: false 1975 | 1976 | /object.entries/1.1.6: 1977 | resolution: {integrity: sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==} 1978 | engines: {node: '>= 0.4'} 1979 | dependencies: 1980 | call-bind: 1.0.2 1981 | define-properties: 1.2.0 1982 | es-abstract: 1.22.1 1983 | dev: false 1984 | 1985 | /object.fromentries/2.0.6: 1986 | resolution: {integrity: sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==} 1987 | engines: {node: '>= 0.4'} 1988 | dependencies: 1989 | call-bind: 1.0.2 1990 | define-properties: 1.2.0 1991 | es-abstract: 1.22.1 1992 | dev: false 1993 | 1994 | /object.groupby/1.0.0: 1995 | resolution: {integrity: sha512-70MWG6NfRH9GnbZOikuhPPYzpUpof9iW2J9E4dW7FXTqPNb6rllE6u39SKwwiNh8lCwX3DDb5OgcKGiEBrTTyw==} 1996 | dependencies: 1997 | call-bind: 1.0.2 1998 | define-properties: 1.2.0 1999 | es-abstract: 1.22.1 2000 | get-intrinsic: 1.2.1 2001 | dev: false 2002 | 2003 | /object.hasown/1.1.2: 2004 | resolution: {integrity: sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==} 2005 | dependencies: 2006 | define-properties: 1.2.0 2007 | es-abstract: 1.22.1 2008 | dev: false 2009 | 2010 | /object.values/1.1.6: 2011 | resolution: {integrity: sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==} 2012 | engines: {node: '>= 0.4'} 2013 | dependencies: 2014 | call-bind: 1.0.2 2015 | define-properties: 1.2.0 2016 | es-abstract: 1.22.1 2017 | dev: false 2018 | 2019 | /once/1.4.0: 2020 | resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} 2021 | dependencies: 2022 | wrappy: 1.0.2 2023 | dev: false 2024 | 2025 | /optionator/0.9.3: 2026 | resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} 2027 | engines: {node: '>= 0.8.0'} 2028 | dependencies: 2029 | '@aashutoshrathi/word-wrap': 1.2.6 2030 | deep-is: 0.1.4 2031 | fast-levenshtein: 2.0.6 2032 | levn: 0.4.1 2033 | prelude-ls: 1.2.1 2034 | type-check: 0.4.0 2035 | dev: false 2036 | 2037 | /p-limit/3.1.0: 2038 | resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} 2039 | engines: {node: '>=10'} 2040 | dependencies: 2041 | yocto-queue: 0.1.0 2042 | dev: false 2043 | 2044 | /p-locate/5.0.0: 2045 | resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} 2046 | engines: {node: '>=10'} 2047 | dependencies: 2048 | p-limit: 3.1.0 2049 | dev: false 2050 | 2051 | /parent-module/1.0.1: 2052 | resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} 2053 | engines: {node: '>=6'} 2054 | dependencies: 2055 | callsites: 3.1.0 2056 | dev: false 2057 | 2058 | /path-exists/4.0.0: 2059 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} 2060 | engines: {node: '>=8'} 2061 | dev: false 2062 | 2063 | /path-is-absolute/1.0.1: 2064 | resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} 2065 | engines: {node: '>=0.10.0'} 2066 | dev: false 2067 | 2068 | /path-key/3.1.1: 2069 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 2070 | engines: {node: '>=8'} 2071 | dev: false 2072 | 2073 | /path-parse/1.0.7: 2074 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} 2075 | dev: false 2076 | 2077 | /path-type/4.0.0: 2078 | resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} 2079 | engines: {node: '>=8'} 2080 | dev: false 2081 | 2082 | /picocolors/1.0.0: 2083 | resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} 2084 | dev: false 2085 | 2086 | /picomatch/2.3.1: 2087 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 2088 | engines: {node: '>=8.6'} 2089 | dev: false 2090 | 2091 | /pify/2.3.0: 2092 | resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} 2093 | engines: {node: '>=0.10.0'} 2094 | dev: false 2095 | 2096 | /pirates/4.0.6: 2097 | resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} 2098 | engines: {node: '>= 6'} 2099 | dev: false 2100 | 2101 | /postcss-import/15.1.0_postcss@8.4.28: 2102 | resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} 2103 | engines: {node: '>=14.0.0'} 2104 | peerDependencies: 2105 | postcss: ^8.0.0 2106 | dependencies: 2107 | postcss: 8.4.28 2108 | postcss-value-parser: 4.2.0 2109 | read-cache: 1.0.0 2110 | resolve: 1.22.4 2111 | dev: false 2112 | 2113 | /postcss-js/4.0.1_postcss@8.4.28: 2114 | resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} 2115 | engines: {node: ^12 || ^14 || >= 16} 2116 | peerDependencies: 2117 | postcss: ^8.4.21 2118 | dependencies: 2119 | camelcase-css: 2.0.1 2120 | postcss: 8.4.28 2121 | dev: false 2122 | 2123 | /postcss-load-config/4.0.1_postcss@8.4.28: 2124 | resolution: {integrity: sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==} 2125 | engines: {node: '>= 14'} 2126 | peerDependencies: 2127 | postcss: '>=8.0.9' 2128 | ts-node: '>=9.0.0' 2129 | peerDependenciesMeta: 2130 | postcss: 2131 | optional: true 2132 | ts-node: 2133 | optional: true 2134 | dependencies: 2135 | lilconfig: 2.1.0 2136 | postcss: 8.4.28 2137 | yaml: 2.3.1 2138 | dev: false 2139 | 2140 | /postcss-nested/6.0.1_postcss@8.4.28: 2141 | resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==} 2142 | engines: {node: '>=12.0'} 2143 | peerDependencies: 2144 | postcss: ^8.2.14 2145 | dependencies: 2146 | postcss: 8.4.28 2147 | postcss-selector-parser: 6.0.13 2148 | dev: false 2149 | 2150 | /postcss-selector-parser/6.0.13: 2151 | resolution: {integrity: sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==} 2152 | engines: {node: '>=4'} 2153 | dependencies: 2154 | cssesc: 3.0.0 2155 | util-deprecate: 1.0.2 2156 | dev: false 2157 | 2158 | /postcss-value-parser/4.2.0: 2159 | resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} 2160 | dev: false 2161 | 2162 | /postcss/8.4.14: 2163 | resolution: {integrity: sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==} 2164 | engines: {node: ^10 || ^12 || >=14} 2165 | dependencies: 2166 | nanoid: 3.3.6 2167 | picocolors: 1.0.0 2168 | source-map-js: 1.0.2 2169 | dev: false 2170 | 2171 | /postcss/8.4.28: 2172 | resolution: {integrity: sha512-Z7V5j0cq8oEKyejIKfpD8b4eBy9cwW2JWPk0+fB1HOAMsfHbnAXLLS+PfVWlzMSLQaWttKDt607I0XHmpE67Vw==} 2173 | engines: {node: ^10 || ^12 || >=14} 2174 | dependencies: 2175 | nanoid: 3.3.6 2176 | picocolors: 1.0.0 2177 | source-map-js: 1.0.2 2178 | dev: false 2179 | 2180 | /prelude-ls/1.2.1: 2181 | resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} 2182 | engines: {node: '>= 0.8.0'} 2183 | dev: false 2184 | 2185 | /prop-types/15.8.1: 2186 | resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} 2187 | dependencies: 2188 | loose-envify: 1.4.0 2189 | object-assign: 4.1.1 2190 | react-is: 16.13.1 2191 | dev: false 2192 | 2193 | /punycode/2.3.0: 2194 | resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==} 2195 | engines: {node: '>=6'} 2196 | dev: false 2197 | 2198 | /queue-microtask/1.2.3: 2199 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 2200 | dev: false 2201 | 2202 | /react-dom/18.2.0_react@18.2.0: 2203 | resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==} 2204 | peerDependencies: 2205 | react: ^18.2.0 2206 | dependencies: 2207 | loose-envify: 1.4.0 2208 | react: 18.2.0 2209 | scheduler: 0.23.0 2210 | dev: false 2211 | 2212 | /react-hook-form/7.45.4_react@18.2.0: 2213 | resolution: {integrity: sha512-HGDV1JOOBPZj10LB3+OZgfDBTn+IeEsNOKiq/cxbQAIbKaiJUe/KV8DBUzsx0Gx/7IG/orWqRRm736JwOfUSWQ==} 2214 | engines: {node: '>=12.22.0'} 2215 | peerDependencies: 2216 | react: ^16.8.0 || ^17 || ^18 2217 | dependencies: 2218 | react: 18.2.0 2219 | dev: false 2220 | 2221 | /react-is/16.13.1: 2222 | resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} 2223 | dev: false 2224 | 2225 | /react/18.2.0: 2226 | resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} 2227 | engines: {node: '>=0.10.0'} 2228 | dependencies: 2229 | loose-envify: 1.4.0 2230 | dev: false 2231 | 2232 | /read-cache/1.0.0: 2233 | resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} 2234 | dependencies: 2235 | pify: 2.3.0 2236 | dev: false 2237 | 2238 | /readdirp/3.6.0: 2239 | resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} 2240 | engines: {node: '>=8.10.0'} 2241 | dependencies: 2242 | picomatch: 2.3.1 2243 | dev: false 2244 | 2245 | /reflect.getprototypeof/1.0.3: 2246 | resolution: {integrity: sha512-TTAOZpkJ2YLxl7mVHWrNo3iDMEkYlva/kgFcXndqMgbo/AZUmmavEkdXV+hXtE4P8xdyEKRzalaFqZVuwIk/Nw==} 2247 | engines: {node: '>= 0.4'} 2248 | dependencies: 2249 | call-bind: 1.0.2 2250 | define-properties: 1.2.0 2251 | es-abstract: 1.22.1 2252 | get-intrinsic: 1.2.1 2253 | globalthis: 1.0.3 2254 | which-builtin-type: 1.1.3 2255 | dev: false 2256 | 2257 | /regenerator-runtime/0.14.0: 2258 | resolution: {integrity: sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==} 2259 | dev: false 2260 | 2261 | /regexp.prototype.flags/1.5.0: 2262 | resolution: {integrity: sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==} 2263 | engines: {node: '>= 0.4'} 2264 | dependencies: 2265 | call-bind: 1.0.2 2266 | define-properties: 1.2.0 2267 | functions-have-names: 1.2.3 2268 | dev: false 2269 | 2270 | /resolve-from/4.0.0: 2271 | resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} 2272 | engines: {node: '>=4'} 2273 | dev: false 2274 | 2275 | /resolve-pkg-maps/1.0.0: 2276 | resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} 2277 | dev: false 2278 | 2279 | /resolve/1.22.4: 2280 | resolution: {integrity: sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==} 2281 | hasBin: true 2282 | dependencies: 2283 | is-core-module: 2.13.0 2284 | path-parse: 1.0.7 2285 | supports-preserve-symlinks-flag: 1.0.0 2286 | dev: false 2287 | 2288 | /resolve/2.0.0-next.4: 2289 | resolution: {integrity: sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==} 2290 | hasBin: true 2291 | dependencies: 2292 | is-core-module: 2.13.0 2293 | path-parse: 1.0.7 2294 | supports-preserve-symlinks-flag: 1.0.0 2295 | dev: false 2296 | 2297 | /reusify/1.0.4: 2298 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} 2299 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 2300 | dev: false 2301 | 2302 | /rimraf/3.0.2: 2303 | resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} 2304 | hasBin: true 2305 | dependencies: 2306 | glob: 7.2.3 2307 | dev: false 2308 | 2309 | /run-parallel/1.2.0: 2310 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 2311 | dependencies: 2312 | queue-microtask: 1.2.3 2313 | dev: false 2314 | 2315 | /safe-array-concat/1.0.0: 2316 | resolution: {integrity: sha512-9dVEFruWIsnie89yym+xWTAYASdpw3CJV7Li/6zBewGf9z2i1j31rP6jnY0pHEO4QZh6N0K11bFjWmdR8UGdPQ==} 2317 | engines: {node: '>=0.4'} 2318 | dependencies: 2319 | call-bind: 1.0.2 2320 | get-intrinsic: 1.2.1 2321 | has-symbols: 1.0.3 2322 | isarray: 2.0.5 2323 | dev: false 2324 | 2325 | /safe-regex-test/1.0.0: 2326 | resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==} 2327 | dependencies: 2328 | call-bind: 1.0.2 2329 | get-intrinsic: 1.2.1 2330 | is-regex: 1.1.4 2331 | dev: false 2332 | 2333 | /scheduler/0.23.0: 2334 | resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==} 2335 | dependencies: 2336 | loose-envify: 1.4.0 2337 | dev: false 2338 | 2339 | /semver/6.3.1: 2340 | resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} 2341 | hasBin: true 2342 | dev: false 2343 | 2344 | /semver/7.5.4: 2345 | resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} 2346 | engines: {node: '>=10'} 2347 | hasBin: true 2348 | dependencies: 2349 | lru-cache: 6.0.0 2350 | dev: false 2351 | 2352 | /shebang-command/2.0.0: 2353 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 2354 | engines: {node: '>=8'} 2355 | dependencies: 2356 | shebang-regex: 3.0.0 2357 | dev: false 2358 | 2359 | /shebang-regex/3.0.0: 2360 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 2361 | engines: {node: '>=8'} 2362 | dev: false 2363 | 2364 | /side-channel/1.0.4: 2365 | resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} 2366 | dependencies: 2367 | call-bind: 1.0.2 2368 | get-intrinsic: 1.2.1 2369 | object-inspect: 1.12.3 2370 | dev: false 2371 | 2372 | /slash/3.0.0: 2373 | resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} 2374 | engines: {node: '>=8'} 2375 | dev: false 2376 | 2377 | /socket.io-client/4.7.2: 2378 | resolution: {integrity: sha512-vtA0uD4ibrYD793SOIAwlo8cj6haOeMHrGvwPxJsxH7CeIksqJ+3Zc06RvWTIFgiSqx4A3sOnTXpfAEE2Zyz6w==} 2379 | engines: {node: '>=10.0.0'} 2380 | dependencies: 2381 | '@socket.io/component-emitter': 3.1.0 2382 | debug: 4.3.4 2383 | engine.io-client: 6.5.2 2384 | socket.io-parser: 4.2.4 2385 | transitivePeerDependencies: 2386 | - bufferutil 2387 | - supports-color 2388 | - utf-8-validate 2389 | dev: false 2390 | 2391 | /socket.io-parser/4.2.4: 2392 | resolution: {integrity: sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==} 2393 | engines: {node: '>=10.0.0'} 2394 | dependencies: 2395 | '@socket.io/component-emitter': 3.1.0 2396 | debug: 4.3.4 2397 | transitivePeerDependencies: 2398 | - supports-color 2399 | dev: false 2400 | 2401 | /source-map-js/1.0.2: 2402 | resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} 2403 | engines: {node: '>=0.10.0'} 2404 | dev: false 2405 | 2406 | /streamsearch/1.1.0: 2407 | resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} 2408 | engines: {node: '>=10.0.0'} 2409 | dev: false 2410 | 2411 | /string.prototype.matchall/4.0.8: 2412 | resolution: {integrity: sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==} 2413 | dependencies: 2414 | call-bind: 1.0.2 2415 | define-properties: 1.2.0 2416 | es-abstract: 1.22.1 2417 | get-intrinsic: 1.2.1 2418 | has-symbols: 1.0.3 2419 | internal-slot: 1.0.5 2420 | regexp.prototype.flags: 1.5.0 2421 | side-channel: 1.0.4 2422 | dev: false 2423 | 2424 | /string.prototype.trim/1.2.7: 2425 | resolution: {integrity: sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==} 2426 | engines: {node: '>= 0.4'} 2427 | dependencies: 2428 | call-bind: 1.0.2 2429 | define-properties: 1.2.0 2430 | es-abstract: 1.22.1 2431 | dev: false 2432 | 2433 | /string.prototype.trimend/1.0.6: 2434 | resolution: {integrity: sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==} 2435 | dependencies: 2436 | call-bind: 1.0.2 2437 | define-properties: 1.2.0 2438 | es-abstract: 1.22.1 2439 | dev: false 2440 | 2441 | /string.prototype.trimstart/1.0.6: 2442 | resolution: {integrity: sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==} 2443 | dependencies: 2444 | call-bind: 1.0.2 2445 | define-properties: 1.2.0 2446 | es-abstract: 1.22.1 2447 | dev: false 2448 | 2449 | /strip-ansi/6.0.1: 2450 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} 2451 | engines: {node: '>=8'} 2452 | dependencies: 2453 | ansi-regex: 5.0.1 2454 | dev: false 2455 | 2456 | /strip-bom/3.0.0: 2457 | resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} 2458 | engines: {node: '>=4'} 2459 | dev: false 2460 | 2461 | /strip-json-comments/3.1.1: 2462 | resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} 2463 | engines: {node: '>=8'} 2464 | dev: false 2465 | 2466 | /styled-jsx/5.1.1_react@18.2.0: 2467 | resolution: {integrity: sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==} 2468 | engines: {node: '>= 12.0.0'} 2469 | peerDependencies: 2470 | '@babel/core': '*' 2471 | babel-plugin-macros: '*' 2472 | react: '>= 16.8.0 || 17.x.x || ^18.0.0-0' 2473 | peerDependenciesMeta: 2474 | '@babel/core': 2475 | optional: true 2476 | babel-plugin-macros: 2477 | optional: true 2478 | dependencies: 2479 | client-only: 0.0.1 2480 | react: 18.2.0 2481 | dev: false 2482 | 2483 | /sucrase/3.34.0: 2484 | resolution: {integrity: sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==} 2485 | engines: {node: '>=8'} 2486 | hasBin: true 2487 | dependencies: 2488 | '@jridgewell/gen-mapping': 0.3.3 2489 | commander: 4.1.1 2490 | glob: 7.1.6 2491 | lines-and-columns: 1.2.4 2492 | mz: 2.7.0 2493 | pirates: 4.0.6 2494 | ts-interface-checker: 0.1.13 2495 | dev: false 2496 | 2497 | /supports-color/7.2.0: 2498 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 2499 | engines: {node: '>=8'} 2500 | dependencies: 2501 | has-flag: 4.0.0 2502 | dev: false 2503 | 2504 | /supports-preserve-symlinks-flag/1.0.0: 2505 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} 2506 | engines: {node: '>= 0.4'} 2507 | dev: false 2508 | 2509 | /tailwind-merge/1.14.0: 2510 | resolution: {integrity: sha512-3mFKyCo/MBcgyOTlrY8T7odzZFx+w+qKSMAmdFzRvqBfLlSigU6TZnlFHK0lkMwj9Bj8OYU+9yW9lmGuS0QEnQ==} 2511 | dev: false 2512 | 2513 | /tailwindcss-animate/1.0.6_tailwindcss@3.3.3: 2514 | resolution: {integrity: sha512-4WigSGMvbl3gCCact62ZvOngA+PRqhAn7si3TQ3/ZuPuQZcIEtVap+ENSXbzWhpojKB8CpvnIsrwBu8/RnHtuw==} 2515 | peerDependencies: 2516 | tailwindcss: '>=3.0.0 || insiders' 2517 | dependencies: 2518 | tailwindcss: 3.3.3 2519 | dev: false 2520 | 2521 | /tailwindcss/3.3.3: 2522 | resolution: {integrity: sha512-A0KgSkef7eE4Mf+nKJ83i75TMyq8HqY3qmFIJSWy8bNt0v1lG7jUcpGpoTFxAwYcWOphcTBLPPJg+bDfhDf52w==} 2523 | engines: {node: '>=14.0.0'} 2524 | hasBin: true 2525 | dependencies: 2526 | '@alloc/quick-lru': 5.2.0 2527 | arg: 5.0.2 2528 | chokidar: 3.5.3 2529 | didyoumean: 1.2.2 2530 | dlv: 1.1.3 2531 | fast-glob: 3.3.1 2532 | glob-parent: 6.0.2 2533 | is-glob: 4.0.3 2534 | jiti: 1.19.3 2535 | lilconfig: 2.1.0 2536 | micromatch: 4.0.5 2537 | normalize-path: 3.0.0 2538 | object-hash: 3.0.0 2539 | picocolors: 1.0.0 2540 | postcss: 8.4.28 2541 | postcss-import: 15.1.0_postcss@8.4.28 2542 | postcss-js: 4.0.1_postcss@8.4.28 2543 | postcss-load-config: 4.0.1_postcss@8.4.28 2544 | postcss-nested: 6.0.1_postcss@8.4.28 2545 | postcss-selector-parser: 6.0.13 2546 | resolve: 1.22.4 2547 | sucrase: 3.34.0 2548 | transitivePeerDependencies: 2549 | - ts-node 2550 | dev: false 2551 | 2552 | /tapable/2.2.1: 2553 | resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} 2554 | engines: {node: '>=6'} 2555 | dev: false 2556 | 2557 | /text-table/0.2.0: 2558 | resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} 2559 | dev: false 2560 | 2561 | /thenify-all/1.6.0: 2562 | resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} 2563 | engines: {node: '>=0.8'} 2564 | dependencies: 2565 | thenify: 3.3.1 2566 | dev: false 2567 | 2568 | /thenify/3.3.1: 2569 | resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} 2570 | dependencies: 2571 | any-promise: 1.3.0 2572 | dev: false 2573 | 2574 | /to-regex-range/5.0.1: 2575 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 2576 | engines: {node: '>=8.0'} 2577 | dependencies: 2578 | is-number: 7.0.0 2579 | dev: false 2580 | 2581 | /ts-api-utils/1.0.2_typescript@5.1.6: 2582 | resolution: {integrity: sha512-Cbu4nIqnEdd+THNEsBdkolnOXhg0I8XteoHaEKgvsxpsbWda4IsUut2c187HxywQCvveojow0Dgw/amxtSKVkQ==} 2583 | engines: {node: '>=16.13.0'} 2584 | peerDependencies: 2585 | typescript: '>=4.2.0' 2586 | dependencies: 2587 | typescript: 5.1.6 2588 | dev: false 2589 | 2590 | /ts-interface-checker/0.1.13: 2591 | resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} 2592 | dev: false 2593 | 2594 | /tsconfig-paths/3.14.2: 2595 | resolution: {integrity: sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==} 2596 | dependencies: 2597 | '@types/json5': 0.0.29 2598 | json5: 1.0.2 2599 | minimist: 1.2.8 2600 | strip-bom: 3.0.0 2601 | dev: false 2602 | 2603 | /tslib/2.6.2: 2604 | resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} 2605 | dev: false 2606 | 2607 | /type-check/0.4.0: 2608 | resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} 2609 | engines: {node: '>= 0.8.0'} 2610 | dependencies: 2611 | prelude-ls: 1.2.1 2612 | dev: false 2613 | 2614 | /type-fest/0.20.2: 2615 | resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} 2616 | engines: {node: '>=10'} 2617 | dev: false 2618 | 2619 | /typed-array-buffer/1.0.0: 2620 | resolution: {integrity: sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==} 2621 | engines: {node: '>= 0.4'} 2622 | dependencies: 2623 | call-bind: 1.0.2 2624 | get-intrinsic: 1.2.1 2625 | is-typed-array: 1.1.12 2626 | dev: false 2627 | 2628 | /typed-array-byte-length/1.0.0: 2629 | resolution: {integrity: sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==} 2630 | engines: {node: '>= 0.4'} 2631 | dependencies: 2632 | call-bind: 1.0.2 2633 | for-each: 0.3.3 2634 | has-proto: 1.0.1 2635 | is-typed-array: 1.1.12 2636 | dev: false 2637 | 2638 | /typed-array-byte-offset/1.0.0: 2639 | resolution: {integrity: sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==} 2640 | engines: {node: '>= 0.4'} 2641 | dependencies: 2642 | available-typed-arrays: 1.0.5 2643 | call-bind: 1.0.2 2644 | for-each: 0.3.3 2645 | has-proto: 1.0.1 2646 | is-typed-array: 1.1.12 2647 | dev: false 2648 | 2649 | /typed-array-length/1.0.4: 2650 | resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} 2651 | dependencies: 2652 | call-bind: 1.0.2 2653 | for-each: 0.3.3 2654 | is-typed-array: 1.1.12 2655 | dev: false 2656 | 2657 | /typescript/5.1.6: 2658 | resolution: {integrity: sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==} 2659 | engines: {node: '>=14.17'} 2660 | hasBin: true 2661 | dev: false 2662 | 2663 | /unbox-primitive/1.0.2: 2664 | resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} 2665 | dependencies: 2666 | call-bind: 1.0.2 2667 | has-bigints: 1.0.2 2668 | has-symbols: 1.0.3 2669 | which-boxed-primitive: 1.0.2 2670 | dev: false 2671 | 2672 | /update-browserslist-db/1.0.11_browserslist@4.21.10: 2673 | resolution: {integrity: sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==} 2674 | hasBin: true 2675 | peerDependencies: 2676 | browserslist: '>= 4.21.0' 2677 | dependencies: 2678 | browserslist: 4.21.10 2679 | escalade: 3.1.1 2680 | picocolors: 1.0.0 2681 | dev: false 2682 | 2683 | /uri-js/4.4.1: 2684 | resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} 2685 | dependencies: 2686 | punycode: 2.3.0 2687 | dev: false 2688 | 2689 | /util-deprecate/1.0.2: 2690 | resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} 2691 | dev: false 2692 | 2693 | /watchpack/2.4.0: 2694 | resolution: {integrity: sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==} 2695 | engines: {node: '>=10.13.0'} 2696 | dependencies: 2697 | glob-to-regexp: 0.4.1 2698 | graceful-fs: 4.2.11 2699 | dev: false 2700 | 2701 | /which-boxed-primitive/1.0.2: 2702 | resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} 2703 | dependencies: 2704 | is-bigint: 1.0.4 2705 | is-boolean-object: 1.1.2 2706 | is-number-object: 1.0.7 2707 | is-string: 1.0.7 2708 | is-symbol: 1.0.4 2709 | dev: false 2710 | 2711 | /which-builtin-type/1.1.3: 2712 | resolution: {integrity: sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==} 2713 | engines: {node: '>= 0.4'} 2714 | dependencies: 2715 | function.prototype.name: 1.1.5 2716 | has-tostringtag: 1.0.0 2717 | is-async-function: 2.0.0 2718 | is-date-object: 1.0.5 2719 | is-finalizationregistry: 1.0.2 2720 | is-generator-function: 1.0.10 2721 | is-regex: 1.1.4 2722 | is-weakref: 1.0.2 2723 | isarray: 2.0.5 2724 | which-boxed-primitive: 1.0.2 2725 | which-collection: 1.0.1 2726 | which-typed-array: 1.1.11 2727 | dev: false 2728 | 2729 | /which-collection/1.0.1: 2730 | resolution: {integrity: sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==} 2731 | dependencies: 2732 | is-map: 2.0.2 2733 | is-set: 2.0.2 2734 | is-weakmap: 2.0.1 2735 | is-weakset: 2.0.2 2736 | dev: false 2737 | 2738 | /which-typed-array/1.1.11: 2739 | resolution: {integrity: sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==} 2740 | engines: {node: '>= 0.4'} 2741 | dependencies: 2742 | available-typed-arrays: 1.0.5 2743 | call-bind: 1.0.2 2744 | for-each: 0.3.3 2745 | gopd: 1.0.1 2746 | has-tostringtag: 1.0.0 2747 | dev: false 2748 | 2749 | /which/2.0.2: 2750 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 2751 | engines: {node: '>= 8'} 2752 | hasBin: true 2753 | dependencies: 2754 | isexe: 2.0.0 2755 | dev: false 2756 | 2757 | /wrappy/1.0.2: 2758 | resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} 2759 | dev: false 2760 | 2761 | /ws/8.11.0: 2762 | resolution: {integrity: sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==} 2763 | engines: {node: '>=10.0.0'} 2764 | peerDependencies: 2765 | bufferutil: ^4.0.1 2766 | utf-8-validate: ^5.0.2 2767 | peerDependenciesMeta: 2768 | bufferutil: 2769 | optional: true 2770 | utf-8-validate: 2771 | optional: true 2772 | dev: false 2773 | 2774 | /xmlhttprequest-ssl/2.0.0: 2775 | resolution: {integrity: sha512-QKxVRxiRACQcVuQEYFsI1hhkrMlrXHPegbbd1yn9UHOmRxY+si12nQYzri3vbzt8VdTTRviqcKxcyllFas5z2A==} 2776 | engines: {node: '>=0.4.0'} 2777 | dev: false 2778 | 2779 | /yallist/4.0.0: 2780 | resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} 2781 | dev: false 2782 | 2783 | /yaml/2.3.1: 2784 | resolution: {integrity: sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==} 2785 | engines: {node: '>= 14'} 2786 | dev: false 2787 | 2788 | /yocto-queue/0.1.0: 2789 | resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} 2790 | engines: {node: '>=10'} 2791 | dev: false 2792 | 2793 | /zod/3.21.4: 2794 | resolution: {integrity: sha512-m46AKbrzKVzOzs/DZgVnG5H55N1sv1M8qZU3A8RIKbs3mrACDNeIOeilDymVb2HdmP8uwshOCF4uJ8uM9rCqJw==} 2795 | dev: false 2796 | 2797 | /zod/3.22.2: 2798 | resolution: {integrity: sha512-wvWkphh5WQsJbVk1tbx1l1Ly4yg+XecD+Mq280uBGt9wa5BKSWf4Mhp6GmrkPixhMxmabYY7RbzlwVP32pbGCg==} 2799 | dev: false 2800 | -------------------------------------------------------------------------------- /ui/postcss.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | plugins: { 3 | tailwindcss: {}, 4 | autoprefixer: {}, 5 | }, 6 | } 7 | -------------------------------------------------------------------------------- /ui/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TomDoesTech/chat-tutorial/61c17d6d8fe3cf361fdb03f3e616337e5bdc9041/ui/public/favicon.ico -------------------------------------------------------------------------------- /ui/public/next.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ui/public/vercel.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ui/src/components/ui/button.tsx: -------------------------------------------------------------------------------- 1 | import * as React from "react" 2 | import { Slot } from "@radix-ui/react-slot" 3 | import { cva, type VariantProps } from "class-variance-authority" 4 | 5 | import { cn } from "@/lib/utils" 6 | 7 | const buttonVariants = cva( 8 | "inline-flex items-center justify-center rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50", 9 | { 10 | variants: { 11 | variant: { 12 | default: "bg-primary text-primary-foreground hover:bg-primary/90", 13 | destructive: 14 | "bg-destructive text-destructive-foreground hover:bg-destructive/90", 15 | outline: 16 | "border border-input bg-background hover:bg-accent hover:text-accent-foreground", 17 | secondary: 18 | "bg-secondary text-secondary-foreground hover:bg-secondary/80", 19 | ghost: "hover:bg-accent hover:text-accent-foreground", 20 | link: "text-primary underline-offset-4 hover:underline", 21 | }, 22 | size: { 23 | default: "h-10 px-4 py-2", 24 | sm: "h-9 rounded-md px-3", 25 | lg: "h-11 rounded-md px-8", 26 | icon: "h-10 w-10", 27 | }, 28 | }, 29 | defaultVariants: { 30 | variant: "default", 31 | size: "default", 32 | }, 33 | } 34 | ) 35 | 36 | export interface ButtonProps 37 | extends React.ButtonHTMLAttributes, 38 | VariantProps { 39 | asChild?: boolean 40 | } 41 | 42 | const Button = React.forwardRef( 43 | ({ className, variant, size, asChild = false, ...props }, ref) => { 44 | const Comp = asChild ? Slot : "button" 45 | return ( 46 | 51 | ) 52 | } 53 | ) 54 | Button.displayName = "Button" 55 | 56 | export { Button, buttonVariants } 57 | -------------------------------------------------------------------------------- /ui/src/components/ui/form.tsx: -------------------------------------------------------------------------------- 1 | import * as React from "react" 2 | import * as LabelPrimitive from "@radix-ui/react-label" 3 | import { Slot } from "@radix-ui/react-slot" 4 | import { 5 | Controller, 6 | ControllerProps, 7 | FieldPath, 8 | FieldValues, 9 | FormProvider, 10 | useFormContext, 11 | } from "react-hook-form" 12 | 13 | import { cn } from "@/lib/utils" 14 | import { Label } from "@/components/ui/label" 15 | 16 | const Form = FormProvider 17 | 18 | type FormFieldContextValue< 19 | TFieldValues extends FieldValues = FieldValues, 20 | TName extends FieldPath = FieldPath 21 | > = { 22 | name: TName 23 | } 24 | 25 | const FormFieldContext = React.createContext( 26 | {} as FormFieldContextValue 27 | ) 28 | 29 | const FormField = < 30 | TFieldValues extends FieldValues = FieldValues, 31 | TName extends FieldPath = FieldPath 32 | >({ 33 | ...props 34 | }: ControllerProps) => { 35 | return ( 36 | 37 | 38 | 39 | ) 40 | } 41 | 42 | const useFormField = () => { 43 | const fieldContext = React.useContext(FormFieldContext) 44 | const itemContext = React.useContext(FormItemContext) 45 | const { getFieldState, formState } = useFormContext() 46 | 47 | const fieldState = getFieldState(fieldContext.name, formState) 48 | 49 | if (!fieldContext) { 50 | throw new Error("useFormField should be used within ") 51 | } 52 | 53 | const { id } = itemContext 54 | 55 | return { 56 | id, 57 | name: fieldContext.name, 58 | formItemId: `${id}-form-item`, 59 | formDescriptionId: `${id}-form-item-description`, 60 | formMessageId: `${id}-form-item-message`, 61 | ...fieldState, 62 | } 63 | } 64 | 65 | type FormItemContextValue = { 66 | id: string 67 | } 68 | 69 | const FormItemContext = React.createContext( 70 | {} as FormItemContextValue 71 | ) 72 | 73 | const FormItem = React.forwardRef< 74 | HTMLDivElement, 75 | React.HTMLAttributes 76 | >(({ className, ...props }, ref) => { 77 | const id = React.useId() 78 | 79 | return ( 80 | 81 |
82 | 83 | ) 84 | }) 85 | FormItem.displayName = "FormItem" 86 | 87 | const FormLabel = React.forwardRef< 88 | React.ElementRef, 89 | React.ComponentPropsWithoutRef 90 | >(({ className, ...props }, ref) => { 91 | const { error, formItemId } = useFormField() 92 | 93 | return ( 94 |