diff --git a/.gitignore b/.gitignore index 163c7227..08f4a851 100644 --- a/.gitignore +++ b/.gitignore @@ -149,4 +149,8 @@ out /wrangler-test.toml .vercel .wrangler -package-lock.json \ No newline at end of file +package-lock.json +/plugins/interpolate.js +config.json +/dist/index.cjs +/dist/index.d.ts diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 00000000..6d976034 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,16 @@ +FROM node:alpine as DEV + +WORKDIR /app +COPY package.json vite.config.ts tsconfig.json ./ +COPY src ./src +RUN npm install && npm run build:local + +FROM node:alpine as PROD + +WORKDIR /app +COPY --from=DEV /app/dist/index.js /app/dist/index.js +COPY --from=DEV /app/package.json /app/ +RUN npm install --only=production --omit=dev +RUN apk add --no-cache sqlite +EXPOSE 8787 +CMD ["npm", "run", "start:dist"] diff --git a/README.md b/README.md index 29c7cdbd..309d463e 100644 --- a/README.md +++ b/README.md @@ -10,6 +10,7 @@ ChatGPT-Telegram-Workers Deploy your own Telegram ChatGPT bot on Cloudflare Workers with ease.

+ ## About The simplest and fastest way to deploy your own ChatGPT Telegram bot. Use Cloudflare Workers, single file, copy and paste directly, no dependencies required, no need to configure local development environment, no domain name required, serverless. @@ -21,24 +22,35 @@ You can customize the system initialization information so that your debugged pe image + ## Features - Serverless deployment -- Multi-platform deployment support (Cloudflare Workers, Vercel, Render[...](doc/en/PLATFORM.md)) +- Multi-platform deployment support (Cloudflare Workers, Vercel, Docker[...](doc/en/PLATFORM.md)) - Adaptation to multiple AI service providers (OpenAI, Azure OpenAI, Cloudflare AI, Cohere, Anthropic, Mistral...) - Custom commands (can achieve quick switching of models, switching of robot presets) - Support for multiple Telegram bots - Streaming output - Multi-language support - Text-to-image generation +- [Plugin System](plugins), customizable plugins. + ## Documentation -- [How to deploy](./doc/en/DEPLOY.md) -- [How to set up configuration](./doc/en/CONFIG.md) +- [Deploy Cloudflare Workers](./doc/en/DEPLOY.md) +- [Local (or Docker) deployment](./doc/en/LOCAL.md) +- [Deploy other platforms](./doc/en/PLATFORM.md) +- [Configuration and Commands](./doc/en/CONFIG.md) - [Automatic update](./doc/en/ACTION.md) -- [Support Platform](./doc/en/PLATFORM.md) -- [Changelog](./doc/en/CHANGELOG.md) +- [Change Log](./doc/en/CHANGELOG.md) + + +## Related Projects + +- [cloudflare-worker-adapter](https://github.com/TBXark/cloudflare-worker-adapter) A simple Cloudflare Worker adapter that allows this project to run independently of Cloudflare Worker. +- [telegram-bot-api-types](https://github.com/TBXark/telegram-bot-api-types) Telegram Bot API SDK with 0 output after compilation, complete documentation, supports all APIs. + ## Special thanks @@ -46,10 +58,12 @@ You can customize the system initialization information so that your debugged pe Thanks for the open-source development license provided by [JetBrains](https://www.jetbrains.com/?from=tbxark). + ## Contributors This project exists thanks to all the people who contribute. [Contribute](https://github.com/tbxark/ChatGPT-Telegram-Workers/graphs/contributors). + ## License **ChatGPT-Telegram-Workers** is released under the MIT license. [See LICENSE](LICENSE) for details. diff --git a/README_CN.md b/README_CN.md index a87e8dc2..fefab568 100644 --- a/README_CN.md +++ b/README_CN.md @@ -9,6 +9,7 @@ ChatGPT-Telegram-Workers 轻松在Cloudflare Workers上部署您自己的Telegram ChatGPT机器人。

+ ## 关于 最简单快捷部署属于自己的ChatGPT Telegram机器人的方法。使用Cloudflare Workers,单文件,直接复制粘贴一把梭,无需任何依赖,无需配置本地开发环境,不用域名,免服务器。 可以自定义系统初始化信息,让你调试好的性格永远不消失。 @@ -18,35 +19,48 @@ ChatGPT-Telegram-Workers image + ## 特性 - 无服务器部署 -- 多平台部署支持(Cloudflare Workers, Vercel, Render[...](doc/cn/PLATFORM.md)) +- 多平台部署支持(Cloudflare Workers, Vercel, Docker[...](doc/cn/PLATFORM.md)) - 适配多种AI服务商(OpenAI, Azure OpenAI, Cloudflare AI, Cohere, Anthropic, Mistral...) - 自定义指令(可以实现快速切换模型,切换机器人预设) - 支持多个Telegram机器人 - 流式输出 - 多语言支持 - 文字生成图片 +- [插件系统](plugins),可以自定义插件 + ## 文档 -- [如何部署](./doc/cn/DEPLOY.md) -- [如何进行配置](./doc/cn/CONFIG.md) +- [部署Cloudflare Workers](./doc/cn/DEPLOY.md) +- [本地(或Docker)部署](./doc/cn/LOCAL.md) +- [部署其他平台](./doc/cn/PLATFORM.md) +- [配置参数和指令](./doc/cn/CONFIG.md) - [自动更新](./doc/cn/ACTION.md) -- [支持平台](./doc/cn/PLATFORM.md) - [变更日志](./doc/cn/CHANGELOG.md) + +## 关联项目 + +- [cloudflare-worker-adapter](https://github.com/TBXark/cloudflare-worker-adapter) 一个简单的Cloudflare Worker适配器,让本项目脱离Cloudflare Worker独立运行 +- [telegram-bot-api-types](https://github.com/TBXark/telegram-bot-api-types) 编译后0输出的Telegram Bot API SDK, 文档齐全,支持所有API + + ## 特别感谢 ![https://www.jetbrains.com/?from=tbxark](https://user-images.githubusercontent.com/9513891/236592683-1ea579cf-08ff-4703-b313-db038f62bab0.svg) 感谢[JetBrains](https://www.jetbrains.com/?from=tbxark)提供的开源开发许可证。 + ## 贡献者 这个项目存在是因为所有贡献的人。[贡献](https://github.com/tbxark/ChatGPT-Telegram-Workers/graphs/contributors)。 + ## 许可证 **ChatGPT-Telegram-Workers** 以 MIT 许可证发布。[详见 LICENSE](LICENSE) 获取详情。 diff --git a/adapter/README.md b/adapter/README.md deleted file mode 100644 index 654da42e..00000000 --- a/adapter/README.md +++ /dev/null @@ -1,8 +0,0 @@ -# Adapter - -**ChatGPT-Telegram-Workers** is the code that runs on Cloudflare Workers, if you want to run on other platforms, you can refer to the adapters in this directory. - -1. **docker**: Dockerfile for running on local -2. **local**: Run on local -3. **Render**: Run on Render -4. **Vercel**: Run on Vercel diff --git a/adapter/docker/.gitignore b/adapter/docker/.gitignore deleted file mode 100644 index c795b054..00000000 --- a/adapter/docker/.gitignore +++ /dev/null @@ -1 +0,0 @@ -build \ No newline at end of file diff --git a/adapter/docker/Dockerfile b/adapter/docker/Dockerfile deleted file mode 100644 index 112bf62f..00000000 --- a/adapter/docker/Dockerfile +++ /dev/null @@ -1,8 +0,0 @@ -FROM node:20 -WORKDIR /app -COPY ./build/index.js /app/index.js -RUN apt-get update && apt-get install -y sqlite3 -ENV CONFIG_PATH=/app/config.json -ENV CACHE_PATH=/app/cache.json -EXPOSE 8787 -CMD [ "node", "index.js" ] diff --git a/adapter/docker/README.md b/adapter/docker/README.md deleted file mode 100644 index 0eb5bcda..00000000 --- a/adapter/docker/README.md +++ /dev/null @@ -1,24 +0,0 @@ -# Docker - -### 1. Build image - -```bash -yarn && yarn run docker -``` - -### 2. Run container - -```bash -docker run -v $(pwd)/config.json:/app/config.json -p 8787:8787 chatgpt-telegram-bot:latest --name chatgpt-telegram-bot -``` - -### 3. Configure -```json5 -{ - "database": { - "type": "sqlite",// memory, local, sqlite, redis - "path": "/app/data.db" // your database path - }, - "server": "https://example.com" -} -``` \ No newline at end of file diff --git a/adapter/docker/esbuild.config.js b/adapter/docker/esbuild.config.js deleted file mode 100644 index 4d672079..00000000 --- a/adapter/docker/esbuild.config.js +++ /dev/null @@ -1,5 +0,0 @@ -import { build } from '../script/esbuild.config.js'; - -build('../../dist/buildinfo.json', 'build/index.js') - .then(() => console.log('Build success')) - .catch(() => process.exit(1)); diff --git a/adapter/docker/index.js b/adapter/docker/index.js deleted file mode 100644 index 8d6dda54..00000000 --- a/adapter/docker/index.js +++ /dev/null @@ -1,21 +0,0 @@ -import fs from 'node:fs'; -import { createCache, startServer } from 'cloudflare-worker-adapter'; -import worker from '../../main.js'; - -const { - CONFIG_PATH = '/app/config.json', - TOML_PATH = '/app/config.toml', -} = process.env; - -const config = JSON.parse(fs.readFileSync(CONFIG_PATH, 'utf-8')); -const cache = await createCache(config?.database?.type, config?.database); -console.log(`database: ${config?.database?.type} is ready`); - -startServer( - 8787, - '127.0.0.1', - TOML_PATH, - { DATABASE: cache }, - { baseURL: config.server }, - worker.fetch, -); \ No newline at end of file diff --git a/adapter/docker/package.json b/adapter/docker/package.json deleted file mode 100644 index cdbac7a8..00000000 --- a/adapter/docker/package.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "name": "chatgpt-telegram-bot", - "type": "module", - "version": "1.0.0", - "description": "", - "author": "TBXark", - "license": "MIT", - "main": "index.js", - "scripts": { - "start": "node index.js", - "build": "node esbuild.config.js", - "docker": "npm run build && docker build -t chatgpt-telegram-bot:latest ." - }, - "dependencies": { - "cloudflare-worker-adapter": "1.2.2" - }, - "devDependencies": { - "esbuild": "^0.23.1" - } -} diff --git a/adapter/docker/yarn.lock b/adapter/docker/yarn.lock deleted file mode 100644 index 55343c53..00000000 --- a/adapter/docker/yarn.lock +++ /dev/null @@ -1,1140 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@esbuild/aix-ppc64@0.23.1": - version "0.23.1" - resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.23.1.tgz#51299374de171dbd80bb7d838e1cfce9af36f353" - integrity sha512-6VhYk1diRqrhBAqpJEdjASR/+WVRtfjpqKuNw11cLiaWpAT/Uu+nokB+UJnevzy/P9C/ty6AOe0dwueMrGh/iQ== - -"@esbuild/android-arm64@0.23.1": - version "0.23.1" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.23.1.tgz#58565291a1fe548638adb9c584237449e5e14018" - integrity sha512-xw50ipykXcLstLeWH7WRdQuysJqejuAGPd30vd1i5zSyKK3WE+ijzHmLKxdiCMtH1pHz78rOg0BKSYOSB/2Khw== - -"@esbuild/android-arm@0.23.1": - version "0.23.1" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.23.1.tgz#5eb8c652d4c82a2421e3395b808e6d9c42c862ee" - integrity sha512-uz6/tEy2IFm9RYOyvKl88zdzZfwEfKZmnX9Cj1BHjeSGNuGLuMD1kR8y5bteYmwqKm1tj8m4cb/aKEorr6fHWQ== - -"@esbuild/android-x64@0.23.1": - version "0.23.1" - resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.23.1.tgz#ae19d665d2f06f0f48a6ac9a224b3f672e65d517" - integrity sha512-nlN9B69St9BwUoB+jkyU090bru8L0NA3yFvAd7k8dNsVH8bi9a8cUAUSEcEEgTp2z3dbEDGJGfP6VUnkQnlReg== - -"@esbuild/darwin-arm64@0.23.1": - version "0.23.1" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.23.1.tgz#05b17f91a87e557b468a9c75e9d85ab10c121b16" - integrity sha512-YsS2e3Wtgnw7Wq53XXBLcV6JhRsEq8hkfg91ESVadIrzr9wO6jJDMZnCQbHm1Guc5t/CdDiFSSfWP58FNuvT3Q== - -"@esbuild/darwin-x64@0.23.1": - version "0.23.1" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.23.1.tgz#c58353b982f4e04f0d022284b8ba2733f5ff0931" - integrity sha512-aClqdgTDVPSEGgoCS8QDG37Gu8yc9lTHNAQlsztQ6ENetKEO//b8y31MMu2ZaPbn4kVsIABzVLXYLhCGekGDqw== - -"@esbuild/freebsd-arm64@0.23.1": - version "0.23.1" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.23.1.tgz#f9220dc65f80f03635e1ef96cfad5da1f446f3bc" - integrity sha512-h1k6yS8/pN/NHlMl5+v4XPfikhJulk4G+tKGFIOwURBSFzE8bixw1ebjluLOjfwtLqY0kewfjLSrO6tN2MgIhA== - -"@esbuild/freebsd-x64@0.23.1": - version "0.23.1" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.23.1.tgz#69bd8511fa013b59f0226d1609ac43f7ce489730" - integrity sha512-lK1eJeyk1ZX8UklqFd/3A60UuZ/6UVfGT2LuGo3Wp4/z7eRTRYY+0xOu2kpClP+vMTi9wKOfXi2vjUpO1Ro76g== - -"@esbuild/linux-arm64@0.23.1": - version "0.23.1" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.23.1.tgz#8050af6d51ddb388c75653ef9871f5ccd8f12383" - integrity sha512-/93bf2yxencYDnItMYV/v116zff6UyTjo4EtEQjUBeGiVpMmffDNUyD9UN2zV+V3LRV3/on4xdZ26NKzn6754g== - -"@esbuild/linux-arm@0.23.1": - version "0.23.1" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.23.1.tgz#ecaabd1c23b701070484990db9a82f382f99e771" - integrity sha512-CXXkzgn+dXAPs3WBwE+Kvnrf4WECwBdfjfeYHpMeVxWE0EceB6vhWGShs6wi0IYEqMSIzdOF1XjQ/Mkm5d7ZdQ== - -"@esbuild/linux-ia32@0.23.1": - version "0.23.1" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.23.1.tgz#3ed2273214178109741c09bd0687098a0243b333" - integrity sha512-VTN4EuOHwXEkXzX5nTvVY4s7E/Krz7COC8xkftbbKRYAl96vPiUssGkeMELQMOnLOJ8k3BY1+ZY52tttZnHcXQ== - -"@esbuild/linux-loong64@0.23.1": - version "0.23.1" - resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.23.1.tgz#a0fdf440b5485c81b0fbb316b08933d217f5d3ac" - integrity sha512-Vx09LzEoBa5zDnieH8LSMRToj7ir/Jeq0Gu6qJ/1GcBq9GkfoEAoXvLiW1U9J1qE/Y/Oyaq33w5p2ZWrNNHNEw== - -"@esbuild/linux-mips64el@0.23.1": - version "0.23.1" - resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.23.1.tgz#e11a2806346db8375b18f5e104c5a9d4e81807f6" - integrity sha512-nrFzzMQ7W4WRLNUOU5dlWAqa6yVeI0P78WKGUo7lg2HShq/yx+UYkeNSE0SSfSure0SqgnsxPvmAUu/vu0E+3Q== - -"@esbuild/linux-ppc64@0.23.1": - version "0.23.1" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.23.1.tgz#06a2744c5eaf562b1a90937855b4d6cf7c75ec96" - integrity sha512-dKN8fgVqd0vUIjxuJI6P/9SSSe/mB9rvA98CSH2sJnlZ/OCZWO1DJvxj8jvKTfYUdGfcq2dDxoKaC6bHuTlgcw== - -"@esbuild/linux-riscv64@0.23.1": - version "0.23.1" - resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.23.1.tgz#65b46a2892fc0d1af4ba342af3fe0fa4a8fe08e7" - integrity sha512-5AV4Pzp80fhHL83JM6LoA6pTQVWgB1HovMBsLQ9OZWLDqVY8MVobBXNSmAJi//Csh6tcY7e7Lny2Hg1tElMjIA== - -"@esbuild/linux-s390x@0.23.1": - version "0.23.1" - resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.23.1.tgz#e71ea18c70c3f604e241d16e4e5ab193a9785d6f" - integrity sha512-9ygs73tuFCe6f6m/Tb+9LtYxWR4c9yg7zjt2cYkjDbDpV/xVn+68cQxMXCjUpYwEkze2RcU/rMnfIXNRFmSoDw== - -"@esbuild/linux-x64@0.23.1": - version "0.23.1" - resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.23.1.tgz#d47f97391e80690d4dfe811a2e7d6927ad9eed24" - integrity sha512-EV6+ovTsEXCPAp58g2dD68LxoP/wK5pRvgy0J/HxPGB009omFPv3Yet0HiaqvrIrgPTBuC6wCH1LTOY91EO5hQ== - -"@esbuild/netbsd-x64@0.23.1": - version "0.23.1" - resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.23.1.tgz#44e743c9778d57a8ace4b72f3c6b839a3b74a653" - integrity sha512-aevEkCNu7KlPRpYLjwmdcuNz6bDFiE7Z8XC4CPqExjTvrHugh28QzUXVOZtiYghciKUacNktqxdpymplil1beA== - -"@esbuild/openbsd-arm64@0.23.1": - version "0.23.1" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.23.1.tgz#05c5a1faf67b9881834758c69f3e51b7dee015d7" - integrity sha512-3x37szhLexNA4bXhLrCC/LImN/YtWis6WXr1VESlfVtVeoFJBRINPJ3f0a/6LV8zpikqoUg4hyXw0sFBt5Cr+Q== - -"@esbuild/openbsd-x64@0.23.1": - version "0.23.1" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.23.1.tgz#2e58ae511bacf67d19f9f2dcd9e8c5a93f00c273" - integrity sha512-aY2gMmKmPhxfU+0EdnN+XNtGbjfQgwZj43k8G3fyrDM/UdZww6xrWxmDkuz2eCZchqVeABjV5BpildOrUbBTqA== - -"@esbuild/sunos-x64@0.23.1": - version "0.23.1" - resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.23.1.tgz#adb022b959d18d3389ac70769cef5a03d3abd403" - integrity sha512-RBRT2gqEl0IKQABT4XTj78tpk9v7ehp+mazn2HbUeZl1YMdaGAQqhapjGTCe7uw7y0frDi4gS0uHzhvpFuI1sA== - -"@esbuild/win32-arm64@0.23.1": - version "0.23.1" - resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.23.1.tgz#84906f50c212b72ec360f48461d43202f4c8b9a2" - integrity sha512-4O+gPR5rEBe2FpKOVyiJ7wNDPA8nGzDuJ6gN4okSA1gEOYZ67N8JPk58tkWtdtPeLz7lBnY6I5L3jdsr3S+A6A== - -"@esbuild/win32-ia32@0.23.1": - version "0.23.1" - resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.23.1.tgz#5e3eacc515820ff729e90d0cb463183128e82fac" - integrity sha512-BcaL0Vn6QwCwre3Y717nVHZbAa4UBEigzFm6VdsVdT/MbZ38xoj1X9HPkZhbmaBGUD1W8vxAfffbDe8bA6AKnQ== - -"@esbuild/win32-x64@0.23.1": - version "0.23.1" - resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.23.1.tgz#81fd50d11e2c32b2d6241470e3185b70c7b30699" - integrity sha512-BHpFFeslkWrXWyUPnbKm+xYYVYruCinGcftSBaa8zoF9hZO4BcSCFUvHVTtzpIY6YzUnYtuEhZ+C9iEXjxnasg== - -"@gar/promisify@^1.0.1": - version "1.1.3" - resolved "https://registry.yarnpkg.com/@gar/promisify/-/promisify-1.1.3.tgz#555193ab2e3bb3b6adc3d551c9c030d9e860daf6" - integrity sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw== - -"@ioredis/commands@^1.1.1": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@ioredis/commands/-/commands-1.2.0.tgz#6d61b3097470af1fdbbe622795b8921d42018e11" - integrity sha512-Sx1pU8EM64o2BrqNpEO1CNLtKQwyhuXuqyfH7oGKCk+1a33d2r5saW8zNwm3j6BTExtjrv2BxTgzzkMwts6vGg== - -"@npmcli/fs@^1.0.0": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-1.1.1.tgz#72f719fe935e687c56a4faecf3c03d06ba593257" - integrity sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ== - dependencies: - "@gar/promisify" "^1.0.1" - semver "^7.3.5" - -"@npmcli/move-file@^1.0.1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-1.1.2.tgz#1a82c3e372f7cae9253eb66d72543d6b8685c674" - integrity sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg== - dependencies: - mkdirp "^1.0.4" - rimraf "^3.0.2" - -"@tootallnate/once@1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" - integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== - -abbrev@1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" - integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== - -agent-base@6, agent-base@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" - integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== - dependencies: - debug "4" - -agent-base@^7.0.2: - version "7.1.1" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-7.1.1.tgz#bdbded7dfb096b751a2a087eeeb9664725b2e317" - integrity sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA== - dependencies: - debug "^4.3.4" - -agentkeepalive@^4.1.3: - version "4.5.0" - resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.5.0.tgz#2673ad1389b3c418c5a20c5d7364f93ca04be923" - integrity sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew== - dependencies: - humanize-ms "^1.2.1" - -aggregate-error@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" - integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== - dependencies: - clean-stack "^2.0.0" - indent-string "^4.0.0" - -ansi-regex@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" - integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== - -"aproba@^1.0.3 || ^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" - integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== - -are-we-there-yet@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz#679df222b278c64f2cdba1175cdc00b0d96164bd" - integrity sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg== - dependencies: - delegates "^1.0.0" - readable-stream "^3.6.0" - -balanced-match@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" - integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== - -base64-js@^1.3.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" - integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== - -bindings@^1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" - integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== - dependencies: - file-uri-to-path "1.0.0" - -bl@^4.0.3: - version "4.1.0" - resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" - integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== - dependencies: - buffer "^5.5.0" - inherits "^2.0.4" - readable-stream "^3.4.0" - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -buffer@^5.5.0: - version "5.7.1" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" - integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== - dependencies: - base64-js "^1.3.1" - ieee754 "^1.1.13" - -cacache@^15.2.0: - version "15.3.0" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-15.3.0.tgz#dc85380fb2f556fe3dda4c719bfa0ec875a7f1eb" - integrity sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ== - dependencies: - "@npmcli/fs" "^1.0.0" - "@npmcli/move-file" "^1.0.1" - chownr "^2.0.0" - fs-minipass "^2.0.0" - glob "^7.1.4" - infer-owner "^1.0.4" - lru-cache "^6.0.0" - minipass "^3.1.1" - minipass-collect "^1.0.2" - minipass-flush "^1.0.5" - minipass-pipeline "^1.2.2" - mkdirp "^1.0.3" - p-map "^4.0.0" - promise-inflight "^1.0.1" - rimraf "^3.0.2" - ssri "^8.0.1" - tar "^6.0.2" - unique-filename "^1.1.1" - -chownr@^1.1.1: - version "1.1.4" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" - integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== - -chownr@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" - integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== - -clean-stack@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" - integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== - -cloudflare-worker-adapter@1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/cloudflare-worker-adapter/-/cloudflare-worker-adapter-1.2.2.tgz#b0139424bee23fd4ceae50e65388da7c4e913401" - integrity sha512-FuqyGK18DTgf0P5/H7lzDwUh2CTxyqItdI0ZZBnvHjYceF1r8nPkV0uN8OG9+18fSdl5Y0s9Ybf4UM/AYH8eng== - dependencies: - https-proxy-agent "^7.0.5" - ioredis "^5.4.1" - node-fetch "^3.3.2" - sqlite3 "^5" - toml "^3.0.0" - -cluster-key-slot@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/cluster-key-slot/-/cluster-key-slot-1.1.2.tgz#88ddaa46906e303b5de30d3153b7d9fe0a0c19ac" - integrity sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA== - -color-support@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" - integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== - -console-control-strings@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" - integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ== - -data-uri-to-buffer@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz#d8feb2b2881e6a4f58c2e08acfd0e2834e26222e" - integrity sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A== - -debug@4, debug@^4.3.3, debug@^4.3.4: - version "4.3.6" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.6.tgz#2ab2c38fbaffebf8aa95fdfe6d88438c7a13c52b" - integrity sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg== - dependencies: - ms "2.1.2" - -decompress-response@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" - integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== - dependencies: - mimic-response "^3.1.0" - -deep-extend@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" - integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== - -delegates@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" - integrity sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ== - -denque@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/denque/-/denque-2.1.0.tgz#e93e1a6569fb5e66f16a3c2a2964617d349d6ab1" - integrity sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw== - -detect-libc@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.3.tgz#f0cd503b40f9939b894697d19ad50895e30cf700" - integrity sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw== - -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" - integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== - -encoding@^0.1.12: - version "0.1.13" - resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" - integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== - dependencies: - iconv-lite "^0.6.2" - -end-of-stream@^1.1.0, end-of-stream@^1.4.1: - version "1.4.4" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" - integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== - dependencies: - once "^1.4.0" - -env-paths@^2.2.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" - integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== - -err-code@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/err-code/-/err-code-2.0.3.tgz#23c2f3b756ffdfc608d30e27c9a941024807e7f9" - integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA== - -esbuild@^0.23.1: - version "0.23.1" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.23.1.tgz#40fdc3f9265ec0beae6f59824ade1bd3d3d2dab8" - integrity sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg== - optionalDependencies: - "@esbuild/aix-ppc64" "0.23.1" - "@esbuild/android-arm" "0.23.1" - "@esbuild/android-arm64" "0.23.1" - "@esbuild/android-x64" "0.23.1" - "@esbuild/darwin-arm64" "0.23.1" - "@esbuild/darwin-x64" "0.23.1" - "@esbuild/freebsd-arm64" "0.23.1" - "@esbuild/freebsd-x64" "0.23.1" - "@esbuild/linux-arm" "0.23.1" - "@esbuild/linux-arm64" "0.23.1" - "@esbuild/linux-ia32" "0.23.1" - "@esbuild/linux-loong64" "0.23.1" - "@esbuild/linux-mips64el" "0.23.1" - "@esbuild/linux-ppc64" "0.23.1" - "@esbuild/linux-riscv64" "0.23.1" - "@esbuild/linux-s390x" "0.23.1" - "@esbuild/linux-x64" "0.23.1" - "@esbuild/netbsd-x64" "0.23.1" - "@esbuild/openbsd-arm64" "0.23.1" - "@esbuild/openbsd-x64" "0.23.1" - "@esbuild/sunos-x64" "0.23.1" - "@esbuild/win32-arm64" "0.23.1" - "@esbuild/win32-ia32" "0.23.1" - "@esbuild/win32-x64" "0.23.1" - -expand-template@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c" - integrity sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg== - -fetch-blob@^3.1.2, fetch-blob@^3.1.4: - version "3.2.0" - resolved "https://registry.yarnpkg.com/fetch-blob/-/fetch-blob-3.2.0.tgz#f09b8d4bbd45adc6f0c20b7e787e793e309dcce9" - integrity sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ== - dependencies: - node-domexception "^1.0.0" - web-streams-polyfill "^3.0.3" - -file-uri-to-path@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" - integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== - -formdata-polyfill@^4.0.10: - version "4.0.10" - resolved "https://registry.yarnpkg.com/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz#24807c31c9d402e002ab3d8c720144ceb8848423" - integrity sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g== - dependencies: - fetch-blob "^3.1.2" - -fs-constants@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" - integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== - -fs-minipass@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" - integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== - dependencies: - minipass "^3.0.0" - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== - -gauge@^4.0.3: - version "4.0.4" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-4.0.4.tgz#52ff0652f2bbf607a989793d53b751bef2328dce" - integrity sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg== - dependencies: - aproba "^1.0.3 || ^2.0.0" - color-support "^1.1.3" - console-control-strings "^1.1.0" - has-unicode "^2.0.1" - signal-exit "^3.0.7" - string-width "^4.2.3" - strip-ansi "^6.0.1" - wide-align "^1.1.5" - -github-from-package@0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce" - integrity sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw== - -glob@^7.1.3, glob@^7.1.4: - version "7.2.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" - integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.1.1" - once "^1.3.0" - path-is-absolute "^1.0.0" - -graceful-fs@^4.2.6: - version "4.2.11" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" - integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== - -has-unicode@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" - integrity sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ== - -http-cache-semantics@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" - integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== - -http-proxy-agent@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" - integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== - dependencies: - "@tootallnate/once" "1" - agent-base "6" - debug "4" - -https-proxy-agent@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" - integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== - dependencies: - agent-base "6" - debug "4" - -https-proxy-agent@^7.0.5: - version "7.0.5" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz#9e8b5013873299e11fab6fd548405da2d6c602b2" - integrity sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw== - dependencies: - agent-base "^7.0.2" - debug "4" - -humanize-ms@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" - integrity sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ== - dependencies: - ms "^2.0.0" - -iconv-lite@^0.6.2: - version "0.6.3" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" - integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== - dependencies: - safer-buffer ">= 2.1.2 < 3.0.0" - -ieee754@^1.1.13: - version "1.2.1" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" - integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== - -imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== - -indent-string@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" - integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== - -infer-owner@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" - integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2, inherits@^2.0.3, inherits@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -ini@~1.3.0: - version "1.3.8" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" - integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== - -ioredis@^5.4.1: - version "5.4.1" - resolved "https://registry.yarnpkg.com/ioredis/-/ioredis-5.4.1.tgz#1c56b70b759f01465913887375ed809134296f40" - integrity sha512-2YZsvl7jopIa1gaePkeMtd9rAcSjOOjPtpcLlOeusyO+XH2SK5ZcT+UCrElPP+WVIInh2TzeI4XW9ENaSLVVHA== - dependencies: - "@ioredis/commands" "^1.1.1" - cluster-key-slot "^1.1.0" - debug "^4.3.4" - denque "^2.1.0" - lodash.defaults "^4.2.0" - lodash.isarguments "^3.1.0" - redis-errors "^1.2.0" - redis-parser "^3.0.0" - standard-as-callback "^2.1.0" - -ip-address@^9.0.5: - version "9.0.5" - resolved "https://registry.yarnpkg.com/ip-address/-/ip-address-9.0.5.tgz#117a960819b08780c3bd1f14ef3c1cc1d3f3ea5a" - integrity sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g== - dependencies: - jsbn "1.1.0" - sprintf-js "^1.1.3" - -is-fullwidth-code-point@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" - integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== - -is-lambda@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-lambda/-/is-lambda-1.0.1.tgz#3d9877899e6a53efc0160504cde15f82e6f061d5" - integrity sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ== - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== - -jsbn@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-1.1.0.tgz#b01307cb29b618a1ed26ec79e911f803c4da0040" - integrity sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A== - -lodash.defaults@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c" - integrity sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ== - -lodash.isarguments@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" - integrity sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg== - -lru-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" - integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== - dependencies: - yallist "^4.0.0" - -make-fetch-happen@^9.1.0: - version "9.1.0" - resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz#53085a09e7971433e6765f7971bf63f4e05cb968" - integrity sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg== - dependencies: - agentkeepalive "^4.1.3" - cacache "^15.2.0" - http-cache-semantics "^4.1.0" - http-proxy-agent "^4.0.1" - https-proxy-agent "^5.0.0" - is-lambda "^1.0.1" - lru-cache "^6.0.0" - minipass "^3.1.3" - minipass-collect "^1.0.2" - minipass-fetch "^1.3.2" - minipass-flush "^1.0.5" - minipass-pipeline "^1.2.4" - negotiator "^0.6.2" - promise-retry "^2.0.1" - socks-proxy-agent "^6.0.0" - ssri "^8.0.0" - -mimic-response@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" - integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== - -minimatch@^3.1.1: - version "3.1.2" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== - dependencies: - brace-expansion "^1.1.7" - -minimist@^1.2.0, minimist@^1.2.3: - version "1.2.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" - integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== - -minipass-collect@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617" - integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA== - dependencies: - minipass "^3.0.0" - -minipass-fetch@^1.3.2: - version "1.4.1" - resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-1.4.1.tgz#d75e0091daac1b0ffd7e9d41629faff7d0c1f1b6" - integrity sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw== - dependencies: - minipass "^3.1.0" - minipass-sized "^1.0.3" - minizlib "^2.0.0" - optionalDependencies: - encoding "^0.1.12" - -minipass-flush@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373" - integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== - dependencies: - minipass "^3.0.0" - -minipass-pipeline@^1.2.2, minipass-pipeline@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c" - integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== - dependencies: - minipass "^3.0.0" - -minipass-sized@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/minipass-sized/-/minipass-sized-1.0.3.tgz#70ee5a7c5052070afacfbc22977ea79def353b70" - integrity sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g== - dependencies: - minipass "^3.0.0" - -minipass@^3.0.0, minipass@^3.1.0, minipass@^3.1.1, minipass@^3.1.3: - version "3.3.6" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.6.tgz#7bba384db3a1520d18c9c0e5251c3444e95dd94a" - integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw== - dependencies: - yallist "^4.0.0" - -minipass@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d" - integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== - -minizlib@^2.0.0, minizlib@^2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" - integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== - dependencies: - minipass "^3.0.0" - yallist "^4.0.0" - -mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3: - version "0.5.3" - resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113" - integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== - -mkdirp@^1.0.3, mkdirp@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" - integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== - -ms@2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - -ms@^2.0.0: - version "2.1.3" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - -napi-build-utils@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-1.0.2.tgz#b1fddc0b2c46e380a0b7a76f984dd47c41a13806" - integrity sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg== - -negotiator@^0.6.2: - version "0.6.3" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" - integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== - -node-abi@^3.3.0: - version "3.65.0" - resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.65.0.tgz#ca92d559388e1e9cab1680a18c1a18757cdac9d3" - integrity sha512-ThjYBfoDNr08AWx6hGaRbfPwxKV9kVzAzOzlLKbk2CuqXE2xnCh+cbAGnwM3t8Lq4v9rUB7VfondlkBckcJrVA== - dependencies: - semver "^7.3.5" - -node-addon-api@^7.0.0: - version "7.1.1" - resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-7.1.1.tgz#1aba6693b0f255258a049d621329329322aad558" - integrity sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ== - -node-domexception@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/node-domexception/-/node-domexception-1.0.0.tgz#6888db46a1f71c0b76b3f7555016b63fe64766e5" - integrity sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ== - -node-fetch@^3.3.2: - version "3.3.2" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-3.3.2.tgz#d1e889bacdf733b4ff3b2b243eb7a12866a0b78b" - integrity sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA== - dependencies: - data-uri-to-buffer "^4.0.0" - fetch-blob "^3.1.4" - formdata-polyfill "^4.0.10" - -node-gyp@8.x: - version "8.4.1" - resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-8.4.1.tgz#3d49308fc31f768180957d6b5746845fbd429937" - integrity sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w== - dependencies: - env-paths "^2.2.0" - glob "^7.1.4" - graceful-fs "^4.2.6" - make-fetch-happen "^9.1.0" - nopt "^5.0.0" - npmlog "^6.0.0" - rimraf "^3.0.2" - semver "^7.3.5" - tar "^6.1.2" - which "^2.0.2" - -nopt@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-5.0.0.tgz#530942bb58a512fccafe53fe210f13a25355dc88" - integrity sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ== - dependencies: - abbrev "1" - -npmlog@^6.0.0: - version "6.0.2" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-6.0.2.tgz#c8166017a42f2dea92d6453168dd865186a70830" - integrity sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg== - dependencies: - are-we-there-yet "^3.0.0" - console-control-strings "^1.1.0" - gauge "^4.0.3" - set-blocking "^2.0.0" - -once@^1.3.0, once@^1.3.1, once@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== - dependencies: - wrappy "1" - -p-map@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" - integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== - dependencies: - aggregate-error "^3.0.0" - -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== - -prebuild-install@^7.1.1: - version "7.1.2" - resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-7.1.2.tgz#a5fd9986f5a6251fbc47e1e5c65de71e68c0a056" - integrity sha512-UnNke3IQb6sgarcZIDU3gbMeTp/9SSU1DAIkil7PrqG1vZlBtY5msYccSKSHDqa3hNg436IXK+SNImReuA1wEQ== - dependencies: - detect-libc "^2.0.0" - expand-template "^2.0.3" - github-from-package "0.0.0" - minimist "^1.2.3" - mkdirp-classic "^0.5.3" - napi-build-utils "^1.0.1" - node-abi "^3.3.0" - pump "^3.0.0" - rc "^1.2.7" - simple-get "^4.0.0" - tar-fs "^2.0.0" - tunnel-agent "^0.6.0" - -promise-inflight@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" - integrity sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g== - -promise-retry@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-2.0.1.tgz#ff747a13620ab57ba688f5fc67855410c370da22" - integrity sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g== - dependencies: - err-code "^2.0.2" - retry "^0.12.0" - -pump@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" - integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - -rc@^1.2.7: - version "1.2.8" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" - integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== - dependencies: - deep-extend "^0.6.0" - ini "~1.3.0" - minimist "^1.2.0" - strip-json-comments "~2.0.1" - -readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: - version "3.6.2" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" - integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - -redis-errors@^1.0.0, redis-errors@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/redis-errors/-/redis-errors-1.2.0.tgz#eb62d2adb15e4eaf4610c04afe1529384250abad" - integrity sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w== - -redis-parser@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/redis-parser/-/redis-parser-3.0.0.tgz#b66d828cdcafe6b4b8a428a7def4c6bcac31c8b4" - integrity sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A== - dependencies: - redis-errors "^1.0.0" - -retry@^0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" - integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow== - -rimraf@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" - integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== - dependencies: - glob "^7.1.3" - -safe-buffer@^5.0.1, safe-buffer@~5.2.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - -"safer-buffer@>= 2.1.2 < 3.0.0": - version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== - -semver@^7.3.5: - version "7.6.3" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" - integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== - -set-blocking@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" - integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== - -signal-exit@^3.0.7: - version "3.0.7" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" - integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== - -simple-concat@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f" - integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q== - -simple-get@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-4.0.1.tgz#4a39db549287c979d352112fa03fd99fd6bc3543" - integrity sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA== - dependencies: - decompress-response "^6.0.0" - once "^1.3.1" - simple-concat "^1.0.0" - -smart-buffer@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae" - integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== - -socks-proxy-agent@^6.0.0: - version "6.2.1" - resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz#2687a31f9d7185e38d530bef1944fe1f1496d6ce" - integrity sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ== - dependencies: - agent-base "^6.0.2" - debug "^4.3.3" - socks "^2.6.2" - -socks@^2.6.2: - version "2.8.3" - resolved "https://registry.yarnpkg.com/socks/-/socks-2.8.3.tgz#1ebd0f09c52ba95a09750afe3f3f9f724a800cb5" - integrity sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw== - dependencies: - ip-address "^9.0.5" - smart-buffer "^4.2.0" - -sprintf-js@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.3.tgz#4914b903a2f8b685d17fdf78a70e917e872e444a" - integrity sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA== - -sqlite3@^5: - version "5.1.7" - resolved "https://registry.yarnpkg.com/sqlite3/-/sqlite3-5.1.7.tgz#59ca1053c1ab38647396586edad019b1551041b7" - integrity sha512-GGIyOiFaG+TUra3JIfkI/zGP8yZYLPQ0pl1bH+ODjiX57sPhrLU5sQJn1y9bDKZUFYkX1crlrPfSYt0BKKdkog== - dependencies: - bindings "^1.5.0" - node-addon-api "^7.0.0" - prebuild-install "^7.1.1" - tar "^6.1.11" - optionalDependencies: - node-gyp "8.x" - -ssri@^8.0.0, ssri@^8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-8.0.1.tgz#638e4e439e2ffbd2cd289776d5ca457c4f51a2af" - integrity sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ== - dependencies: - minipass "^3.1.1" - -standard-as-callback@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/standard-as-callback/-/standard-as-callback-2.1.0.tgz#8953fc05359868a77b5b9739a665c5977bb7df45" - integrity sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A== - -"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.2.3: - version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -string_decoder@^1.1.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" - -strip-ansi@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - -strip-json-comments@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" - integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== - -tar-fs@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.1.tgz#489a15ab85f1f0befabb370b7de4f9eb5cbe8784" - integrity sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng== - dependencies: - chownr "^1.1.1" - mkdirp-classic "^0.5.2" - pump "^3.0.0" - tar-stream "^2.1.4" - -tar-stream@^2.1.4: - version "2.2.0" - resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" - integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== - dependencies: - bl "^4.0.3" - end-of-stream "^1.4.1" - fs-constants "^1.0.0" - inherits "^2.0.3" - readable-stream "^3.1.1" - -tar@^6.0.2, tar@^6.1.11, tar@^6.1.2: - version "6.2.1" - resolved "https://registry.yarnpkg.com/tar/-/tar-6.2.1.tgz#717549c541bc3c2af15751bea94b1dd068d4b03a" - integrity sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A== - dependencies: - chownr "^2.0.0" - fs-minipass "^2.0.0" - minipass "^5.0.0" - minizlib "^2.1.1" - mkdirp "^1.0.3" - yallist "^4.0.0" - -toml@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/toml/-/toml-3.0.0.tgz#342160f1af1904ec9d204d03a5d61222d762c5ee" - integrity sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w== - -tunnel-agent@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" - integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w== - dependencies: - safe-buffer "^5.0.1" - -unique-filename@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" - integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== - dependencies: - unique-slug "^2.0.0" - -unique-slug@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c" - integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w== - dependencies: - imurmurhash "^0.1.4" - -util-deprecate@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== - -web-streams-polyfill@^3.0.3: - version "3.3.3" - resolved "https://registry.yarnpkg.com/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz#2073b91a2fdb1fbfbd401e7de0ac9f8214cecb4b" - integrity sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw== - -which@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" - integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== - dependencies: - isexe "^2.0.0" - -wide-align@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3" - integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg== - dependencies: - string-width "^1.0.2 || 2 || 3 || 4" - -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== - -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== diff --git a/adapter/local/.gitignore b/adapter/local/.gitignore deleted file mode 100644 index e6a6e9e3..00000000 --- a/adapter/local/.gitignore +++ /dev/null @@ -1,6 +0,0 @@ -/config.json -/database.json -/database.sqlite -/database.sqlite3 -/test -.DS_Store \ No newline at end of file diff --git a/adapter/local/README.md b/adapter/local/README.md deleted file mode 100644 index 010c06a1..00000000 --- a/adapter/local/README.md +++ /dev/null @@ -1,85 +0,0 @@ -# 本地部署 - -可将本项目在本地运行,方便调试。 - - -### 使用步骤 - -#### 1. 创建`config.json` - -为了隐私安全,这里把本地的一些配置写在了`config.json`。请自行实现。并放在`index.js`同级目录下。 -```json5 -{ - // 本地端口,默认8787 - "port": 8787, - - // 本地host,默认0.0.0.0 - "host": "0.0.0.0", - - // 你的的域名,用于webhook绑定 - "server": "https://workers.example.cn", - - // 默认内存数据库 - "database": { - // 数据库类型: 支持 memory, local, sqlite, redis - "type": "sqlite", - // 当type为local时, uri为json文件路径 - // 当type为sqlite时, uri为数据库文件路径 - // 当type为redis时, uri为redis连接字符串 - "uri": "./database.json" - }, - - // 环境变量配置路径, 使用toml格式, 所有变量放在[vars]里面。格式与wrangler.toml兼容 - "toml": "../../wrangler.toml" -} -``` - -#### 2. 端口映射 - -- 如果你没有公网IP,为了让telegram的webhook可以访问到本地的服务,需要进行端口映射。可以使用`ngrok`,`frp`或者`cloudflared`等工具。只时候把你的`config.json`里的`server`配置成临时的域名即可。 -- 如果你有公网IP,自行配置域名解析即可。 - - -#### 3. 启动 - -```bash -npm install -npm run start -``` -重新调用`https://yourdomain.com/init`接口即可。 - -#### 4. 数据库 - -- `memory`: 默认使用内存数据库,重启后数据会丢失。 -- `local`: 使用本地json文件数据库,需要配置`config.json`里的`database.uri`为json文件路径。 -- `sqlite`: 使用sqlite数据库,需要配置`config.json`里的`database.uri`为数据库文件路径。linux需要安装`sqlite3`。方法为`sudo apt install sqlite3`。 -- `redis`: 使用redis数据库,需要配置`config.json`里的`database.uri`为redis连接字符串。 - - -#### 5. 代理环境 - -如果你的环境不能直接访问telegram的api,可以使用代理环境。必须要给`fetch`代理环境。默认会读取`config.json`里的`https_proxy`字段。如果没有配置这个字段则会读取环境变量`https_proxy`。如果都没有配置则不会代理。但是这样可能会导致请求telegram的api失败。 - - -#### 6. 调试 - -使用vscode调试的时候,要在`package.json`里按`debug`按钮,并选择对于脚本才能进行调试。 - -#### 7. 设置`systemd` - -如果你想要在linux上使用systemd来管理nodejs服务,可以添加下面文件到`/etc/systemd/system/`目录下。 - -```bash -[Unit] -Description=telegram-bot -After=network.target - -[Service] -Type=simple -User=root # 你的用户名 -WorkingDirectory=/root/telegram-bot/adapter/local # 你的项目路径 -ExecStart=/usr/bin/npm run start -Restart=always -RestartSec=3 -``` - diff --git a/adapter/local/index.js b/adapter/local/index.js deleted file mode 100644 index 5cab5017..00000000 --- a/adapter/local/index.js +++ /dev/null @@ -1,35 +0,0 @@ -import fs from 'node:fs'; -import * as process from 'node:process'; -import { createCache, startServer } from 'cloudflare-worker-adapter'; -import { installFetchProxy } from 'cloudflare-worker-adapter/fetchProxy'; -import worker from '../../main.js'; -import { ENV } from '../../src/config/env.js'; - -const config = JSON.parse(fs.readFileSync('./config.json', 'utf-8')); -const cache = await createCache(config?.database?.type, config?.database); -console.log(`database: ${config?.database?.type} is ready`); - -// 配置代理 -const proxy = config?.https_proxy || process.env.HTTPS_PROXY || process.env.https_proxy || process.env.HTTP_PROXY || process.env.http_proxy; -if (proxy) { - installFetchProxy(proxy); -} - -// 配置版本信息 -try { - const buildInfo = JSON.parse(fs.readFileSync('../../dist/buildinfo.json', 'utf-8')); - ENV.BUILD_TIMESTAMP = buildInfo.timestamp; - ENV.BUILD_VERSION = buildInfo.sha; - console.log(buildInfo); -} catch (e) { - console.log(e); -} - -startServer( - config.port || 8787, - config.host || '0.0.0.0', - '../../wrangler.toml', - { DATABASE: cache }, - { baseURL: config.server }, - worker.fetch, -); diff --git a/adapter/local/package.json b/adapter/local/package.json deleted file mode 100644 index 6b93060d..00000000 --- a/adapter/local/package.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "name": "local", - "type": "module", - "version": "1.0.0", - "description": "", - "author": "TBXark", - "license": "ISC", - "main": "index.js", - "scripts": { - "start": "node index.js", - "debug": "node --watch index.js" - }, - "dependencies": { - "cloudflare-worker-adapter": "1.2.2" - } -} diff --git a/adapter/local/yarn.lock b/adapter/local/yarn.lock deleted file mode 100644 index 0a6f8240..00000000 --- a/adapter/local/yarn.lock +++ /dev/null @@ -1,990 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@gar/promisify@^1.0.1": - version "1.1.3" - resolved "https://registry.yarnpkg.com/@gar/promisify/-/promisify-1.1.3.tgz#555193ab2e3bb3b6adc3d551c9c030d9e860daf6" - integrity sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw== - -"@ioredis/commands@^1.1.1": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@ioredis/commands/-/commands-1.2.0.tgz#6d61b3097470af1fdbbe622795b8921d42018e11" - integrity sha512-Sx1pU8EM64o2BrqNpEO1CNLtKQwyhuXuqyfH7oGKCk+1a33d2r5saW8zNwm3j6BTExtjrv2BxTgzzkMwts6vGg== - -"@npmcli/fs@^1.0.0": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-1.1.1.tgz#72f719fe935e687c56a4faecf3c03d06ba593257" - integrity sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ== - dependencies: - "@gar/promisify" "^1.0.1" - semver "^7.3.5" - -"@npmcli/move-file@^1.0.1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-1.1.2.tgz#1a82c3e372f7cae9253eb66d72543d6b8685c674" - integrity sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg== - dependencies: - mkdirp "^1.0.4" - rimraf "^3.0.2" - -"@tootallnate/once@1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" - integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== - -abbrev@1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" - integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== - -agent-base@6, agent-base@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" - integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== - dependencies: - debug "4" - -agent-base@^7.0.2: - version "7.1.1" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-7.1.1.tgz#bdbded7dfb096b751a2a087eeeb9664725b2e317" - integrity sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA== - dependencies: - debug "^4.3.4" - -agentkeepalive@^4.1.3: - version "4.5.0" - resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.5.0.tgz#2673ad1389b3c418c5a20c5d7364f93ca04be923" - integrity sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew== - dependencies: - humanize-ms "^1.2.1" - -aggregate-error@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" - integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== - dependencies: - clean-stack "^2.0.0" - indent-string "^4.0.0" - -ansi-regex@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" - integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== - -"aproba@^1.0.3 || ^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" - integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== - -are-we-there-yet@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz#679df222b278c64f2cdba1175cdc00b0d96164bd" - integrity sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg== - dependencies: - delegates "^1.0.0" - readable-stream "^3.6.0" - -balanced-match@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" - integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== - -base64-js@^1.3.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" - integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== - -bindings@^1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" - integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== - dependencies: - file-uri-to-path "1.0.0" - -bl@^4.0.3: - version "4.1.0" - resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" - integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== - dependencies: - buffer "^5.5.0" - inherits "^2.0.4" - readable-stream "^3.4.0" - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -buffer@^5.5.0: - version "5.7.1" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" - integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== - dependencies: - base64-js "^1.3.1" - ieee754 "^1.1.13" - -cacache@^15.2.0: - version "15.3.0" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-15.3.0.tgz#dc85380fb2f556fe3dda4c719bfa0ec875a7f1eb" - integrity sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ== - dependencies: - "@npmcli/fs" "^1.0.0" - "@npmcli/move-file" "^1.0.1" - chownr "^2.0.0" - fs-minipass "^2.0.0" - glob "^7.1.4" - infer-owner "^1.0.4" - lru-cache "^6.0.0" - minipass "^3.1.1" - minipass-collect "^1.0.2" - minipass-flush "^1.0.5" - minipass-pipeline "^1.2.2" - mkdirp "^1.0.3" - p-map "^4.0.0" - promise-inflight "^1.0.1" - rimraf "^3.0.2" - ssri "^8.0.1" - tar "^6.0.2" - unique-filename "^1.1.1" - -chownr@^1.1.1: - version "1.1.4" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" - integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== - -chownr@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" - integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== - -clean-stack@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" - integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== - -cloudflare-worker-adapter@1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/cloudflare-worker-adapter/-/cloudflare-worker-adapter-1.2.2.tgz#b0139424bee23fd4ceae50e65388da7c4e913401" - integrity sha512-FuqyGK18DTgf0P5/H7lzDwUh2CTxyqItdI0ZZBnvHjYceF1r8nPkV0uN8OG9+18fSdl5Y0s9Ybf4UM/AYH8eng== - dependencies: - https-proxy-agent "^7.0.5" - ioredis "^5.4.1" - node-fetch "^3.3.2" - sqlite3 "^5" - toml "^3.0.0" - -cluster-key-slot@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/cluster-key-slot/-/cluster-key-slot-1.1.2.tgz#88ddaa46906e303b5de30d3153b7d9fe0a0c19ac" - integrity sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA== - -color-support@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" - integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== - -console-control-strings@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" - integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ== - -data-uri-to-buffer@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz#d8feb2b2881e6a4f58c2e08acfd0e2834e26222e" - integrity sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A== - -debug@4, debug@^4.3.3, debug@^4.3.4: - version "4.3.6" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.6.tgz#2ab2c38fbaffebf8aa95fdfe6d88438c7a13c52b" - integrity sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg== - dependencies: - ms "2.1.2" - -decompress-response@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" - integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== - dependencies: - mimic-response "^3.1.0" - -deep-extend@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" - integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== - -delegates@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" - integrity sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ== - -denque@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/denque/-/denque-2.1.0.tgz#e93e1a6569fb5e66f16a3c2a2964617d349d6ab1" - integrity sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw== - -detect-libc@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.3.tgz#f0cd503b40f9939b894697d19ad50895e30cf700" - integrity sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw== - -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" - integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== - -encoding@^0.1.12: - version "0.1.13" - resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" - integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== - dependencies: - iconv-lite "^0.6.2" - -end-of-stream@^1.1.0, end-of-stream@^1.4.1: - version "1.4.4" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" - integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== - dependencies: - once "^1.4.0" - -env-paths@^2.2.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" - integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== - -err-code@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/err-code/-/err-code-2.0.3.tgz#23c2f3b756ffdfc608d30e27c9a941024807e7f9" - integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA== - -expand-template@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c" - integrity sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg== - -fetch-blob@^3.1.2, fetch-blob@^3.1.4: - version "3.2.0" - resolved "https://registry.yarnpkg.com/fetch-blob/-/fetch-blob-3.2.0.tgz#f09b8d4bbd45adc6f0c20b7e787e793e309dcce9" - integrity sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ== - dependencies: - node-domexception "^1.0.0" - web-streams-polyfill "^3.0.3" - -file-uri-to-path@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" - integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== - -formdata-polyfill@^4.0.10: - version "4.0.10" - resolved "https://registry.yarnpkg.com/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz#24807c31c9d402e002ab3d8c720144ceb8848423" - integrity sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g== - dependencies: - fetch-blob "^3.1.2" - -fs-constants@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" - integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== - -fs-minipass@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" - integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== - dependencies: - minipass "^3.0.0" - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== - -gauge@^4.0.3: - version "4.0.4" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-4.0.4.tgz#52ff0652f2bbf607a989793d53b751bef2328dce" - integrity sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg== - dependencies: - aproba "^1.0.3 || ^2.0.0" - color-support "^1.1.3" - console-control-strings "^1.1.0" - has-unicode "^2.0.1" - signal-exit "^3.0.7" - string-width "^4.2.3" - strip-ansi "^6.0.1" - wide-align "^1.1.5" - -github-from-package@0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce" - integrity sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw== - -glob@^7.1.3, glob@^7.1.4: - version "7.2.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" - integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.1.1" - once "^1.3.0" - path-is-absolute "^1.0.0" - -graceful-fs@^4.2.6: - version "4.2.11" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" - integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== - -has-unicode@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" - integrity sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ== - -http-cache-semantics@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" - integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== - -http-proxy-agent@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" - integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== - dependencies: - "@tootallnate/once" "1" - agent-base "6" - debug "4" - -https-proxy-agent@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" - integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== - dependencies: - agent-base "6" - debug "4" - -https-proxy-agent@^7.0.5: - version "7.0.5" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz#9e8b5013873299e11fab6fd548405da2d6c602b2" - integrity sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw== - dependencies: - agent-base "^7.0.2" - debug "4" - -humanize-ms@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" - integrity sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ== - dependencies: - ms "^2.0.0" - -iconv-lite@^0.6.2: - version "0.6.3" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" - integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== - dependencies: - safer-buffer ">= 2.1.2 < 3.0.0" - -ieee754@^1.1.13: - version "1.2.1" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" - integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== - -imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== - -indent-string@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" - integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== - -infer-owner@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" - integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2, inherits@^2.0.3, inherits@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -ini@~1.3.0: - version "1.3.8" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" - integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== - -ioredis@^5.4.1: - version "5.4.1" - resolved "https://registry.yarnpkg.com/ioredis/-/ioredis-5.4.1.tgz#1c56b70b759f01465913887375ed809134296f40" - integrity sha512-2YZsvl7jopIa1gaePkeMtd9rAcSjOOjPtpcLlOeusyO+XH2SK5ZcT+UCrElPP+WVIInh2TzeI4XW9ENaSLVVHA== - dependencies: - "@ioredis/commands" "^1.1.1" - cluster-key-slot "^1.1.0" - debug "^4.3.4" - denque "^2.1.0" - lodash.defaults "^4.2.0" - lodash.isarguments "^3.1.0" - redis-errors "^1.2.0" - redis-parser "^3.0.0" - standard-as-callback "^2.1.0" - -ip-address@^9.0.5: - version "9.0.5" - resolved "https://registry.yarnpkg.com/ip-address/-/ip-address-9.0.5.tgz#117a960819b08780c3bd1f14ef3c1cc1d3f3ea5a" - integrity sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g== - dependencies: - jsbn "1.1.0" - sprintf-js "^1.1.3" - -is-fullwidth-code-point@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" - integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== - -is-lambda@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-lambda/-/is-lambda-1.0.1.tgz#3d9877899e6a53efc0160504cde15f82e6f061d5" - integrity sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ== - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== - -jsbn@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-1.1.0.tgz#b01307cb29b618a1ed26ec79e911f803c4da0040" - integrity sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A== - -lodash.defaults@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c" - integrity sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ== - -lodash.isarguments@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" - integrity sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg== - -lru-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" - integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== - dependencies: - yallist "^4.0.0" - -make-fetch-happen@^9.1.0: - version "9.1.0" - resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz#53085a09e7971433e6765f7971bf63f4e05cb968" - integrity sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg== - dependencies: - agentkeepalive "^4.1.3" - cacache "^15.2.0" - http-cache-semantics "^4.1.0" - http-proxy-agent "^4.0.1" - https-proxy-agent "^5.0.0" - is-lambda "^1.0.1" - lru-cache "^6.0.0" - minipass "^3.1.3" - minipass-collect "^1.0.2" - minipass-fetch "^1.3.2" - minipass-flush "^1.0.5" - minipass-pipeline "^1.2.4" - negotiator "^0.6.2" - promise-retry "^2.0.1" - socks-proxy-agent "^6.0.0" - ssri "^8.0.0" - -mimic-response@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" - integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== - -minimatch@^3.1.1: - version "3.1.2" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== - dependencies: - brace-expansion "^1.1.7" - -minimist@^1.2.0, minimist@^1.2.3: - version "1.2.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" - integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== - -minipass-collect@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617" - integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA== - dependencies: - minipass "^3.0.0" - -minipass-fetch@^1.3.2: - version "1.4.1" - resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-1.4.1.tgz#d75e0091daac1b0ffd7e9d41629faff7d0c1f1b6" - integrity sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw== - dependencies: - minipass "^3.1.0" - minipass-sized "^1.0.3" - minizlib "^2.0.0" - optionalDependencies: - encoding "^0.1.12" - -minipass-flush@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373" - integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== - dependencies: - minipass "^3.0.0" - -minipass-pipeline@^1.2.2, minipass-pipeline@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c" - integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== - dependencies: - minipass "^3.0.0" - -minipass-sized@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/minipass-sized/-/minipass-sized-1.0.3.tgz#70ee5a7c5052070afacfbc22977ea79def353b70" - integrity sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g== - dependencies: - minipass "^3.0.0" - -minipass@^3.0.0, minipass@^3.1.0, minipass@^3.1.1, minipass@^3.1.3: - version "3.3.6" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.6.tgz#7bba384db3a1520d18c9c0e5251c3444e95dd94a" - integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw== - dependencies: - yallist "^4.0.0" - -minipass@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d" - integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== - -minizlib@^2.0.0, minizlib@^2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" - integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== - dependencies: - minipass "^3.0.0" - yallist "^4.0.0" - -mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3: - version "0.5.3" - resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113" - integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== - -mkdirp@^1.0.3, mkdirp@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" - integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== - -ms@2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - -ms@^2.0.0: - version "2.1.3" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - -napi-build-utils@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-1.0.2.tgz#b1fddc0b2c46e380a0b7a76f984dd47c41a13806" - integrity sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg== - -negotiator@^0.6.2: - version "0.6.3" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" - integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== - -node-abi@^3.3.0: - version "3.65.0" - resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.65.0.tgz#ca92d559388e1e9cab1680a18c1a18757cdac9d3" - integrity sha512-ThjYBfoDNr08AWx6hGaRbfPwxKV9kVzAzOzlLKbk2CuqXE2xnCh+cbAGnwM3t8Lq4v9rUB7VfondlkBckcJrVA== - dependencies: - semver "^7.3.5" - -node-addon-api@^7.0.0: - version "7.1.1" - resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-7.1.1.tgz#1aba6693b0f255258a049d621329329322aad558" - integrity sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ== - -node-domexception@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/node-domexception/-/node-domexception-1.0.0.tgz#6888db46a1f71c0b76b3f7555016b63fe64766e5" - integrity sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ== - -node-fetch@^3.3.2: - version "3.3.2" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-3.3.2.tgz#d1e889bacdf733b4ff3b2b243eb7a12866a0b78b" - integrity sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA== - dependencies: - data-uri-to-buffer "^4.0.0" - fetch-blob "^3.1.4" - formdata-polyfill "^4.0.10" - -node-gyp@8.x: - version "8.4.1" - resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-8.4.1.tgz#3d49308fc31f768180957d6b5746845fbd429937" - integrity sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w== - dependencies: - env-paths "^2.2.0" - glob "^7.1.4" - graceful-fs "^4.2.6" - make-fetch-happen "^9.1.0" - nopt "^5.0.0" - npmlog "^6.0.0" - rimraf "^3.0.2" - semver "^7.3.5" - tar "^6.1.2" - which "^2.0.2" - -nopt@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-5.0.0.tgz#530942bb58a512fccafe53fe210f13a25355dc88" - integrity sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ== - dependencies: - abbrev "1" - -npmlog@^6.0.0: - version "6.0.2" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-6.0.2.tgz#c8166017a42f2dea92d6453168dd865186a70830" - integrity sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg== - dependencies: - are-we-there-yet "^3.0.0" - console-control-strings "^1.1.0" - gauge "^4.0.3" - set-blocking "^2.0.0" - -once@^1.3.0, once@^1.3.1, once@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== - dependencies: - wrappy "1" - -p-map@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" - integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== - dependencies: - aggregate-error "^3.0.0" - -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== - -prebuild-install@^7.1.1: - version "7.1.2" - resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-7.1.2.tgz#a5fd9986f5a6251fbc47e1e5c65de71e68c0a056" - integrity sha512-UnNke3IQb6sgarcZIDU3gbMeTp/9SSU1DAIkil7PrqG1vZlBtY5msYccSKSHDqa3hNg436IXK+SNImReuA1wEQ== - dependencies: - detect-libc "^2.0.0" - expand-template "^2.0.3" - github-from-package "0.0.0" - minimist "^1.2.3" - mkdirp-classic "^0.5.3" - napi-build-utils "^1.0.1" - node-abi "^3.3.0" - pump "^3.0.0" - rc "^1.2.7" - simple-get "^4.0.0" - tar-fs "^2.0.0" - tunnel-agent "^0.6.0" - -promise-inflight@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" - integrity sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g== - -promise-retry@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-2.0.1.tgz#ff747a13620ab57ba688f5fc67855410c370da22" - integrity sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g== - dependencies: - err-code "^2.0.2" - retry "^0.12.0" - -pump@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" - integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - -rc@^1.2.7: - version "1.2.8" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" - integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== - dependencies: - deep-extend "^0.6.0" - ini "~1.3.0" - minimist "^1.2.0" - strip-json-comments "~2.0.1" - -readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: - version "3.6.2" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" - integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - -redis-errors@^1.0.0, redis-errors@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/redis-errors/-/redis-errors-1.2.0.tgz#eb62d2adb15e4eaf4610c04afe1529384250abad" - integrity sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w== - -redis-parser@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/redis-parser/-/redis-parser-3.0.0.tgz#b66d828cdcafe6b4b8a428a7def4c6bcac31c8b4" - integrity sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A== - dependencies: - redis-errors "^1.0.0" - -retry@^0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" - integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow== - -rimraf@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" - integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== - dependencies: - glob "^7.1.3" - -safe-buffer@^5.0.1, safe-buffer@~5.2.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - -"safer-buffer@>= 2.1.2 < 3.0.0": - version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== - -semver@^7.3.5: - version "7.6.3" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" - integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== - -set-blocking@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" - integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== - -signal-exit@^3.0.7: - version "3.0.7" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" - integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== - -simple-concat@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f" - integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q== - -simple-get@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-4.0.1.tgz#4a39db549287c979d352112fa03fd99fd6bc3543" - integrity sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA== - dependencies: - decompress-response "^6.0.0" - once "^1.3.1" - simple-concat "^1.0.0" - -smart-buffer@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae" - integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== - -socks-proxy-agent@^6.0.0: - version "6.2.1" - resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz#2687a31f9d7185e38d530bef1944fe1f1496d6ce" - integrity sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ== - dependencies: - agent-base "^6.0.2" - debug "^4.3.3" - socks "^2.6.2" - -socks@^2.6.2: - version "2.8.3" - resolved "https://registry.yarnpkg.com/socks/-/socks-2.8.3.tgz#1ebd0f09c52ba95a09750afe3f3f9f724a800cb5" - integrity sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw== - dependencies: - ip-address "^9.0.5" - smart-buffer "^4.2.0" - -sprintf-js@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.3.tgz#4914b903a2f8b685d17fdf78a70e917e872e444a" - integrity sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA== - -sqlite3@^5: - version "5.1.7" - resolved "https://registry.yarnpkg.com/sqlite3/-/sqlite3-5.1.7.tgz#59ca1053c1ab38647396586edad019b1551041b7" - integrity sha512-GGIyOiFaG+TUra3JIfkI/zGP8yZYLPQ0pl1bH+ODjiX57sPhrLU5sQJn1y9bDKZUFYkX1crlrPfSYt0BKKdkog== - dependencies: - bindings "^1.5.0" - node-addon-api "^7.0.0" - prebuild-install "^7.1.1" - tar "^6.1.11" - optionalDependencies: - node-gyp "8.x" - -ssri@^8.0.0, ssri@^8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-8.0.1.tgz#638e4e439e2ffbd2cd289776d5ca457c4f51a2af" - integrity sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ== - dependencies: - minipass "^3.1.1" - -standard-as-callback@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/standard-as-callback/-/standard-as-callback-2.1.0.tgz#8953fc05359868a77b5b9739a665c5977bb7df45" - integrity sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A== - -"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.2.3: - version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -string_decoder@^1.1.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" - -strip-ansi@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - -strip-json-comments@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" - integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== - -tar-fs@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.1.tgz#489a15ab85f1f0befabb370b7de4f9eb5cbe8784" - integrity sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng== - dependencies: - chownr "^1.1.1" - mkdirp-classic "^0.5.2" - pump "^3.0.0" - tar-stream "^2.1.4" - -tar-stream@^2.1.4: - version "2.2.0" - resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" - integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== - dependencies: - bl "^4.0.3" - end-of-stream "^1.4.1" - fs-constants "^1.0.0" - inherits "^2.0.3" - readable-stream "^3.1.1" - -tar@^6.0.2, tar@^6.1.11, tar@^6.1.2: - version "6.2.1" - resolved "https://registry.yarnpkg.com/tar/-/tar-6.2.1.tgz#717549c541bc3c2af15751bea94b1dd068d4b03a" - integrity sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A== - dependencies: - chownr "^2.0.0" - fs-minipass "^2.0.0" - minipass "^5.0.0" - minizlib "^2.1.1" - mkdirp "^1.0.3" - yallist "^4.0.0" - -toml@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/toml/-/toml-3.0.0.tgz#342160f1af1904ec9d204d03a5d61222d762c5ee" - integrity sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w== - -tunnel-agent@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" - integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w== - dependencies: - safe-buffer "^5.0.1" - -unique-filename@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" - integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== - dependencies: - unique-slug "^2.0.0" - -unique-slug@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c" - integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w== - dependencies: - imurmurhash "^0.1.4" - -util-deprecate@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== - -web-streams-polyfill@^3.0.3: - version "3.3.3" - resolved "https://registry.yarnpkg.com/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz#2073b91a2fdb1fbfbd401e7de0ac9f8214cecb4b" - integrity sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw== - -which@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" - integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== - dependencies: - isexe "^2.0.0" - -wide-align@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3" - integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg== - dependencies: - string-width "^1.0.2 || 2 || 3 || 4" - -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== - -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== diff --git a/adapter/local_v2/.gitignore b/adapter/local_v2/.gitignore deleted file mode 100644 index a977be20..00000000 --- a/adapter/local_v2/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -build -config.json -cache.json \ No newline at end of file diff --git a/adapter/local_v2/Dockerfile b/adapter/local_v2/Dockerfile deleted file mode 100644 index ce9f30a4..00000000 --- a/adapter/local_v2/Dockerfile +++ /dev/null @@ -1,6 +0,0 @@ -FROM node:20 -WORKDIR /app -COPY ./build/index.js /app/index.js -ENV CONFIG_PATH=/app/config.json -ENV CACHE_PATH=/app/cache.json -CMD [ "node", "index.js" ] diff --git a/adapter/local_v2/README.md b/adapter/local_v2/README.md deleted file mode 100644 index 782dcb22..00000000 --- a/adapter/local_v2/README.md +++ /dev/null @@ -1,21 +0,0 @@ -# 本地部署(无需域名版本) - -## 使用步骤 -配置为json,结构如下: -```json -{ - "vars": { - "KEY": "VALUE" - } -} -``` -1. 使用 `npm run config` 将toml配置文件转换为json配置文件 -2. 或者修改 `config-example.json` 为 `config.json` 并修改其中的配置 -3. 如果你的网络环境需要代理,请在 `index.js` 中修改相关注释代码 - -### 本地运行 -1. 使用 `npm run start` 启动服务 - -### Docker运行 -1. 使用 `npm run docker` 构建镜像 -2. 使用 `docker run -v $(pwd)/config.json:/app/config.json -v $(pwd)/cache.json:/app/cache.json chatgpt-telegram-bot:latest --name chatgpt-telegram-bot` 运行容器 \ No newline at end of file diff --git a/adapter/local_v2/config-example.json b/adapter/local_v2/config-example.json deleted file mode 100644 index d646cdcf..00000000 --- a/adapter/local_v2/config-example.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "vars": { - "TELEGRAM_AVAILABLE_TOKENS": "TOKEN1,TOKEN2", - "CHAT_WHITE_LIST": "USER_ID1,USER_ID2", - "TELEGRAM_BOT_NAME": "BOT_NAME1,BOT_NAME2", - "CHAT_GROUP_WHITE_LIST": "GROUP_ID1,GROUP_ID2", - "GROUP_CHAT_BOT_ENABLE": "true", - "AI_PROVIDER": "auto", - "AI_IMAGE_PROVIDER": "auto", - "OPENAI_API_KEY": "SK-1,SK-2" - } -} \ No newline at end of file diff --git a/adapter/local_v2/config.js b/adapter/local_v2/config.js deleted file mode 100644 index fa379b4c..00000000 --- a/adapter/local_v2/config.js +++ /dev/null @@ -1,7 +0,0 @@ -import fs from 'node:fs'; -import toml from 'toml'; - -const TOML_PATH = '../../wrangler.toml'; -const raw = fs.readFileSync(TOML_PATH, 'utf-8'); -const config = toml.parse(raw); -fs.writeFileSync('./config.json', JSON.stringify(config, null, ' ')); diff --git a/adapter/local_v2/esbuild.config.js b/adapter/local_v2/esbuild.config.js deleted file mode 100644 index 4d672079..00000000 --- a/adapter/local_v2/esbuild.config.js +++ /dev/null @@ -1,5 +0,0 @@ -import { build } from '../script/esbuild.config.js'; - -build('../../dist/buildinfo.json', 'build/index.js') - .then(() => console.log('Build success')) - .catch(() => process.exit(1)); diff --git a/adapter/local_v2/index.js b/adapter/local_v2/index.js deleted file mode 100644 index 74c19e94..00000000 --- a/adapter/local_v2/index.js +++ /dev/null @@ -1,60 +0,0 @@ -import fs from 'node:fs'; -import * as process from 'node:process'; -import { LocalCache } from 'cloudflare-worker-adapter/localCache'; -import { ENV, initEnv } from '../../src/config/env.js'; -import { deleteTelegramWebHook, getBotName, getTelegramUpdates } from '../../src/telegram/telegram.js'; -import i18n from '../../src/i18n/index.js'; -import { handleMessage } from '../../src/telegram/message.js'; - -// 如果你的环境需要代理才能访问Telegram API,请取消注释下面的代码,并根据实际情况修改代理地址 -// eslint-disable-next-line import/order -import { installFetchProxy } from 'cloudflare-worker-adapter/fetchProxy'; - -const proxy = process.env.HTTPS_PROXY || process.env.https_proxy || process.env.HTTP_PROXY || process.env.http_proxy; -installFetchProxy(proxy); - -const { - CONFIG_PATH = './config.json', - CACHE_PATH = './cache.json', -} = process.env; - -if (!fs.existsSync(CACHE_PATH)) { - fs.writeFileSync(CACHE_PATH, '{}'); -} - -// Initialize environment -const cache = new LocalCache(CACHE_PATH); -initEnv({ - ...(JSON.parse(fs.readFileSync(CONFIG_PATH, 'utf-8')).vars), - DATABASE: cache, -}, i18n); - -// Delete all webhooks -const offset = {}; -for (const token of ENV.TELEGRAM_AVAILABLE_TOKENS) { - offset[token] = 0; - const name = await getBotName(token); - await deleteTelegramWebHook(token); - console.log(`@${name} Webhook deleted, If you want to use webhook, please set it up again.`); -} - -while (true) { - for (const token of ENV.TELEGRAM_AVAILABLE_TOKENS) { - try { - /** - * @type {TelegramWebhookRequest[]} - */ - const { result } = await getTelegramUpdates(token, offset[token]); - for (const update of result) { - if (update.update_id >= offset[token]) { - offset[token] = update.update_id + 1; - } - setImmediate(async () => { - await handleMessage(token, update).catch(console.error); - }); - } - } catch (e) { - console.error(e); - } - } -} diff --git a/adapter/local_v2/package.json b/adapter/local_v2/package.json deleted file mode 100644 index 5ff66fbc..00000000 --- a/adapter/local_v2/package.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "name": "local_v2", - "type": "module", - "version": "1.0.0", - "license": "MIT", - "main": "index.js", - "scripts": { - "start": "node index.js", - "build": "node esbuild.config.js", - "config": "node config.js", - "docker": "npm run build && docker build -t chatgpt-telegram-bot:latest ." - }, - "dependencies": { - "https-proxy-agent": "^7.0.5", - "node-fetch": "^3.3.2", - "cloudflare-worker-adapter": "1.2.1" - }, - "devDependencies": { - "esbuild": "^0.23.0", - "toml": "^3.0.0" - } -} diff --git a/adapter/local_v2/yarn.lock b/adapter/local_v2/yarn.lock deleted file mode 100644 index 0b643658..00000000 --- a/adapter/local_v2/yarn.lock +++ /dev/null @@ -1,1140 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@esbuild/aix-ppc64@0.23.0": - version "0.23.0" - resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.23.0.tgz#145b74d5e4a5223489cabdc238d8dad902df5259" - integrity sha512-3sG8Zwa5fMcA9bgqB8AfWPQ+HFke6uD3h1s3RIwUNK8EG7a4buxvuFTs3j1IMs2NXAk9F30C/FF4vxRgQCcmoQ== - -"@esbuild/android-arm64@0.23.0": - version "0.23.0" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.23.0.tgz#453bbe079fc8d364d4c5545069e8260228559832" - integrity sha512-EuHFUYkAVfU4qBdyivULuu03FhJO4IJN9PGuABGrFy4vUuzk91P2d+npxHcFdpUnfYKy0PuV+n6bKIpHOB3prQ== - -"@esbuild/android-arm@0.23.0": - version "0.23.0" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.23.0.tgz#26c806853aa4a4f7e683e519cd9d68e201ebcf99" - integrity sha512-+KuOHTKKyIKgEEqKbGTK8W7mPp+hKinbMBeEnNzjJGyFcWsfrXjSTNluJHCY1RqhxFurdD8uNXQDei7qDlR6+g== - -"@esbuild/android-x64@0.23.0": - version "0.23.0" - resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.23.0.tgz#1e51af9a6ac1f7143769f7ee58df5b274ed202e6" - integrity sha512-WRrmKidLoKDl56LsbBMhzTTBxrsVwTKdNbKDalbEZr0tcsBgCLbEtoNthOW6PX942YiYq8HzEnb4yWQMLQuipQ== - -"@esbuild/darwin-arm64@0.23.0": - version "0.23.0" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.23.0.tgz#d996187a606c9534173ebd78c58098a44dd7ef9e" - integrity sha512-YLntie/IdS31H54Ogdn+v50NuoWF5BDkEUFpiOChVa9UnKpftgwzZRrI4J132ETIi+D8n6xh9IviFV3eXdxfow== - -"@esbuild/darwin-x64@0.23.0": - version "0.23.0" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.23.0.tgz#30c8f28a7ef4e32fe46501434ebe6b0912e9e86c" - integrity sha512-IMQ6eme4AfznElesHUPDZ+teuGwoRmVuuixu7sv92ZkdQcPbsNHzutd+rAfaBKo8YK3IrBEi9SLLKWJdEvJniQ== - -"@esbuild/freebsd-arm64@0.23.0": - version "0.23.0" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.23.0.tgz#30f4fcec8167c08a6e8af9fc14b66152232e7fb4" - integrity sha512-0muYWCng5vqaxobq6LB3YNtevDFSAZGlgtLoAc81PjUfiFz36n4KMpwhtAd4he8ToSI3TGyuhyx5xmiWNYZFyw== - -"@esbuild/freebsd-x64@0.23.0": - version "0.23.0" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.23.0.tgz#1003a6668fe1f5d4439e6813e5b09a92981bc79d" - integrity sha512-XKDVu8IsD0/q3foBzsXGt/KjD/yTKBCIwOHE1XwiXmrRwrX6Hbnd5Eqn/WvDekddK21tfszBSrE/WMaZh+1buQ== - -"@esbuild/linux-arm64@0.23.0": - version "0.23.0" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.23.0.tgz#3b9a56abfb1410bb6c9138790f062587df3e6e3a" - integrity sha512-j1t5iG8jE7BhonbsEg5d9qOYcVZv/Rv6tghaXM/Ug9xahM0nX/H2gfu6X6z11QRTMT6+aywOMA8TDkhPo8aCGw== - -"@esbuild/linux-arm@0.23.0": - version "0.23.0" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.23.0.tgz#237a8548e3da2c48cd79ae339a588f03d1889aad" - integrity sha512-SEELSTEtOFu5LPykzA395Mc+54RMg1EUgXP+iw2SJ72+ooMwVsgfuwXo5Fn0wXNgWZsTVHwY2cg4Vi/bOD88qw== - -"@esbuild/linux-ia32@0.23.0": - version "0.23.0" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.23.0.tgz#4269cd19cb2de5de03a7ccfc8855dde3d284a238" - integrity sha512-P7O5Tkh2NbgIm2R6x1zGJJsnacDzTFcRWZyTTMgFdVit6E98LTxO+v8LCCLWRvPrjdzXHx9FEOA8oAZPyApWUA== - -"@esbuild/linux-loong64@0.23.0": - version "0.23.0" - resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.23.0.tgz#82b568f5658a52580827cc891cb69d2cb4f86280" - integrity sha512-InQwepswq6urikQiIC/kkx412fqUZudBO4SYKu0N+tGhXRWUqAx+Q+341tFV6QdBifpjYgUndV1hhMq3WeJi7A== - -"@esbuild/linux-mips64el@0.23.0": - version "0.23.0" - resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.23.0.tgz#9a57386c926262ae9861c929a6023ed9d43f73e5" - integrity sha512-J9rflLtqdYrxHv2FqXE2i1ELgNjT+JFURt/uDMoPQLcjWQA5wDKgQA4t/dTqGa88ZVECKaD0TctwsUfHbVoi4w== - -"@esbuild/linux-ppc64@0.23.0": - version "0.23.0" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.23.0.tgz#f3a79fd636ba0c82285d227eb20ed8e31b4444f6" - integrity sha512-cShCXtEOVc5GxU0fM+dsFD10qZ5UpcQ8AM22bYj0u/yaAykWnqXJDpd77ublcX6vdDsWLuweeuSNZk4yUxZwtw== - -"@esbuild/linux-riscv64@0.23.0": - version "0.23.0" - resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.23.0.tgz#f9d2ef8356ce6ce140f76029680558126b74c780" - integrity sha512-HEtaN7Y5UB4tZPeQmgz/UhzoEyYftbMXrBCUjINGjh3uil+rB/QzzpMshz3cNUxqXN7Vr93zzVtpIDL99t9aRw== - -"@esbuild/linux-s390x@0.23.0": - version "0.23.0" - resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.23.0.tgz#45390f12e802201f38a0229e216a6aed4351dfe8" - integrity sha512-WDi3+NVAuyjg/Wxi+o5KPqRbZY0QhI9TjrEEm+8dmpY9Xir8+HE/HNx2JoLckhKbFopW0RdO2D72w8trZOV+Wg== - -"@esbuild/linux-x64@0.23.0": - version "0.23.0" - resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.23.0.tgz#c8409761996e3f6db29abcf9b05bee8d7d80e910" - integrity sha512-a3pMQhUEJkITgAw6e0bWA+F+vFtCciMjW/LPtoj99MhVt+Mfb6bbL9hu2wmTZgNd994qTAEw+U/r6k3qHWWaOQ== - -"@esbuild/netbsd-x64@0.23.0": - version "0.23.0" - resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.23.0.tgz#ba70db0114380d5f6cfb9003f1d378ce989cd65c" - integrity sha512-cRK+YDem7lFTs2Q5nEv/HHc4LnrfBCbH5+JHu6wm2eP+d8OZNoSMYgPZJq78vqQ9g+9+nMuIsAO7skzphRXHyw== - -"@esbuild/openbsd-arm64@0.23.0": - version "0.23.0" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.23.0.tgz#72fc55f0b189f7a882e3cf23f332370d69dfd5db" - integrity sha512-suXjq53gERueVWu0OKxzWqk7NxiUWSUlrxoZK7usiF50C6ipColGR5qie2496iKGYNLhDZkPxBI3erbnYkU0rQ== - -"@esbuild/openbsd-x64@0.23.0": - version "0.23.0" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.23.0.tgz#b6ae7a0911c18fe30da3db1d6d17a497a550e5d8" - integrity sha512-6p3nHpby0DM/v15IFKMjAaayFhqnXV52aEmv1whZHX56pdkK+MEaLoQWj+H42ssFarP1PcomVhbsR4pkz09qBg== - -"@esbuild/sunos-x64@0.23.0": - version "0.23.0" - resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.23.0.tgz#58f0d5e55b9b21a086bfafaa29f62a3eb3470ad8" - integrity sha512-BFelBGfrBwk6LVrmFzCq1u1dZbG4zy/Kp93w2+y83Q5UGYF1d8sCzeLI9NXjKyujjBBniQa8R8PzLFAUrSM9OA== - -"@esbuild/win32-arm64@0.23.0": - version "0.23.0" - resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.23.0.tgz#b858b2432edfad62e945d5c7c9e5ddd0f528ca6d" - integrity sha512-lY6AC8p4Cnb7xYHuIxQ6iYPe6MfO2CC43XXKo9nBXDb35krYt7KGhQnOkRGar5psxYkircpCqfbNDB4uJbS2jQ== - -"@esbuild/win32-ia32@0.23.0": - version "0.23.0" - resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.23.0.tgz#167ef6ca22a476c6c0c014a58b4f43ae4b80dec7" - integrity sha512-7L1bHlOTcO4ByvI7OXVI5pNN6HSu6pUQq9yodga8izeuB1KcT2UkHaH6118QJwopExPn0rMHIseCTx1CRo/uNA== - -"@esbuild/win32-x64@0.23.0": - version "0.23.0" - resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.23.0.tgz#db44a6a08520b5f25bbe409f34a59f2d4bcc7ced" - integrity sha512-Arm+WgUFLUATuoxCJcahGuk6Yj9Pzxd6l11Zb/2aAuv5kWWvvfhLFo2fni4uSK5vzlUdCGZ/BdV5tH8klj8p8g== - -"@gar/promisify@^1.0.1": - version "1.1.3" - resolved "https://registry.yarnpkg.com/@gar/promisify/-/promisify-1.1.3.tgz#555193ab2e3bb3b6adc3d551c9c030d9e860daf6" - integrity sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw== - -"@ioredis/commands@^1.1.1": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@ioredis/commands/-/commands-1.2.0.tgz#6d61b3097470af1fdbbe622795b8921d42018e11" - integrity sha512-Sx1pU8EM64o2BrqNpEO1CNLtKQwyhuXuqyfH7oGKCk+1a33d2r5saW8zNwm3j6BTExtjrv2BxTgzzkMwts6vGg== - -"@npmcli/fs@^1.0.0": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-1.1.1.tgz#72f719fe935e687c56a4faecf3c03d06ba593257" - integrity sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ== - dependencies: - "@gar/promisify" "^1.0.1" - semver "^7.3.5" - -"@npmcli/move-file@^1.0.1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-1.1.2.tgz#1a82c3e372f7cae9253eb66d72543d6b8685c674" - integrity sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg== - dependencies: - mkdirp "^1.0.4" - rimraf "^3.0.2" - -"@tootallnate/once@1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" - integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== - -abbrev@1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" - integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== - -agent-base@6, agent-base@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" - integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== - dependencies: - debug "4" - -agent-base@^7.0.2: - version "7.1.1" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-7.1.1.tgz#bdbded7dfb096b751a2a087eeeb9664725b2e317" - integrity sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA== - dependencies: - debug "^4.3.4" - -agentkeepalive@^4.1.3: - version "4.5.0" - resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.5.0.tgz#2673ad1389b3c418c5a20c5d7364f93ca04be923" - integrity sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew== - dependencies: - humanize-ms "^1.2.1" - -aggregate-error@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" - integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== - dependencies: - clean-stack "^2.0.0" - indent-string "^4.0.0" - -ansi-regex@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" - integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== - -"aproba@^1.0.3 || ^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" - integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== - -are-we-there-yet@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz#679df222b278c64f2cdba1175cdc00b0d96164bd" - integrity sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg== - dependencies: - delegates "^1.0.0" - readable-stream "^3.6.0" - -balanced-match@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" - integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== - -base64-js@^1.3.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" - integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== - -bindings@^1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" - integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== - dependencies: - file-uri-to-path "1.0.0" - -bl@^4.0.3: - version "4.1.0" - resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" - integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== - dependencies: - buffer "^5.5.0" - inherits "^2.0.4" - readable-stream "^3.4.0" - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -buffer@^5.5.0: - version "5.7.1" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" - integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== - dependencies: - base64-js "^1.3.1" - ieee754 "^1.1.13" - -cacache@^15.2.0: - version "15.3.0" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-15.3.0.tgz#dc85380fb2f556fe3dda4c719bfa0ec875a7f1eb" - integrity sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ== - dependencies: - "@npmcli/fs" "^1.0.0" - "@npmcli/move-file" "^1.0.1" - chownr "^2.0.0" - fs-minipass "^2.0.0" - glob "^7.1.4" - infer-owner "^1.0.4" - lru-cache "^6.0.0" - minipass "^3.1.1" - minipass-collect "^1.0.2" - minipass-flush "^1.0.5" - minipass-pipeline "^1.2.2" - mkdirp "^1.0.3" - p-map "^4.0.0" - promise-inflight "^1.0.1" - rimraf "^3.0.2" - ssri "^8.0.1" - tar "^6.0.2" - unique-filename "^1.1.1" - -chownr@^1.1.1: - version "1.1.4" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" - integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== - -chownr@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" - integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== - -clean-stack@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" - integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== - -cloudflare-worker-adapter@1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/cloudflare-worker-adapter/-/cloudflare-worker-adapter-1.2.1.tgz#d96434d2b6e6ebe8ebb935ae010ec3006e5da990" - integrity sha512-XRIJes+dUkM65sTQa4OmdT5QAnmJgIZFdSLBAoc8cezzKZgfsUwldF9RgEDKxLWLyBvgZFugROo7Jgcoaz7NBw== - dependencies: - https-proxy-agent "^7.0.5" - ioredis "^5.4.1" - node-fetch "^3.3.2" - sqlite3 "^5" - toml "^3.0.0" - -cluster-key-slot@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/cluster-key-slot/-/cluster-key-slot-1.1.2.tgz#88ddaa46906e303b5de30d3153b7d9fe0a0c19ac" - integrity sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA== - -color-support@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" - integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== - -console-control-strings@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" - integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ== - -data-uri-to-buffer@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz#d8feb2b2881e6a4f58c2e08acfd0e2834e26222e" - integrity sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A== - -debug@4, debug@^4.3.3, debug@^4.3.4: - version "4.3.6" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.6.tgz#2ab2c38fbaffebf8aa95fdfe6d88438c7a13c52b" - integrity sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg== - dependencies: - ms "2.1.2" - -decompress-response@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" - integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== - dependencies: - mimic-response "^3.1.0" - -deep-extend@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" - integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== - -delegates@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" - integrity sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ== - -denque@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/denque/-/denque-2.1.0.tgz#e93e1a6569fb5e66f16a3c2a2964617d349d6ab1" - integrity sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw== - -detect-libc@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.3.tgz#f0cd503b40f9939b894697d19ad50895e30cf700" - integrity sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw== - -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" - integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== - -encoding@^0.1.12: - version "0.1.13" - resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" - integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== - dependencies: - iconv-lite "^0.6.2" - -end-of-stream@^1.1.0, end-of-stream@^1.4.1: - version "1.4.4" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" - integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== - dependencies: - once "^1.4.0" - -env-paths@^2.2.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" - integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== - -err-code@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/err-code/-/err-code-2.0.3.tgz#23c2f3b756ffdfc608d30e27c9a941024807e7f9" - integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA== - -esbuild@^0.23.0: - version "0.23.0" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.23.0.tgz#de06002d48424d9fdb7eb52dbe8e95927f852599" - integrity sha512-1lvV17H2bMYda/WaFb2jLPeHU3zml2k4/yagNMG8Q/YtfMjCwEUZa2eXXMgZTVSL5q1n4H7sQ0X6CdJDqqeCFA== - optionalDependencies: - "@esbuild/aix-ppc64" "0.23.0" - "@esbuild/android-arm" "0.23.0" - "@esbuild/android-arm64" "0.23.0" - "@esbuild/android-x64" "0.23.0" - "@esbuild/darwin-arm64" "0.23.0" - "@esbuild/darwin-x64" "0.23.0" - "@esbuild/freebsd-arm64" "0.23.0" - "@esbuild/freebsd-x64" "0.23.0" - "@esbuild/linux-arm" "0.23.0" - "@esbuild/linux-arm64" "0.23.0" - "@esbuild/linux-ia32" "0.23.0" - "@esbuild/linux-loong64" "0.23.0" - "@esbuild/linux-mips64el" "0.23.0" - "@esbuild/linux-ppc64" "0.23.0" - "@esbuild/linux-riscv64" "0.23.0" - "@esbuild/linux-s390x" "0.23.0" - "@esbuild/linux-x64" "0.23.0" - "@esbuild/netbsd-x64" "0.23.0" - "@esbuild/openbsd-arm64" "0.23.0" - "@esbuild/openbsd-x64" "0.23.0" - "@esbuild/sunos-x64" "0.23.0" - "@esbuild/win32-arm64" "0.23.0" - "@esbuild/win32-ia32" "0.23.0" - "@esbuild/win32-x64" "0.23.0" - -expand-template@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c" - integrity sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg== - -fetch-blob@^3.1.2, fetch-blob@^3.1.4: - version "3.2.0" - resolved "https://registry.yarnpkg.com/fetch-blob/-/fetch-blob-3.2.0.tgz#f09b8d4bbd45adc6f0c20b7e787e793e309dcce9" - integrity sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ== - dependencies: - node-domexception "^1.0.0" - web-streams-polyfill "^3.0.3" - -file-uri-to-path@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" - integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== - -formdata-polyfill@^4.0.10: - version "4.0.10" - resolved "https://registry.yarnpkg.com/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz#24807c31c9d402e002ab3d8c720144ceb8848423" - integrity sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g== - dependencies: - fetch-blob "^3.1.2" - -fs-constants@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" - integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== - -fs-minipass@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" - integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== - dependencies: - minipass "^3.0.0" - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== - -gauge@^4.0.3: - version "4.0.4" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-4.0.4.tgz#52ff0652f2bbf607a989793d53b751bef2328dce" - integrity sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg== - dependencies: - aproba "^1.0.3 || ^2.0.0" - color-support "^1.1.3" - console-control-strings "^1.1.0" - has-unicode "^2.0.1" - signal-exit "^3.0.7" - string-width "^4.2.3" - strip-ansi "^6.0.1" - wide-align "^1.1.5" - -github-from-package@0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce" - integrity sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw== - -glob@^7.1.3, glob@^7.1.4: - version "7.2.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" - integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.1.1" - once "^1.3.0" - path-is-absolute "^1.0.0" - -graceful-fs@^4.2.6: - version "4.2.11" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" - integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== - -has-unicode@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" - integrity sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ== - -http-cache-semantics@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" - integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== - -http-proxy-agent@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" - integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== - dependencies: - "@tootallnate/once" "1" - agent-base "6" - debug "4" - -https-proxy-agent@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" - integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== - dependencies: - agent-base "6" - debug "4" - -https-proxy-agent@^7.0.5: - version "7.0.5" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz#9e8b5013873299e11fab6fd548405da2d6c602b2" - integrity sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw== - dependencies: - agent-base "^7.0.2" - debug "4" - -humanize-ms@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" - integrity sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ== - dependencies: - ms "^2.0.0" - -iconv-lite@^0.6.2: - version "0.6.3" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" - integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== - dependencies: - safer-buffer ">= 2.1.2 < 3.0.0" - -ieee754@^1.1.13: - version "1.2.1" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" - integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== - -imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== - -indent-string@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" - integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== - -infer-owner@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" - integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2, inherits@^2.0.3, inherits@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -ini@~1.3.0: - version "1.3.8" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" - integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== - -ioredis@^5.4.1: - version "5.4.1" - resolved "https://registry.yarnpkg.com/ioredis/-/ioredis-5.4.1.tgz#1c56b70b759f01465913887375ed809134296f40" - integrity sha512-2YZsvl7jopIa1gaePkeMtd9rAcSjOOjPtpcLlOeusyO+XH2SK5ZcT+UCrElPP+WVIInh2TzeI4XW9ENaSLVVHA== - dependencies: - "@ioredis/commands" "^1.1.1" - cluster-key-slot "^1.1.0" - debug "^4.3.4" - denque "^2.1.0" - lodash.defaults "^4.2.0" - lodash.isarguments "^3.1.0" - redis-errors "^1.2.0" - redis-parser "^3.0.0" - standard-as-callback "^2.1.0" - -ip-address@^9.0.5: - version "9.0.5" - resolved "https://registry.yarnpkg.com/ip-address/-/ip-address-9.0.5.tgz#117a960819b08780c3bd1f14ef3c1cc1d3f3ea5a" - integrity sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g== - dependencies: - jsbn "1.1.0" - sprintf-js "^1.1.3" - -is-fullwidth-code-point@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" - integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== - -is-lambda@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-lambda/-/is-lambda-1.0.1.tgz#3d9877899e6a53efc0160504cde15f82e6f061d5" - integrity sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ== - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== - -jsbn@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-1.1.0.tgz#b01307cb29b618a1ed26ec79e911f803c4da0040" - integrity sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A== - -lodash.defaults@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c" - integrity sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ== - -lodash.isarguments@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" - integrity sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg== - -lru-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" - integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== - dependencies: - yallist "^4.0.0" - -make-fetch-happen@^9.1.0: - version "9.1.0" - resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz#53085a09e7971433e6765f7971bf63f4e05cb968" - integrity sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg== - dependencies: - agentkeepalive "^4.1.3" - cacache "^15.2.0" - http-cache-semantics "^4.1.0" - http-proxy-agent "^4.0.1" - https-proxy-agent "^5.0.0" - is-lambda "^1.0.1" - lru-cache "^6.0.0" - minipass "^3.1.3" - minipass-collect "^1.0.2" - minipass-fetch "^1.3.2" - minipass-flush "^1.0.5" - minipass-pipeline "^1.2.4" - negotiator "^0.6.2" - promise-retry "^2.0.1" - socks-proxy-agent "^6.0.0" - ssri "^8.0.0" - -mimic-response@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" - integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== - -minimatch@^3.1.1: - version "3.1.2" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== - dependencies: - brace-expansion "^1.1.7" - -minimist@^1.2.0, minimist@^1.2.3: - version "1.2.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" - integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== - -minipass-collect@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617" - integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA== - dependencies: - minipass "^3.0.0" - -minipass-fetch@^1.3.2: - version "1.4.1" - resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-1.4.1.tgz#d75e0091daac1b0ffd7e9d41629faff7d0c1f1b6" - integrity sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw== - dependencies: - minipass "^3.1.0" - minipass-sized "^1.0.3" - minizlib "^2.0.0" - optionalDependencies: - encoding "^0.1.12" - -minipass-flush@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373" - integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== - dependencies: - minipass "^3.0.0" - -minipass-pipeline@^1.2.2, minipass-pipeline@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c" - integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== - dependencies: - minipass "^3.0.0" - -minipass-sized@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/minipass-sized/-/minipass-sized-1.0.3.tgz#70ee5a7c5052070afacfbc22977ea79def353b70" - integrity sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g== - dependencies: - minipass "^3.0.0" - -minipass@^3.0.0, minipass@^3.1.0, minipass@^3.1.1, minipass@^3.1.3: - version "3.3.6" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.6.tgz#7bba384db3a1520d18c9c0e5251c3444e95dd94a" - integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw== - dependencies: - yallist "^4.0.0" - -minipass@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d" - integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== - -minizlib@^2.0.0, minizlib@^2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" - integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== - dependencies: - minipass "^3.0.0" - yallist "^4.0.0" - -mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3: - version "0.5.3" - resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113" - integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== - -mkdirp@^1.0.3, mkdirp@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" - integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== - -ms@2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - -ms@^2.0.0: - version "2.1.3" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - -napi-build-utils@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-1.0.2.tgz#b1fddc0b2c46e380a0b7a76f984dd47c41a13806" - integrity sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg== - -negotiator@^0.6.2: - version "0.6.3" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" - integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== - -node-abi@^3.3.0: - version "3.65.0" - resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.65.0.tgz#ca92d559388e1e9cab1680a18c1a18757cdac9d3" - integrity sha512-ThjYBfoDNr08AWx6hGaRbfPwxKV9kVzAzOzlLKbk2CuqXE2xnCh+cbAGnwM3t8Lq4v9rUB7VfondlkBckcJrVA== - dependencies: - semver "^7.3.5" - -node-addon-api@^7.0.0: - version "7.1.1" - resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-7.1.1.tgz#1aba6693b0f255258a049d621329329322aad558" - integrity sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ== - -node-domexception@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/node-domexception/-/node-domexception-1.0.0.tgz#6888db46a1f71c0b76b3f7555016b63fe64766e5" - integrity sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ== - -node-fetch@^3.3.2: - version "3.3.2" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-3.3.2.tgz#d1e889bacdf733b4ff3b2b243eb7a12866a0b78b" - integrity sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA== - dependencies: - data-uri-to-buffer "^4.0.0" - fetch-blob "^3.1.4" - formdata-polyfill "^4.0.10" - -node-gyp@8.x: - version "8.4.1" - resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-8.4.1.tgz#3d49308fc31f768180957d6b5746845fbd429937" - integrity sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w== - dependencies: - env-paths "^2.2.0" - glob "^7.1.4" - graceful-fs "^4.2.6" - make-fetch-happen "^9.1.0" - nopt "^5.0.0" - npmlog "^6.0.0" - rimraf "^3.0.2" - semver "^7.3.5" - tar "^6.1.2" - which "^2.0.2" - -nopt@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-5.0.0.tgz#530942bb58a512fccafe53fe210f13a25355dc88" - integrity sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ== - dependencies: - abbrev "1" - -npmlog@^6.0.0: - version "6.0.2" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-6.0.2.tgz#c8166017a42f2dea92d6453168dd865186a70830" - integrity sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg== - dependencies: - are-we-there-yet "^3.0.0" - console-control-strings "^1.1.0" - gauge "^4.0.3" - set-blocking "^2.0.0" - -once@^1.3.0, once@^1.3.1, once@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== - dependencies: - wrappy "1" - -p-map@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" - integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== - dependencies: - aggregate-error "^3.0.0" - -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== - -prebuild-install@^7.1.1: - version "7.1.2" - resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-7.1.2.tgz#a5fd9986f5a6251fbc47e1e5c65de71e68c0a056" - integrity sha512-UnNke3IQb6sgarcZIDU3gbMeTp/9SSU1DAIkil7PrqG1vZlBtY5msYccSKSHDqa3hNg436IXK+SNImReuA1wEQ== - dependencies: - detect-libc "^2.0.0" - expand-template "^2.0.3" - github-from-package "0.0.0" - minimist "^1.2.3" - mkdirp-classic "^0.5.3" - napi-build-utils "^1.0.1" - node-abi "^3.3.0" - pump "^3.0.0" - rc "^1.2.7" - simple-get "^4.0.0" - tar-fs "^2.0.0" - tunnel-agent "^0.6.0" - -promise-inflight@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" - integrity sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g== - -promise-retry@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-2.0.1.tgz#ff747a13620ab57ba688f5fc67855410c370da22" - integrity sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g== - dependencies: - err-code "^2.0.2" - retry "^0.12.0" - -pump@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" - integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - -rc@^1.2.7: - version "1.2.8" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" - integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== - dependencies: - deep-extend "^0.6.0" - ini "~1.3.0" - minimist "^1.2.0" - strip-json-comments "~2.0.1" - -readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: - version "3.6.2" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" - integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - -redis-errors@^1.0.0, redis-errors@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/redis-errors/-/redis-errors-1.2.0.tgz#eb62d2adb15e4eaf4610c04afe1529384250abad" - integrity sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w== - -redis-parser@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/redis-parser/-/redis-parser-3.0.0.tgz#b66d828cdcafe6b4b8a428a7def4c6bcac31c8b4" - integrity sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A== - dependencies: - redis-errors "^1.0.0" - -retry@^0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" - integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow== - -rimraf@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" - integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== - dependencies: - glob "^7.1.3" - -safe-buffer@^5.0.1, safe-buffer@~5.2.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - -"safer-buffer@>= 2.1.2 < 3.0.0": - version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== - -semver@^7.3.5: - version "7.6.3" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" - integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== - -set-blocking@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" - integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== - -signal-exit@^3.0.7: - version "3.0.7" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" - integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== - -simple-concat@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f" - integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q== - -simple-get@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-4.0.1.tgz#4a39db549287c979d352112fa03fd99fd6bc3543" - integrity sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA== - dependencies: - decompress-response "^6.0.0" - once "^1.3.1" - simple-concat "^1.0.0" - -smart-buffer@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae" - integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== - -socks-proxy-agent@^6.0.0: - version "6.2.1" - resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz#2687a31f9d7185e38d530bef1944fe1f1496d6ce" - integrity sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ== - dependencies: - agent-base "^6.0.2" - debug "^4.3.3" - socks "^2.6.2" - -socks@^2.6.2: - version "2.8.3" - resolved "https://registry.yarnpkg.com/socks/-/socks-2.8.3.tgz#1ebd0f09c52ba95a09750afe3f3f9f724a800cb5" - integrity sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw== - dependencies: - ip-address "^9.0.5" - smart-buffer "^4.2.0" - -sprintf-js@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.3.tgz#4914b903a2f8b685d17fdf78a70e917e872e444a" - integrity sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA== - -sqlite3@^5: - version "5.1.7" - resolved "https://registry.yarnpkg.com/sqlite3/-/sqlite3-5.1.7.tgz#59ca1053c1ab38647396586edad019b1551041b7" - integrity sha512-GGIyOiFaG+TUra3JIfkI/zGP8yZYLPQ0pl1bH+ODjiX57sPhrLU5sQJn1y9bDKZUFYkX1crlrPfSYt0BKKdkog== - dependencies: - bindings "^1.5.0" - node-addon-api "^7.0.0" - prebuild-install "^7.1.1" - tar "^6.1.11" - optionalDependencies: - node-gyp "8.x" - -ssri@^8.0.0, ssri@^8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-8.0.1.tgz#638e4e439e2ffbd2cd289776d5ca457c4f51a2af" - integrity sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ== - dependencies: - minipass "^3.1.1" - -standard-as-callback@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/standard-as-callback/-/standard-as-callback-2.1.0.tgz#8953fc05359868a77b5b9739a665c5977bb7df45" - integrity sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A== - -"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.2.3: - version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -string_decoder@^1.1.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" - -strip-ansi@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - -strip-json-comments@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" - integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== - -tar-fs@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.1.tgz#489a15ab85f1f0befabb370b7de4f9eb5cbe8784" - integrity sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng== - dependencies: - chownr "^1.1.1" - mkdirp-classic "^0.5.2" - pump "^3.0.0" - tar-stream "^2.1.4" - -tar-stream@^2.1.4: - version "2.2.0" - resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" - integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== - dependencies: - bl "^4.0.3" - end-of-stream "^1.4.1" - fs-constants "^1.0.0" - inherits "^2.0.3" - readable-stream "^3.1.1" - -tar@^6.0.2, tar@^6.1.11, tar@^6.1.2: - version "6.2.1" - resolved "https://registry.yarnpkg.com/tar/-/tar-6.2.1.tgz#717549c541bc3c2af15751bea94b1dd068d4b03a" - integrity sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A== - dependencies: - chownr "^2.0.0" - fs-minipass "^2.0.0" - minipass "^5.0.0" - minizlib "^2.1.1" - mkdirp "^1.0.3" - yallist "^4.0.0" - -toml@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/toml/-/toml-3.0.0.tgz#342160f1af1904ec9d204d03a5d61222d762c5ee" - integrity sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w== - -tunnel-agent@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" - integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w== - dependencies: - safe-buffer "^5.0.1" - -unique-filename@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" - integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== - dependencies: - unique-slug "^2.0.0" - -unique-slug@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c" - integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w== - dependencies: - imurmurhash "^0.1.4" - -util-deprecate@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== - -web-streams-polyfill@^3.0.3: - version "3.3.3" - resolved "https://registry.yarnpkg.com/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz#2073b91a2fdb1fbfbd401e7de0ac9f8214cecb4b" - integrity sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw== - -which@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" - integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== - dependencies: - isexe "^2.0.0" - -wide-align@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3" - integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg== - dependencies: - string-width "^1.0.2 || 2 || 3 || 4" - -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== - -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== diff --git a/adapter/render/index.js b/adapter/render/index.js deleted file mode 100644 index a64ed99d..00000000 --- a/adapter/render/index.js +++ /dev/null @@ -1,44 +0,0 @@ -import fs from 'node:fs'; -import adapter from 'cloudflare-worker-adapter'; -import { RedisCache } from 'cloudflare-worker-adapter/redisCache'; - -const env = { - ...process.env, - DATABASE: RedisCache.createFromUri(process.env.REDIS_URL || 'redis://localhost:6379'), -}; - -try { - const buildInfo = JSON.parse(fs.readFileSync('../../dist/buildinfo.json', 'utf-8')); - process.env.BUILD_TIMESTAMP = buildInfo.timestamp; - process.env.BUILD_VERSION = buildInfo.sha; - console.log(buildInfo); -} catch (e) { - console.log(e); -} - -const bodyMethods = new Set(['POST', 'PUT', 'PATCH', 'DELETE']); - -/** - * @param {string} baseURL - * @param {Request} req - * @returns {Request} - */ -function requestBuilder(baseURL, req) { - const reqHost = req.headers['x-forwarded-host'] || req.headers.host; - const reqScheme = req.headers['x-forwarded-proto'] || req.headers['x-scheme']; - - const method = req.method; - const headers = req.headers; - const body = bodyMethods.has(method) ? req : null; - const reqInit = { method, headers, body }; - - if (reqHost) { - return new Request(`${reqScheme || 'http'}://${reqHost}${req.url}`, reqInit); - } else { - return new Request(baseURL + req.url, reqInit); - } -} - -// 延迟加载 ../main.js, 防止ENV过早初始化 -const { default: worker } = await import('../../main.js'); -adapter.startServerV2(Number.parseInt(env.PORT), env.HOST, env, {}, requestBuilder, worker.fetch); diff --git a/adapter/render/package.json b/adapter/render/package.json deleted file mode 100644 index 73d4db88..00000000 --- a/adapter/render/package.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "name": "chatgpt-telegram-workers-to-render", - "type": "module", - "version": "1.0.0", - "description": "render for chatgpt-telegram-workers", - "author": "Cheivin", - "license": "ISC", - "main": "index.js", - "scripts": { - "start": "node index.js", - "debug": "nodemon index.js" - }, - "dependencies": { - "cloudflare-worker-adapter": "^1.2.1" - } -} diff --git a/adapter/render/yarn.lock b/adapter/render/yarn.lock deleted file mode 100644 index b08c7511..00000000 --- a/adapter/render/yarn.lock +++ /dev/null @@ -1,990 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@gar/promisify@^1.0.1": - version "1.1.3" - resolved "https://registry.yarnpkg.com/@gar/promisify/-/promisify-1.1.3.tgz#555193ab2e3bb3b6adc3d551c9c030d9e860daf6" - integrity sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw== - -"@ioredis/commands@^1.1.1": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@ioredis/commands/-/commands-1.2.0.tgz#6d61b3097470af1fdbbe622795b8921d42018e11" - integrity sha512-Sx1pU8EM64o2BrqNpEO1CNLtKQwyhuXuqyfH7oGKCk+1a33d2r5saW8zNwm3j6BTExtjrv2BxTgzzkMwts6vGg== - -"@npmcli/fs@^1.0.0": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-1.1.1.tgz#72f719fe935e687c56a4faecf3c03d06ba593257" - integrity sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ== - dependencies: - "@gar/promisify" "^1.0.1" - semver "^7.3.5" - -"@npmcli/move-file@^1.0.1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-1.1.2.tgz#1a82c3e372f7cae9253eb66d72543d6b8685c674" - integrity sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg== - dependencies: - mkdirp "^1.0.4" - rimraf "^3.0.2" - -"@tootallnate/once@1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" - integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== - -abbrev@1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" - integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== - -agent-base@6, agent-base@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" - integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== - dependencies: - debug "4" - -agent-base@^7.0.2: - version "7.1.1" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-7.1.1.tgz#bdbded7dfb096b751a2a087eeeb9664725b2e317" - integrity sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA== - dependencies: - debug "^4.3.4" - -agentkeepalive@^4.1.3: - version "4.5.0" - resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.5.0.tgz#2673ad1389b3c418c5a20c5d7364f93ca04be923" - integrity sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew== - dependencies: - humanize-ms "^1.2.1" - -aggregate-error@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" - integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== - dependencies: - clean-stack "^2.0.0" - indent-string "^4.0.0" - -ansi-regex@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" - integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== - -"aproba@^1.0.3 || ^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" - integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== - -are-we-there-yet@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz#679df222b278c64f2cdba1175cdc00b0d96164bd" - integrity sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg== - dependencies: - delegates "^1.0.0" - readable-stream "^3.6.0" - -balanced-match@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" - integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== - -base64-js@^1.3.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" - integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== - -bindings@^1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" - integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== - dependencies: - file-uri-to-path "1.0.0" - -bl@^4.0.3: - version "4.1.0" - resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" - integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== - dependencies: - buffer "^5.5.0" - inherits "^2.0.4" - readable-stream "^3.4.0" - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -buffer@^5.5.0: - version "5.7.1" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" - integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== - dependencies: - base64-js "^1.3.1" - ieee754 "^1.1.13" - -cacache@^15.2.0: - version "15.3.0" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-15.3.0.tgz#dc85380fb2f556fe3dda4c719bfa0ec875a7f1eb" - integrity sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ== - dependencies: - "@npmcli/fs" "^1.0.0" - "@npmcli/move-file" "^1.0.1" - chownr "^2.0.0" - fs-minipass "^2.0.0" - glob "^7.1.4" - infer-owner "^1.0.4" - lru-cache "^6.0.0" - minipass "^3.1.1" - minipass-collect "^1.0.2" - minipass-flush "^1.0.5" - minipass-pipeline "^1.2.2" - mkdirp "^1.0.3" - p-map "^4.0.0" - promise-inflight "^1.0.1" - rimraf "^3.0.2" - ssri "^8.0.1" - tar "^6.0.2" - unique-filename "^1.1.1" - -chownr@^1.1.1: - version "1.1.4" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" - integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== - -chownr@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" - integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== - -clean-stack@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" - integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== - -cloudflare-worker-adapter@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/cloudflare-worker-adapter/-/cloudflare-worker-adapter-1.2.1.tgz#d96434d2b6e6ebe8ebb935ae010ec3006e5da990" - integrity sha512-XRIJes+dUkM65sTQa4OmdT5QAnmJgIZFdSLBAoc8cezzKZgfsUwldF9RgEDKxLWLyBvgZFugROo7Jgcoaz7NBw== - dependencies: - https-proxy-agent "^7.0.5" - ioredis "^5.4.1" - node-fetch "^3.3.2" - sqlite3 "^5" - toml "^3.0.0" - -cluster-key-slot@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/cluster-key-slot/-/cluster-key-slot-1.1.2.tgz#88ddaa46906e303b5de30d3153b7d9fe0a0c19ac" - integrity sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA== - -color-support@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" - integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== - -console-control-strings@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" - integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ== - -data-uri-to-buffer@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz#d8feb2b2881e6a4f58c2e08acfd0e2834e26222e" - integrity sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A== - -debug@4, debug@^4.3.3, debug@^4.3.4: - version "4.3.5" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.5.tgz#e83444eceb9fedd4a1da56d671ae2446a01a6e1e" - integrity sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg== - dependencies: - ms "2.1.2" - -decompress-response@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" - integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== - dependencies: - mimic-response "^3.1.0" - -deep-extend@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" - integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== - -delegates@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" - integrity sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ== - -denque@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/denque/-/denque-2.1.0.tgz#e93e1a6569fb5e66f16a3c2a2964617d349d6ab1" - integrity sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw== - -detect-libc@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.3.tgz#f0cd503b40f9939b894697d19ad50895e30cf700" - integrity sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw== - -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" - integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== - -encoding@^0.1.12: - version "0.1.13" - resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" - integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== - dependencies: - iconv-lite "^0.6.2" - -end-of-stream@^1.1.0, end-of-stream@^1.4.1: - version "1.4.4" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" - integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== - dependencies: - once "^1.4.0" - -env-paths@^2.2.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" - integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== - -err-code@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/err-code/-/err-code-2.0.3.tgz#23c2f3b756ffdfc608d30e27c9a941024807e7f9" - integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA== - -expand-template@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c" - integrity sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg== - -fetch-blob@^3.1.2, fetch-blob@^3.1.4: - version "3.2.0" - resolved "https://registry.yarnpkg.com/fetch-blob/-/fetch-blob-3.2.0.tgz#f09b8d4bbd45adc6f0c20b7e787e793e309dcce9" - integrity sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ== - dependencies: - node-domexception "^1.0.0" - web-streams-polyfill "^3.0.3" - -file-uri-to-path@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" - integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== - -formdata-polyfill@^4.0.10: - version "4.0.10" - resolved "https://registry.yarnpkg.com/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz#24807c31c9d402e002ab3d8c720144ceb8848423" - integrity sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g== - dependencies: - fetch-blob "^3.1.2" - -fs-constants@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" - integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== - -fs-minipass@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" - integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== - dependencies: - minipass "^3.0.0" - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== - -gauge@^4.0.3: - version "4.0.4" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-4.0.4.tgz#52ff0652f2bbf607a989793d53b751bef2328dce" - integrity sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg== - dependencies: - aproba "^1.0.3 || ^2.0.0" - color-support "^1.1.3" - console-control-strings "^1.1.0" - has-unicode "^2.0.1" - signal-exit "^3.0.7" - string-width "^4.2.3" - strip-ansi "^6.0.1" - wide-align "^1.1.5" - -github-from-package@0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce" - integrity sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw== - -glob@^7.1.3, glob@^7.1.4: - version "7.2.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" - integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.1.1" - once "^1.3.0" - path-is-absolute "^1.0.0" - -graceful-fs@^4.2.6: - version "4.2.11" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" - integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== - -has-unicode@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" - integrity sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ== - -http-cache-semantics@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" - integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== - -http-proxy-agent@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" - integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== - dependencies: - "@tootallnate/once" "1" - agent-base "6" - debug "4" - -https-proxy-agent@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" - integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== - dependencies: - agent-base "6" - debug "4" - -https-proxy-agent@^7.0.5: - version "7.0.5" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz#9e8b5013873299e11fab6fd548405da2d6c602b2" - integrity sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw== - dependencies: - agent-base "^7.0.2" - debug "4" - -humanize-ms@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" - integrity sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ== - dependencies: - ms "^2.0.0" - -iconv-lite@^0.6.2: - version "0.6.3" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" - integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== - dependencies: - safer-buffer ">= 2.1.2 < 3.0.0" - -ieee754@^1.1.13: - version "1.2.1" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" - integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== - -imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== - -indent-string@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" - integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== - -infer-owner@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" - integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2, inherits@^2.0.3, inherits@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -ini@~1.3.0: - version "1.3.8" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" - integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== - -ioredis@^5.4.1: - version "5.4.1" - resolved "https://registry.yarnpkg.com/ioredis/-/ioredis-5.4.1.tgz#1c56b70b759f01465913887375ed809134296f40" - integrity sha512-2YZsvl7jopIa1gaePkeMtd9rAcSjOOjPtpcLlOeusyO+XH2SK5ZcT+UCrElPP+WVIInh2TzeI4XW9ENaSLVVHA== - dependencies: - "@ioredis/commands" "^1.1.1" - cluster-key-slot "^1.1.0" - debug "^4.3.4" - denque "^2.1.0" - lodash.defaults "^4.2.0" - lodash.isarguments "^3.1.0" - redis-errors "^1.2.0" - redis-parser "^3.0.0" - standard-as-callback "^2.1.0" - -ip-address@^9.0.5: - version "9.0.5" - resolved "https://registry.yarnpkg.com/ip-address/-/ip-address-9.0.5.tgz#117a960819b08780c3bd1f14ef3c1cc1d3f3ea5a" - integrity sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g== - dependencies: - jsbn "1.1.0" - sprintf-js "^1.1.3" - -is-fullwidth-code-point@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" - integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== - -is-lambda@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-lambda/-/is-lambda-1.0.1.tgz#3d9877899e6a53efc0160504cde15f82e6f061d5" - integrity sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ== - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== - -jsbn@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-1.1.0.tgz#b01307cb29b618a1ed26ec79e911f803c4da0040" - integrity sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A== - -lodash.defaults@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c" - integrity sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ== - -lodash.isarguments@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" - integrity sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg== - -lru-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" - integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== - dependencies: - yallist "^4.0.0" - -make-fetch-happen@^9.1.0: - version "9.1.0" - resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz#53085a09e7971433e6765f7971bf63f4e05cb968" - integrity sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg== - dependencies: - agentkeepalive "^4.1.3" - cacache "^15.2.0" - http-cache-semantics "^4.1.0" - http-proxy-agent "^4.0.1" - https-proxy-agent "^5.0.0" - is-lambda "^1.0.1" - lru-cache "^6.0.0" - minipass "^3.1.3" - minipass-collect "^1.0.2" - minipass-fetch "^1.3.2" - minipass-flush "^1.0.5" - minipass-pipeline "^1.2.4" - negotiator "^0.6.2" - promise-retry "^2.0.1" - socks-proxy-agent "^6.0.0" - ssri "^8.0.0" - -mimic-response@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" - integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== - -minimatch@^3.1.1: - version "3.1.2" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== - dependencies: - brace-expansion "^1.1.7" - -minimist@^1.2.0, minimist@^1.2.3: - version "1.2.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" - integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== - -minipass-collect@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617" - integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA== - dependencies: - minipass "^3.0.0" - -minipass-fetch@^1.3.2: - version "1.4.1" - resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-1.4.1.tgz#d75e0091daac1b0ffd7e9d41629faff7d0c1f1b6" - integrity sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw== - dependencies: - minipass "^3.1.0" - minipass-sized "^1.0.3" - minizlib "^2.0.0" - optionalDependencies: - encoding "^0.1.12" - -minipass-flush@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373" - integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== - dependencies: - minipass "^3.0.0" - -minipass-pipeline@^1.2.2, minipass-pipeline@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c" - integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== - dependencies: - minipass "^3.0.0" - -minipass-sized@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/minipass-sized/-/minipass-sized-1.0.3.tgz#70ee5a7c5052070afacfbc22977ea79def353b70" - integrity sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g== - dependencies: - minipass "^3.0.0" - -minipass@^3.0.0, minipass@^3.1.0, minipass@^3.1.1, minipass@^3.1.3: - version "3.3.6" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.6.tgz#7bba384db3a1520d18c9c0e5251c3444e95dd94a" - integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw== - dependencies: - yallist "^4.0.0" - -minipass@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d" - integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== - -minizlib@^2.0.0, minizlib@^2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" - integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== - dependencies: - minipass "^3.0.0" - yallist "^4.0.0" - -mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3: - version "0.5.3" - resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113" - integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== - -mkdirp@^1.0.3, mkdirp@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" - integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== - -ms@2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - -ms@^2.0.0: - version "2.1.3" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - -napi-build-utils@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-1.0.2.tgz#b1fddc0b2c46e380a0b7a76f984dd47c41a13806" - integrity sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg== - -negotiator@^0.6.2: - version "0.6.3" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" - integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== - -node-abi@^3.3.0: - version "3.65.0" - resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.65.0.tgz#ca92d559388e1e9cab1680a18c1a18757cdac9d3" - integrity sha512-ThjYBfoDNr08AWx6hGaRbfPwxKV9kVzAzOzlLKbk2CuqXE2xnCh+cbAGnwM3t8Lq4v9rUB7VfondlkBckcJrVA== - dependencies: - semver "^7.3.5" - -node-addon-api@^7.0.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-7.1.0.tgz#71f609369379c08e251c558527a107107b5e0fdb" - integrity sha512-mNcltoe1R8o7STTegSOHdnJNN7s5EUvhoS7ShnTHDyOSd+8H+UdWODq6qSv67PjC8Zc5JRT8+oLAMCr0SIXw7g== - -node-domexception@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/node-domexception/-/node-domexception-1.0.0.tgz#6888db46a1f71c0b76b3f7555016b63fe64766e5" - integrity sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ== - -node-fetch@^3.3.2: - version "3.3.2" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-3.3.2.tgz#d1e889bacdf733b4ff3b2b243eb7a12866a0b78b" - integrity sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA== - dependencies: - data-uri-to-buffer "^4.0.0" - fetch-blob "^3.1.4" - formdata-polyfill "^4.0.10" - -node-gyp@8.x: - version "8.4.1" - resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-8.4.1.tgz#3d49308fc31f768180957d6b5746845fbd429937" - integrity sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w== - dependencies: - env-paths "^2.2.0" - glob "^7.1.4" - graceful-fs "^4.2.6" - make-fetch-happen "^9.1.0" - nopt "^5.0.0" - npmlog "^6.0.0" - rimraf "^3.0.2" - semver "^7.3.5" - tar "^6.1.2" - which "^2.0.2" - -nopt@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-5.0.0.tgz#530942bb58a512fccafe53fe210f13a25355dc88" - integrity sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ== - dependencies: - abbrev "1" - -npmlog@^6.0.0: - version "6.0.2" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-6.0.2.tgz#c8166017a42f2dea92d6453168dd865186a70830" - integrity sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg== - dependencies: - are-we-there-yet "^3.0.0" - console-control-strings "^1.1.0" - gauge "^4.0.3" - set-blocking "^2.0.0" - -once@^1.3.0, once@^1.3.1, once@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== - dependencies: - wrappy "1" - -p-map@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" - integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== - dependencies: - aggregate-error "^3.0.0" - -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== - -prebuild-install@^7.1.1: - version "7.1.2" - resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-7.1.2.tgz#a5fd9986f5a6251fbc47e1e5c65de71e68c0a056" - integrity sha512-UnNke3IQb6sgarcZIDU3gbMeTp/9SSU1DAIkil7PrqG1vZlBtY5msYccSKSHDqa3hNg436IXK+SNImReuA1wEQ== - dependencies: - detect-libc "^2.0.0" - expand-template "^2.0.3" - github-from-package "0.0.0" - minimist "^1.2.3" - mkdirp-classic "^0.5.3" - napi-build-utils "^1.0.1" - node-abi "^3.3.0" - pump "^3.0.0" - rc "^1.2.7" - simple-get "^4.0.0" - tar-fs "^2.0.0" - tunnel-agent "^0.6.0" - -promise-inflight@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" - integrity sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g== - -promise-retry@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-2.0.1.tgz#ff747a13620ab57ba688f5fc67855410c370da22" - integrity sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g== - dependencies: - err-code "^2.0.2" - retry "^0.12.0" - -pump@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" - integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - -rc@^1.2.7: - version "1.2.8" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" - integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== - dependencies: - deep-extend "^0.6.0" - ini "~1.3.0" - minimist "^1.2.0" - strip-json-comments "~2.0.1" - -readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: - version "3.6.2" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" - integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - -redis-errors@^1.0.0, redis-errors@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/redis-errors/-/redis-errors-1.2.0.tgz#eb62d2adb15e4eaf4610c04afe1529384250abad" - integrity sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w== - -redis-parser@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/redis-parser/-/redis-parser-3.0.0.tgz#b66d828cdcafe6b4b8a428a7def4c6bcac31c8b4" - integrity sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A== - dependencies: - redis-errors "^1.0.0" - -retry@^0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" - integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow== - -rimraf@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" - integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== - dependencies: - glob "^7.1.3" - -safe-buffer@^5.0.1, safe-buffer@~5.2.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - -"safer-buffer@>= 2.1.2 < 3.0.0": - version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== - -semver@^7.3.5: - version "7.6.2" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.2.tgz#1e3b34759f896e8f14d6134732ce798aeb0c6e13" - integrity sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w== - -set-blocking@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" - integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== - -signal-exit@^3.0.7: - version "3.0.7" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" - integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== - -simple-concat@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f" - integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q== - -simple-get@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-4.0.1.tgz#4a39db549287c979d352112fa03fd99fd6bc3543" - integrity sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA== - dependencies: - decompress-response "^6.0.0" - once "^1.3.1" - simple-concat "^1.0.0" - -smart-buffer@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae" - integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== - -socks-proxy-agent@^6.0.0: - version "6.2.1" - resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz#2687a31f9d7185e38d530bef1944fe1f1496d6ce" - integrity sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ== - dependencies: - agent-base "^6.0.2" - debug "^4.3.3" - socks "^2.6.2" - -socks@^2.6.2: - version "2.8.3" - resolved "https://registry.yarnpkg.com/socks/-/socks-2.8.3.tgz#1ebd0f09c52ba95a09750afe3f3f9f724a800cb5" - integrity sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw== - dependencies: - ip-address "^9.0.5" - smart-buffer "^4.2.0" - -sprintf-js@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.3.tgz#4914b903a2f8b685d17fdf78a70e917e872e444a" - integrity sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA== - -sqlite3@^5: - version "5.1.7" - resolved "https://registry.yarnpkg.com/sqlite3/-/sqlite3-5.1.7.tgz#59ca1053c1ab38647396586edad019b1551041b7" - integrity sha512-GGIyOiFaG+TUra3JIfkI/zGP8yZYLPQ0pl1bH+ODjiX57sPhrLU5sQJn1y9bDKZUFYkX1crlrPfSYt0BKKdkog== - dependencies: - bindings "^1.5.0" - node-addon-api "^7.0.0" - prebuild-install "^7.1.1" - tar "^6.1.11" - optionalDependencies: - node-gyp "8.x" - -ssri@^8.0.0, ssri@^8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-8.0.1.tgz#638e4e439e2ffbd2cd289776d5ca457c4f51a2af" - integrity sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ== - dependencies: - minipass "^3.1.1" - -standard-as-callback@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/standard-as-callback/-/standard-as-callback-2.1.0.tgz#8953fc05359868a77b5b9739a665c5977bb7df45" - integrity sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A== - -"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.2.3: - version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -string_decoder@^1.1.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" - -strip-ansi@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - -strip-json-comments@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" - integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== - -tar-fs@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.1.tgz#489a15ab85f1f0befabb370b7de4f9eb5cbe8784" - integrity sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng== - dependencies: - chownr "^1.1.1" - mkdirp-classic "^0.5.2" - pump "^3.0.0" - tar-stream "^2.1.4" - -tar-stream@^2.1.4: - version "2.2.0" - resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" - integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== - dependencies: - bl "^4.0.3" - end-of-stream "^1.4.1" - fs-constants "^1.0.0" - inherits "^2.0.3" - readable-stream "^3.1.1" - -tar@^6.0.2, tar@^6.1.11, tar@^6.1.2: - version "6.2.1" - resolved "https://registry.yarnpkg.com/tar/-/tar-6.2.1.tgz#717549c541bc3c2af15751bea94b1dd068d4b03a" - integrity sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A== - dependencies: - chownr "^2.0.0" - fs-minipass "^2.0.0" - minipass "^5.0.0" - minizlib "^2.1.1" - mkdirp "^1.0.3" - yallist "^4.0.0" - -toml@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/toml/-/toml-3.0.0.tgz#342160f1af1904ec9d204d03a5d61222d762c5ee" - integrity sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w== - -tunnel-agent@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" - integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w== - dependencies: - safe-buffer "^5.0.1" - -unique-filename@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" - integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== - dependencies: - unique-slug "^2.0.0" - -unique-slug@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c" - integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w== - dependencies: - imurmurhash "^0.1.4" - -util-deprecate@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== - -web-streams-polyfill@^3.0.3: - version "3.3.3" - resolved "https://registry.yarnpkg.com/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz#2073b91a2fdb1fbfbd401e7de0ac9f8214cecb4b" - integrity sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw== - -which@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" - integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== - dependencies: - isexe "^2.0.0" - -wide-align@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3" - integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg== - dependencies: - string-width "^1.0.2 || 2 || 3 || 4" - -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== - -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== diff --git a/adapter/script/esbuild.config.js b/adapter/script/esbuild.config.js deleted file mode 100644 index b008474f..00000000 --- a/adapter/script/esbuild.config.js +++ /dev/null @@ -1,38 +0,0 @@ -import { execSync } from 'node:child_process'; -import * as fs from 'node:fs/promises'; -import esbuild from 'esbuild'; - -/** - * Build the project - * @param {string} info - path to buildinfo.json - * @param {string} output - path to output file - */ -export async function build(info, output) { - let COMMIT_HASH = execSync('git rev-parse --short HEAD').toString().trim(); - let TIMESTAMP = Math.floor(Date.now() / 1000); - - try { - const raw = await fs.readFile(info); - const buildInfo = JSON.parse(raw.toString()); - COMMIT_HASH = buildInfo.sha; - TIMESTAMP = buildInfo.timestamp; - } catch (e) { - console.error(e); - } - - await esbuild.build({ - entryPoints: ['index.js'], - bundle: true, - minify: false, - outfile: output, - platform: 'node', - format: 'esm', - banner: { - js: '#!/usr/bin/env node\n/* eslint-disable */', - }, - define: { - 'process.env.BUILD_VERSION': `'${COMMIT_HASH}'`, - 'process.env.BUILD_TIMESTAMP': TIMESTAMP.toString(), - }, - }); -} diff --git a/adapter/vercel/package.json b/adapter/vercel/package.json index d2504a15..6862de3c 100644 --- a/adapter/vercel/package.json +++ b/adapter/vercel/package.json @@ -7,17 +7,19 @@ "license": "MIT", "main": "index.js", "scripts": { - "init": "node ./utils/init.js", "dev": "vercel dev", - "deploy": "node ./utils/env.js && sh deploy.sh" + "gen:env": "node ./utils/init.js", + "gen:sh": "node ./utils/env.js", + "deploy": "npm run gen:env & npm run gen:sh && sh deploy.sh", + "delpoy:only": "vercel deploy --prod" }, "dependencies": { - "chatgpt-telegram-workers": "^1.7.0", - "cloudflare-worker-adapter": "^1.2.1" + "chatgpt-telegram-workers": "^1.8.0", + "cloudflare-worker-adapter": "^1.3.1" }, "devDependencies": { "dotenv": "^16.0.3", "toml": "^3.0.0", - "vercel": "^28.16.15" + "vercel": "^37.1.2" } } diff --git a/adapter/vercel/src/index.js b/adapter/vercel/src/index.js index 8b8233d2..bc86a866 100644 --- a/adapter/vercel/src/index.js +++ b/adapter/vercel/src/index.js @@ -1,25 +1,33 @@ import worker from 'chatgpt-telegram-workers'; -import { RedisCache } from 'cloudflare-worker-adapter/redisCache'; +import { RedisCache } from 'cloudflare-worker-adapter/cache/redis'; -// cloudflare to vercel adapter export default async (req, res) => { - console.log(`${req.method} ${req.url}`); - const redis = RedisCache.createFromUri(process.env.REDIS_URL); - const env = { - ...Object.assign({}, process.env), - DATABASE: redis, - }; - const domain = env.VERCEL_DOMAIN; - const cfReq = new Request(domain + req.url, { - method: req.method, - headers: req.headers, - body: JSON.stringify(req.body), - }); - const resp = await worker.fetch(cfReq, env); - await redis.close(); - res.status(resp.status); - for (const [key, value] of resp.headers) { - res.setHeader(key, value); + try { + const env = { + ...Object.assign({}, process.env), + }; + const domain = env.VERCEL_DOMAIN; + if (!domain) { + res.status(500).send('VERCEL_DOMAIN not set, Please set it in Vercel environment variables and redeploy'); + } + const redis = RedisCache.createFromUri(process.env.REDIS_URL); + env.DATABASE = redis; + const cfReq = new Request(domain + req.url, { + method: req.method, + headers: req.headers, + body: JSON.stringify(req.body), + }); + const resp = await worker.fetch(cfReq, env); + await redis.close(); + res.status(resp.status); + for (const [key, value] of resp.headers) { + res.setHeader(key, value); + } + res.send(await resp.text()); + } catch (e) { + res.status(500).send(JSON.stringify({ + message: e.message, + stack: e.stack, + }, null, 2)); } - res.send(await resp.text()); }; diff --git a/adapter/vercel/utils/env.js b/adapter/vercel/utils/env.js index f222a7a6..40db82b4 100644 --- a/adapter/vercel/utils/env.js +++ b/adapter/vercel/utils/env.js @@ -2,5 +2,11 @@ import fs from 'node:fs'; import dotenv from 'dotenv'; const env = dotenv.parse(fs.readFileSync('.env', 'utf-8')) || {}; -fs.writeFileSync('deploy.sh', `#!/bin/bash\nPATH=$PATH:./node_modules/.bin\nvercel deploy --prod ${Object.entries(env).map(([key, value]) => `-e ${key}="${value}"`).join(' ')}`); +fs.writeFileSync('deploy.sh', `#!/bin/bash +PATH=$PATH:./node_modules/.bin +${ + Object.entries(env).map(([key, value]) => `echo "${value}" | vercel env add ${key} production`).join('\n') +} +vercel deploy --prod +`); fs.chmodSync('deploy.sh', '755'); diff --git a/adapter/vercel/utils/init.js b/adapter/vercel/utils/init.js index bfc640e7..0372e151 100644 --- a/adapter/vercel/utils/init.js +++ b/adapter/vercel/utils/init.js @@ -22,4 +22,4 @@ const newEnv = { }; console.log(newEnv); -fs.writeFileSync('.env', Object.entries(newEnv).map(([key, value]) => `${key}="${value}"`).join('\n')); +fs.writeFileSync('.env', Object.entries(newEnv).map(([key, value]) => `${key}="${`${value}`.replace(/"/g, '\\"')}"`).join('\n')); diff --git a/adapter/vercel/yarn.lock b/adapter/vercel/yarn.lock index fe6a0f29..c0d811cc 100644 --- a/adapter/vercel/yarn.lock +++ b/adapter/vercel/yarn.lock @@ -2,1004 +2,6 @@ # yarn lockfile v1 -"@ampproject/remapping@^2.2.0": - version "2.3.0" - resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.3.0.tgz#ed441b6fa600072520ce18b43d2c8cc8caecc7f4" - integrity sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw== - dependencies: - "@jridgewell/gen-mapping" "^0.3.5" - "@jridgewell/trace-mapping" "^0.3.24" - -"@babel/code-frame@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.24.7.tgz#882fd9e09e8ee324e496bd040401c6f046ef4465" - integrity sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA== - dependencies: - "@babel/highlight" "^7.24.7" - picocolors "^1.0.0" - -"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.24.7.tgz#d23bbea508c3883ba8251fb4164982c36ea577ed" - integrity sha512-qJzAIcv03PyaWqxRgO4mSU3lihncDT296vnyuE2O8uA4w3UHWI4S3hgeZd1L8W1Bft40w9JxJ2b412iDUFFRhw== - -"@babel/core@^7.18.6", "@babel/core@^7.20.7", "@babel/core@^7.23.9": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.24.7.tgz#b676450141e0b52a3d43bc91da86aa608f950ac4" - integrity sha512-nykK+LEK86ahTkX/3TgauT0ikKoNCfKHEaZYTUVupJdTLzGNvrblu4u6fa7DhZONAltdf8e662t/abY8idrd/g== - dependencies: - "@ampproject/remapping" "^2.2.0" - "@babel/code-frame" "^7.24.7" - "@babel/generator" "^7.24.7" - "@babel/helper-compilation-targets" "^7.24.7" - "@babel/helper-module-transforms" "^7.24.7" - "@babel/helpers" "^7.24.7" - "@babel/parser" "^7.24.7" - "@babel/template" "^7.24.7" - "@babel/traverse" "^7.24.7" - "@babel/types" "^7.24.7" - convert-source-map "^2.0.0" - debug "^4.1.0" - gensync "^1.0.0-beta.2" - json5 "^2.2.3" - semver "^6.3.1" - -"@babel/generator@^7.18.6", "@babel/generator@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.24.7.tgz#1654d01de20ad66b4b4d99c135471bc654c55e6d" - integrity sha512-oipXieGC3i45Y1A41t4tAqpnEZWgB/lC6Ehh6+rOviR5XWpTtMmLN+fGjz9vOiNRt0p6RtO6DtD0pdU3vpqdSA== - dependencies: - "@babel/types" "^7.24.7" - "@jridgewell/gen-mapping" "^0.3.5" - "@jridgewell/trace-mapping" "^0.3.25" - jsesc "^2.5.1" - -"@babel/helper-annotate-as-pure@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.7.tgz#5373c7bc8366b12a033b4be1ac13a206c6656aab" - integrity sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg== - dependencies: - "@babel/types" "^7.24.7" - -"@babel/helper-builder-binary-assignment-operator-visitor@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.24.7.tgz#37d66feb012024f2422b762b9b2a7cfe27c7fba3" - integrity sha512-xZeCVVdwb4MsDBkkyZ64tReWYrLRHlMN72vP7Bdm3OUOuyFZExhsHUUnuWnm2/XOlAJzR0LfPpB56WXZn0X/lA== - dependencies: - "@babel/traverse" "^7.24.7" - "@babel/types" "^7.24.7" - -"@babel/helper-compilation-targets@^7.22.6", "@babel/helper-compilation-targets@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.24.7.tgz#4eb6c4a80d6ffeac25ab8cd9a21b5dfa48d503a9" - integrity sha512-ctSdRHBi20qWOfy27RUb4Fhp07KSJ3sXcuSvTrXrc4aG8NSYDo1ici3Vhg9bg69y5bj0Mr1lh0aeEgTvc12rMg== - dependencies: - "@babel/compat-data" "^7.24.7" - "@babel/helper-validator-option" "^7.24.7" - browserslist "^4.22.2" - lru-cache "^5.1.1" - semver "^6.3.1" - -"@babel/helper-create-class-features-plugin@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.7.tgz#2eaed36b3a1c11c53bdf80d53838b293c52f5b3b" - integrity sha512-kTkaDl7c9vO80zeX1rJxnuRpEsD5tA81yh11X1gQo+PhSti3JS+7qeZo9U4RHobKRiFPKaGK3svUAeb8D0Q7eg== - dependencies: - "@babel/helper-annotate-as-pure" "^7.24.7" - "@babel/helper-environment-visitor" "^7.24.7" - "@babel/helper-function-name" "^7.24.7" - "@babel/helper-member-expression-to-functions" "^7.24.7" - "@babel/helper-optimise-call-expression" "^7.24.7" - "@babel/helper-replace-supers" "^7.24.7" - "@babel/helper-skip-transparent-expression-wrappers" "^7.24.7" - "@babel/helper-split-export-declaration" "^7.24.7" - semver "^6.3.1" - -"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.24.7.tgz#be4f435a80dc2b053c76eeb4b7d16dd22cfc89da" - integrity sha512-03TCmXy2FtXJEZfbXDTSqq1fRJArk7lX9DOFC/47VthYcxyIOx+eXQmdo6DOQvrbpIix+KfXwvuXdFDZHxt+rA== - dependencies: - "@babel/helper-annotate-as-pure" "^7.24.7" - regexpu-core "^5.3.1" - semver "^6.3.1" - -"@babel/helper-define-polyfill-provider@^0.6.1", "@babel/helper-define-polyfill-provider@^0.6.2": - version "0.6.2" - resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.2.tgz#18594f789c3594acb24cfdb4a7f7b7d2e8bd912d" - integrity sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ== - dependencies: - "@babel/helper-compilation-targets" "^7.22.6" - "@babel/helper-plugin-utils" "^7.22.5" - debug "^4.1.1" - lodash.debounce "^4.0.8" - resolve "^1.14.2" - -"@babel/helper-environment-visitor@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.7.tgz#4b31ba9551d1f90781ba83491dd59cf9b269f7d9" - integrity sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ== - dependencies: - "@babel/types" "^7.24.7" - -"@babel/helper-function-name@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.24.7.tgz#75f1e1725742f39ac6584ee0b16d94513da38dd2" - integrity sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA== - dependencies: - "@babel/template" "^7.24.7" - "@babel/types" "^7.24.7" - -"@babel/helper-hoist-variables@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.24.7.tgz#b4ede1cde2fd89436397f30dc9376ee06b0f25ee" - integrity sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ== - dependencies: - "@babel/types" "^7.24.7" - -"@babel/helper-member-expression-to-functions@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.7.tgz#67613d068615a70e4ed5101099affc7a41c5225f" - integrity sha512-LGeMaf5JN4hAT471eJdBs/GK1DoYIJ5GCtZN/EsL6KUiiDZOvO/eKE11AMZJa2zP4zk4qe9V2O/hxAmkRc8p6w== - dependencies: - "@babel/traverse" "^7.24.7" - "@babel/types" "^7.24.7" - -"@babel/helper-module-imports@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz#f2f980392de5b84c3328fc71d38bd81bbb83042b" - integrity sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA== - dependencies: - "@babel/traverse" "^7.24.7" - "@babel/types" "^7.24.7" - -"@babel/helper-module-transforms@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.24.7.tgz#31b6c9a2930679498db65b685b1698bfd6c7daf8" - integrity sha512-1fuJEwIrp+97rM4RWdO+qrRsZlAeL1lQJoPqtCYWv0NL115XM93hIH4CSRln2w52SqvmY5hqdtauB6QFCDiZNQ== - dependencies: - "@babel/helper-environment-visitor" "^7.24.7" - "@babel/helper-module-imports" "^7.24.7" - "@babel/helper-simple-access" "^7.24.7" - "@babel/helper-split-export-declaration" "^7.24.7" - "@babel/helper-validator-identifier" "^7.24.7" - -"@babel/helper-optimise-call-expression@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.24.7.tgz#8b0a0456c92f6b323d27cfd00d1d664e76692a0f" - integrity sha512-jKiTsW2xmWwxT1ixIdfXUZp+P5yURx2suzLZr5Hi64rURpDYdMW0pv+Uf17EYk2Rd428Lx4tLsnjGJzYKDM/6A== - dependencies: - "@babel/types" "^7.24.7" - -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.24.7", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.7.tgz#98c84fe6fe3d0d3ae7bfc3a5e166a46844feb2a0" - integrity sha512-Rq76wjt7yz9AAc1KnlRKNAi/dMSVWgDRx43FHoJEbcYU6xOWaE2dVPwcdTukJrjxS65GITyfbvEYHvkirZ6uEg== - -"@babel/helper-remap-async-to-generator@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.24.7.tgz#b3f0f203628522713849d49403f1a414468be4c7" - integrity sha512-9pKLcTlZ92hNZMQfGCHImUpDOlAgkkpqalWEeftW5FBya75k8Li2ilerxkM/uBEj01iBZXcCIB/bwvDYgWyibA== - dependencies: - "@babel/helper-annotate-as-pure" "^7.24.7" - "@babel/helper-environment-visitor" "^7.24.7" - "@babel/helper-wrap-function" "^7.24.7" - -"@babel/helper-replace-supers@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.24.7.tgz#f933b7eed81a1c0265740edc91491ce51250f765" - integrity sha512-qTAxxBM81VEyoAY0TtLrx1oAEJc09ZK67Q9ljQToqCnA+55eNwCORaxlKyu+rNfX86o8OXRUSNUnrtsAZXM9sg== - dependencies: - "@babel/helper-environment-visitor" "^7.24.7" - "@babel/helper-member-expression-to-functions" "^7.24.7" - "@babel/helper-optimise-call-expression" "^7.24.7" - -"@babel/helper-simple-access@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz#bcade8da3aec8ed16b9c4953b74e506b51b5edb3" - integrity sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg== - dependencies: - "@babel/traverse" "^7.24.7" - "@babel/types" "^7.24.7" - -"@babel/helper-skip-transparent-expression-wrappers@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.24.7.tgz#5f8fa83b69ed5c27adc56044f8be2b3ea96669d9" - integrity sha512-IO+DLT3LQUElMbpzlatRASEyQtfhSE0+m465v++3jyyXeBTBUjtVZg28/gHeV5mrTJqvEKhKroBGAvhW+qPHiQ== - dependencies: - "@babel/traverse" "^7.24.7" - "@babel/types" "^7.24.7" - -"@babel/helper-split-export-declaration@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz#83949436890e07fa3d6873c61a96e3bbf692d856" - integrity sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA== - dependencies: - "@babel/types" "^7.24.7" - -"@babel/helper-string-parser@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.24.7.tgz#4d2d0f14820ede3b9807ea5fc36dfc8cd7da07f2" - integrity sha512-7MbVt6xrwFQbunH2DNQsAP5sTGxfqQtErvBIvIMi6EQnbgUOuVYanvREcmFrOPhoXBrTtjhhP+lW+o5UfK+tDg== - -"@babel/helper-validator-identifier@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz#75b889cfaf9e35c2aaf42cf0d72c8e91719251db" - integrity sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w== - -"@babel/helper-validator-option@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.24.7.tgz#24c3bb77c7a425d1742eec8fb433b5a1b38e62f6" - integrity sha512-yy1/KvjhV/ZCL+SM7hBrvnZJ3ZuT9OuZgIJAGpPEToANvc3iM6iDvBnRjtElWibHU6n8/LPR/EjX9EtIEYO3pw== - -"@babel/helper-wrap-function@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.24.7.tgz#52d893af7e42edca7c6d2c6764549826336aae1f" - integrity sha512-N9JIYk3TD+1vq/wn77YnJOqMtfWhNewNE+DJV4puD2X7Ew9J4JvrzrFDfTfyv5EgEXVy9/Wt8QiOErzEmv5Ifw== - dependencies: - "@babel/helper-function-name" "^7.24.7" - "@babel/template" "^7.24.7" - "@babel/traverse" "^7.24.7" - "@babel/types" "^7.24.7" - -"@babel/helpers@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.24.7.tgz#aa2ccda29f62185acb5d42fb4a3a1b1082107416" - integrity sha512-NlmJJtvcw72yRJRcnCmGvSi+3jDEg8qFu3z0AFoymmzLx5ERVWyzd9kVXr7Th9/8yIJi2Zc6av4Tqz3wFs8QWg== - dependencies: - "@babel/template" "^7.24.7" - "@babel/types" "^7.24.7" - -"@babel/highlight@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.24.7.tgz#a05ab1df134b286558aae0ed41e6c5f731bf409d" - integrity sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw== - dependencies: - "@babel/helper-validator-identifier" "^7.24.7" - chalk "^2.4.2" - js-tokens "^4.0.0" - picocolors "^1.0.0" - -"@babel/parser@^7.18.6", "@babel/parser@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.24.7.tgz#9a5226f92f0c5c8ead550b750f5608e766c8ce85" - integrity sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw== - -"@babel/plugin-bugfix-firefox-class-in-computed-class-key@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.24.7.tgz#fd059fd27b184ea2b4c7e646868a9a381bbc3055" - integrity sha512-TiT1ss81W80eQsN+722OaeQMY/G4yTb4G9JrqeiDADs3N8lbPMGldWi9x8tyqCW5NLx1Jh2AvkE6r6QvEltMMQ== - dependencies: - "@babel/helper-environment-visitor" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" - -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.24.7.tgz#468096ca44bbcbe8fcc570574e12eb1950e18107" - integrity sha512-unaQgZ/iRu/By6tsjMZzpeBZjChYfLYry6HrEXPoz3KmfF0sVBQ1l8zKMQ4xRGLWVsjuvB8nQfjNP/DcfEOCsg== - dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.7.tgz#e4eabdd5109acc399b38d7999b2ef66fc2022f89" - integrity sha512-+izXIbke1T33mY4MSNnrqhPXDz01WYhEf3yF5NbnUtkiNnm+XBZJl3kNfoK6NKmYlz/D07+l2GWVK/QfDkNCuQ== - dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/helper-skip-transparent-expression-wrappers" "^7.24.7" - "@babel/plugin-transform-optional-chaining" "^7.24.7" - -"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.24.7.tgz#71b21bb0286d5810e63a1538aa901c58e87375ec" - integrity sha512-utA4HuR6F4Vvcr+o4DnjL8fCOlgRFGbeeBEGNg3ZTrLFw6VWG5XmUrvcQ0FjIYMU2ST4XcR2Wsp7t9qOAPnxMg== - dependencies: - "@babel/helper-environment-visitor" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" - -"@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2": - version "7.21.0-placeholder-for-preset-env.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz#7844f9289546efa9febac2de4cfe358a050bd703" - integrity sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w== - -"@babel/plugin-syntax-async-generators@^7.8.4": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" - integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-class-properties@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" - integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-syntax-class-static-block@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz#195df89b146b4b78b3bf897fd7a257c84659d406" - integrity sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-syntax-dynamic-import@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" - integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-export-namespace-from@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a" - integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-syntax-import-assertions@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.24.7.tgz#2a0b406b5871a20a841240586b1300ce2088a778" - integrity sha512-Ec3NRUMoi8gskrkBe3fNmEQfxDvY8bgfQpz6jlk/41kX9eUjvpyqWU7PBP/pLAvMaSQjbMNKJmvX57jP+M6bPg== - dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - -"@babel/plugin-syntax-import-attributes@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.7.tgz#b4f9ea95a79e6912480c4b626739f86a076624ca" - integrity sha512-hbX+lKKeUMGihnK8nvKqmXBInriT3GVjzXKFriV3YC6APGxMbP8RZNFwy91+hocLXq90Mta+HshoB31802bb8A== - dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - -"@babel/plugin-syntax-import-meta@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" - integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-json-strings@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" - integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-jsx@^7.18.6", "@babel/plugin-syntax-jsx@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.7.tgz#39a1fa4a7e3d3d7f34e2acc6be585b718d30e02d" - integrity sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ== - dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - -"@babel/plugin-syntax-logical-assignment-operators@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" - integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" - integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-numeric-separator@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" - integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-object-rest-spread@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" - integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-optional-catch-binding@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" - integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-optional-chaining@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" - integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-private-property-in-object@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz#0dc6671ec0ea22b6e94a1114f857970cd39de1ad" - integrity sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-syntax-top-level-await@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" - integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-syntax-typescript@^7.20.0", "@babel/plugin-syntax-typescript@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.7.tgz#58d458271b4d3b6bb27ee6ac9525acbb259bad1c" - integrity sha512-c/+fVeJBB0FeKsFvwytYiUD+LBvhHjGSI0g446PRGdSVGZLRNArBUno2PETbAly3tpiNAQR5XaZ+JslxkotsbA== - dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - -"@babel/plugin-syntax-unicode-sets-regex@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz#d49a3b3e6b52e5be6740022317580234a6a47357" - integrity sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" - -"@babel/plugin-transform-arrow-functions@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.7.tgz#4f6886c11e423bd69f3ce51dbf42424a5f275514" - integrity sha512-Dt9LQs6iEY++gXUwY03DNFat5C2NbO48jj+j/bSAz6b3HgPs39qcPiYt77fDObIcFwj3/C2ICX9YMwGflUoSHQ== - dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - -"@babel/plugin-transform-async-generator-functions@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.24.7.tgz#7330a5c50e05181ca52351b8fd01642000c96cfd" - integrity sha512-o+iF77e3u7ZS4AoAuJvapz9Fm001PuD2V3Lp6OSE4FYQke+cSewYtnek+THqGRWyQloRCyvWL1OkyfNEl9vr/g== - dependencies: - "@babel/helper-environment-visitor" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/helper-remap-async-to-generator" "^7.24.7" - "@babel/plugin-syntax-async-generators" "^7.8.4" - -"@babel/plugin-transform-async-to-generator@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.7.tgz#72a3af6c451d575842a7e9b5a02863414355bdcc" - integrity sha512-SQY01PcJfmQ+4Ash7NE+rpbLFbmqA2GPIgqzxfFTL4t1FKRq4zTms/7htKpoCUI9OcFYgzqfmCdH53s6/jn5fA== - dependencies: - "@babel/helper-module-imports" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/helper-remap-async-to-generator" "^7.24.7" - -"@babel/plugin-transform-block-scoped-functions@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.7.tgz#a4251d98ea0c0f399dafe1a35801eaba455bbf1f" - integrity sha512-yO7RAz6EsVQDaBH18IDJcMB1HnrUn2FJ/Jslc/WtPPWcjhpUJXU/rjbwmluzp7v/ZzWcEhTMXELnnsz8djWDwQ== - dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - -"@babel/plugin-transform-block-scoping@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.24.7.tgz#42063e4deb850c7bd7c55e626bf4e7ab48e6ce02" - integrity sha512-Nd5CvgMbWc+oWzBsuaMcbwjJWAcp5qzrbg69SZdHSP7AMY0AbWFqFO0WTFCA1jxhMCwodRwvRec8k0QUbZk7RQ== - dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - -"@babel/plugin-transform-class-properties@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.24.7.tgz#256879467b57b0b68c7ddfc5b76584f398cd6834" - integrity sha512-vKbfawVYayKcSeSR5YYzzyXvsDFWU2mD8U5TFeXtbCPLFUqe7GyCgvO6XDHzje862ODrOwy6WCPmKeWHbCFJ4w== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" - -"@babel/plugin-transform-class-static-block@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.7.tgz#c82027ebb7010bc33c116d4b5044fbbf8c05484d" - integrity sha512-HMXK3WbBPpZQufbMG4B46A90PkuuhN9vBCb5T8+VAHqvAqvcLi+2cKoukcpmUYkszLhScU3l1iudhrks3DggRQ== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/plugin-syntax-class-static-block" "^7.14.5" - -"@babel/plugin-transform-classes@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.24.7.tgz#4ae6ef43a12492134138c1e45913f7c46c41b4bf" - integrity sha512-CFbbBigp8ln4FU6Bpy6g7sE8B/WmCmzvivzUC6xDAdWVsjYTXijpuuGJmYkAaoWAzcItGKT3IOAbxRItZ5HTjw== - dependencies: - "@babel/helper-annotate-as-pure" "^7.24.7" - "@babel/helper-compilation-targets" "^7.24.7" - "@babel/helper-environment-visitor" "^7.24.7" - "@babel/helper-function-name" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/helper-replace-supers" "^7.24.7" - "@babel/helper-split-export-declaration" "^7.24.7" - globals "^11.1.0" - -"@babel/plugin-transform-computed-properties@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.7.tgz#4cab3214e80bc71fae3853238d13d097b004c707" - integrity sha512-25cS7v+707Gu6Ds2oY6tCkUwsJ9YIDbggd9+cu9jzzDgiNq7hR/8dkzxWfKWnTic26vsI3EsCXNd4iEB6e8esQ== - dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/template" "^7.24.7" - -"@babel/plugin-transform-destructuring@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.7.tgz#a097f25292defb6e6cc16d6333a4cfc1e3c72d9e" - integrity sha512-19eJO/8kdCQ9zISOf+SEUJM/bAUIsvY3YDnXZTupUCQ8LgrWnsG/gFB9dvXqdXnRXMAM8fvt7b0CBKQHNGy1mw== - dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - -"@babel/plugin-transform-dotall-regex@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.7.tgz#5f8bf8a680f2116a7207e16288a5f974ad47a7a0" - integrity sha512-ZOA3W+1RRTSWvyqcMJDLqbchh7U4NRGqwRfFSVbOLS/ePIP4vHB5e8T8eXcuqyN1QkgKyj5wuW0lcS85v4CrSw== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" - -"@babel/plugin-transform-duplicate-keys@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.7.tgz#dd20102897c9a2324e5adfffb67ff3610359a8ee" - integrity sha512-JdYfXyCRihAe46jUIliuL2/s0x0wObgwwiGxw/UbgJBr20gQBThrokO4nYKgWkD7uBaqM7+9x5TU7NkExZJyzw== - dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - -"@babel/plugin-transform-dynamic-import@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.7.tgz#4d8b95e3bae2b037673091aa09cd33fecd6419f4" - integrity sha512-sc3X26PhZQDb3JhORmakcbvkeInvxz+A8oda99lj7J60QRuPZvNAk9wQlTBS1ZynelDrDmTU4pw1tyc5d5ZMUg== - dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" - -"@babel/plugin-transform-exponentiation-operator@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.7.tgz#b629ee22645f412024297d5245bce425c31f9b0d" - integrity sha512-Rqe/vSc9OYgDajNIK35u7ot+KeCoetqQYFXM4Epf7M7ez3lWlOjrDjrwMei6caCVhfdw+mIKD4cgdGNy5JQotQ== - dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" - -"@babel/plugin-transform-export-namespace-from@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.7.tgz#176d52d8d8ed516aeae7013ee9556d540c53f197" - integrity sha512-v0K9uNYsPL3oXZ/7F9NNIbAj2jv1whUEtyA6aujhekLs56R++JDQuzRcP2/z4WX5Vg/c5lE9uWZA0/iUoFhLTA== - dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - -"@babel/plugin-transform-for-of@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.7.tgz#f25b33f72df1d8be76399e1b8f3f9d366eb5bc70" - integrity sha512-wo9ogrDG1ITTTBsy46oGiN1dS9A7MROBTcYsfS8DtsImMkHk9JXJ3EWQM6X2SUw4x80uGPlwj0o00Uoc6nEE3g== - dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/helper-skip-transparent-expression-wrappers" "^7.24.7" - -"@babel/plugin-transform-function-name@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.24.7.tgz#6d8601fbffe665c894440ab4470bc721dd9131d6" - integrity sha512-U9FcnA821YoILngSmYkW6FjyQe2TyZD5pHt4EVIhmcTkrJw/3KqcrRSxuOo5tFZJi7TE19iDyI1u+weTI7bn2w== - dependencies: - "@babel/helper-compilation-targets" "^7.24.7" - "@babel/helper-function-name" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" - -"@babel/plugin-transform-json-strings@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.7.tgz#f3e9c37c0a373fee86e36880d45b3664cedaf73a" - integrity sha512-2yFnBGDvRuxAaE/f0vfBKvtnvvqU8tGpMHqMNpTN2oWMKIR3NqFkjaAgGwawhqK/pIN2T3XdjGPdaG0vDhOBGw== - dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/plugin-syntax-json-strings" "^7.8.3" - -"@babel/plugin-transform-literals@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.24.7.tgz#36b505c1e655151a9d7607799a9988fc5467d06c" - integrity sha512-vcwCbb4HDH+hWi8Pqenwnjy+UiklO4Kt1vfspcQYFhJdpthSnW8XvWGyDZWKNVrVbVViI/S7K9PDJZiUmP2fYQ== - dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - -"@babel/plugin-transform-logical-assignment-operators@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.7.tgz#a58fb6eda16c9dc8f9ff1c7b1ba6deb7f4694cb0" - integrity sha512-4D2tpwlQ1odXmTEIFWy9ELJcZHqrStlzK/dAOWYyxX3zT0iXQB6banjgeOJQXzEc4S0E0a5A+hahxPaEFYftsw== - dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" - -"@babel/plugin-transform-member-expression-literals@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.7.tgz#3b4454fb0e302e18ba4945ba3246acb1248315df" - integrity sha512-T/hRC1uqrzXMKLQ6UCwMT85S3EvqaBXDGf0FaMf4446Qx9vKwlghvee0+uuZcDUCZU5RuNi4781UQ7R308zzBw== - dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - -"@babel/plugin-transform-modules-amd@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.7.tgz#65090ed493c4a834976a3ca1cde776e6ccff32d7" - integrity sha512-9+pB1qxV3vs/8Hdmz/CulFB8w2tuu6EB94JZFsjdqxQokwGa9Unap7Bo2gGBGIvPmDIVvQrom7r5m/TCDMURhg== - dependencies: - "@babel/helper-module-transforms" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" - -"@babel/plugin-transform-modules-commonjs@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.7.tgz#9fd5f7fdadee9085886b183f1ad13d1ab260f4ab" - integrity sha512-iFI8GDxtevHJ/Z22J5xQpVqFLlMNstcLXh994xifFwxxGslr2ZXXLWgtBeLctOD63UFDArdvN6Tg8RFw+aEmjQ== - dependencies: - "@babel/helper-module-transforms" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/helper-simple-access" "^7.24.7" - -"@babel/plugin-transform-modules-systemjs@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.24.7.tgz#f8012316c5098f6e8dee6ecd58e2bc6f003d0ce7" - integrity sha512-GYQE0tW7YoaN13qFh3O1NCY4MPkUiAH3fiF7UcV/I3ajmDKEdG3l+UOcbAm4zUE3gnvUU+Eni7XrVKo9eO9auw== - dependencies: - "@babel/helper-hoist-variables" "^7.24.7" - "@babel/helper-module-transforms" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/helper-validator-identifier" "^7.24.7" - -"@babel/plugin-transform-modules-umd@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.7.tgz#edd9f43ec549099620df7df24e7ba13b5c76efc8" - integrity sha512-3aytQvqJ/h9z4g8AsKPLvD4Zqi2qT+L3j7XoFFu1XBlZWEl2/1kWnhmAbxpLgPrHSY0M6UA02jyTiwUVtiKR6A== - dependencies: - "@babel/helper-module-transforms" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" - -"@babel/plugin-transform-named-capturing-groups-regex@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.24.7.tgz#9042e9b856bc6b3688c0c2e4060e9e10b1460923" - integrity sha512-/jr7h/EWeJtk1U/uz2jlsCioHkZk1JJZVcc8oQsJ1dUlaJD83f4/6Zeh2aHt9BIFokHIsSeDfhUmju0+1GPd6g== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" - -"@babel/plugin-transform-new-target@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.7.tgz#31ff54c4e0555cc549d5816e4ab39241dfb6ab00" - integrity sha512-RNKwfRIXg4Ls/8mMTza5oPF5RkOW8Wy/WgMAp1/F1yZ8mMbtwXW+HDoJiOsagWrAhI5f57Vncrmr9XeT4CVapA== - dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - -"@babel/plugin-transform-nullish-coalescing-operator@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.7.tgz#1de4534c590af9596f53d67f52a92f12db984120" - integrity sha512-Ts7xQVk1OEocqzm8rHMXHlxvsfZ0cEF2yomUqpKENHWMF4zKk175Y4q8H5knJes6PgYad50uuRmt3UJuhBw8pQ== - dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - -"@babel/plugin-transform-numeric-separator@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.7.tgz#bea62b538c80605d8a0fac9b40f48e97efa7de63" - integrity sha512-e6q1TiVUzvH9KRvicuxdBTUj4AdKSRwzIyFFnfnezpCfP2/7Qmbb8qbU2j7GODbl4JMkblitCQjKYUaX/qkkwA== - dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" - -"@babel/plugin-transform-object-rest-spread@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.7.tgz#d13a2b93435aeb8a197e115221cab266ba6e55d6" - integrity sha512-4QrHAr0aXQCEFni2q4DqKLD31n2DL+RxcwnNjDFkSG0eNQ/xCavnRkfCUjsyqGC2OviNJvZOF/mQqZBw7i2C5Q== - dependencies: - "@babel/helper-compilation-targets" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.24.7" - -"@babel/plugin-transform-object-super@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.7.tgz#66eeaff7830bba945dd8989b632a40c04ed625be" - integrity sha512-A/vVLwN6lBrMFmMDmPPz0jnE6ZGx7Jq7d6sT/Ev4H65RER6pZ+kczlf1DthF5N0qaPHBsI7UXiE8Zy66nmAovg== - dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/helper-replace-supers" "^7.24.7" - -"@babel/plugin-transform-optional-catch-binding@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.7.tgz#00eabd883d0dd6a60c1c557548785919b6e717b4" - integrity sha512-uLEndKqP5BfBbC/5jTwPxLh9kqPWWgzN/f8w6UwAIirAEqiIVJWWY312X72Eub09g5KF9+Zn7+hT7sDxmhRuKA== - dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - -"@babel/plugin-transform-optional-chaining@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.7.tgz#b8f6848a80cf2da98a8a204429bec04756c6d454" - integrity sha512-tK+0N9yd4j+x/4hxF3F0e0fu/VdcxU18y5SevtyM/PCFlQvXbR0Zmlo2eBrKtVipGNFzpq56o8WsIIKcJFUCRQ== - dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/helper-skip-transparent-expression-wrappers" "^7.24.7" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - -"@babel/plugin-transform-parameters@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.7.tgz#5881f0ae21018400e320fc7eb817e529d1254b68" - integrity sha512-yGWW5Rr+sQOhK0Ot8hjDJuxU3XLRQGflvT4lhlSY0DFvdb3TwKaY26CJzHtYllU0vT9j58hc37ndFPsqT1SrzA== - dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - -"@babel/plugin-transform-private-methods@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.24.7.tgz#e6318746b2ae70a59d023d5cc1344a2ba7a75f5e" - integrity sha512-COTCOkG2hn4JKGEKBADkA8WNb35TGkkRbI5iT845dB+NyqgO8Hn+ajPbSnIQznneJTa3d30scb6iz/DhH8GsJQ== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" - -"@babel/plugin-transform-private-property-in-object@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.7.tgz#4eec6bc701288c1fab5f72e6a4bbc9d67faca061" - integrity sha512-9z76mxwnwFxMyxZWEgdgECQglF2Q7cFLm0kMf8pGwt+GSJsY0cONKj/UuO4bOH0w/uAel3ekS4ra5CEAyJRmDA== - dependencies: - "@babel/helper-annotate-as-pure" "^7.24.7" - "@babel/helper-create-class-features-plugin" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/plugin-syntax-private-property-in-object" "^7.14.5" - -"@babel/plugin-transform-property-literals@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.7.tgz#f0d2ed8380dfbed949c42d4d790266525d63bbdc" - integrity sha512-EMi4MLQSHfd2nrCqQEWxFdha2gBCqU4ZcCng4WBGZ5CJL4bBRW0ptdqqDdeirGZcpALazVVNJqRmsO8/+oNCBA== - dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - -"@babel/plugin-transform-regenerator@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.7.tgz#021562de4534d8b4b1851759fd7af4e05d2c47f8" - integrity sha512-lq3fvXPdimDrlg6LWBoqj+r/DEWgONuwjuOuQCSYgRroXDH/IdM1C0IZf59fL5cHLpjEH/O6opIRBbqv7ELnuA== - dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - regenerator-transform "^0.15.2" - -"@babel/plugin-transform-reserved-words@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.7.tgz#80037fe4fbf031fc1125022178ff3938bb3743a4" - integrity sha512-0DUq0pHcPKbjFZCfTss/pGkYMfy3vFWydkUBd9r0GHpIyfs2eCDENvqadMycRS9wZCXR41wucAfJHJmwA0UmoQ== - dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - -"@babel/plugin-transform-shorthand-properties@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.7.tgz#85448c6b996e122fa9e289746140aaa99da64e73" - integrity sha512-KsDsevZMDsigzbA09+vacnLpmPH4aWjcZjXdyFKGzpplxhbeB4wYtury3vglQkg6KM/xEPKt73eCjPPf1PgXBA== - dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - -"@babel/plugin-transform-spread@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.7.tgz#e8a38c0fde7882e0fb8f160378f74bd885cc7bb3" - integrity sha512-x96oO0I09dgMDxJaANcRyD4ellXFLLiWhuwDxKZX5g2rWP1bTPkBSwCYv96VDXVT1bD9aPj8tppr5ITIh8hBng== - dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/helper-skip-transparent-expression-wrappers" "^7.24.7" - -"@babel/plugin-transform-sticky-regex@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.7.tgz#96ae80d7a7e5251f657b5cf18f1ea6bf926f5feb" - integrity sha512-kHPSIJc9v24zEml5geKg9Mjx5ULpfncj0wRpYtxbvKyTtHCYDkVE3aHQ03FrpEo4gEe2vrJJS1Y9CJTaThA52g== - dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - -"@babel/plugin-transform-template-literals@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.7.tgz#a05debb4a9072ae8f985bcf77f3f215434c8f8c8" - integrity sha512-AfDTQmClklHCOLxtGoP7HkeMw56k1/bTQjwsfhL6pppo/M4TOBSq+jjBUBLmV/4oeFg4GWMavIl44ZeCtmmZTw== - dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - -"@babel/plugin-transform-typeof-symbol@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.7.tgz#f074be466580d47d6e6b27473a840c9f9ca08fb0" - integrity sha512-VtR8hDy7YLB7+Pet9IarXjg/zgCMSF+1mNS/EQEiEaUPoFXCVsHG64SIxcaaI2zJgRiv+YmgaQESUfWAdbjzgg== - dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - -"@babel/plugin-transform-typescript@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.24.7.tgz#b006b3e0094bf0813d505e0c5485679eeaf4a881" - integrity sha512-iLD3UNkgx2n/HrjBesVbYX6j0yqn/sJktvbtKKgcaLIQ4bTTQ8obAypc1VpyHPD2y4Phh9zHOaAt8e/L14wCpw== - dependencies: - "@babel/helper-annotate-as-pure" "^7.24.7" - "@babel/helper-create-class-features-plugin" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/plugin-syntax-typescript" "^7.24.7" - -"@babel/plugin-transform-unicode-escapes@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.7.tgz#2023a82ced1fb4971630a2e079764502c4148e0e" - integrity sha512-U3ap1gm5+4edc2Q/P+9VrBNhGkfnf+8ZqppY71Bo/pzZmXhhLdqgaUl6cuB07O1+AQJtCLfaOmswiNbSQ9ivhw== - dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - -"@babel/plugin-transform-unicode-property-regex@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.7.tgz#9073a4cd13b86ea71c3264659590ac086605bbcd" - integrity sha512-uH2O4OV5M9FZYQrwc7NdVmMxQJOCCzFeYudlZSzUAHRFeOujQefa92E74TQDVskNHCzOXoigEuoyzHDhaEaK5w== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" - -"@babel/plugin-transform-unicode-regex@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.7.tgz#dfc3d4a51127108099b19817c0963be6a2adf19f" - integrity sha512-hlQ96MBZSAXUq7ltkjtu3FJCCSMx/j629ns3hA3pXnBXjanNP0LHi+JpPeA81zaWgVK1VGH95Xuy7u0RyQ8kMg== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" - -"@babel/plugin-transform-unicode-sets-regex@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.24.7.tgz#d40705d67523803a576e29c63cef6e516b858ed9" - integrity sha512-2G8aAvF4wy1w/AGZkemprdGMRg5o6zPNhbHVImRz3lss55TYCBd6xStN19rt8XJHq20sqV0JbyWjOWwQRwV/wg== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" - -"@babel/preset-env@^7.18.6": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.24.7.tgz#ff067b4e30ba4a72f225f12f123173e77b987f37" - integrity sha512-1YZNsc+y6cTvWlDHidMBsQZrZfEFjRIo/BZCT906PMdzOyXtSLTgqGdrpcuTDCXyd11Am5uQULtDIcCfnTc8fQ== - dependencies: - "@babel/compat-data" "^7.24.7" - "@babel/helper-compilation-targets" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/helper-validator-option" "^7.24.7" - "@babel/plugin-bugfix-firefox-class-in-computed-class-key" "^7.24.7" - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.24.7" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.24.7" - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.24.7" - "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2" - "@babel/plugin-syntax-async-generators" "^7.8.4" - "@babel/plugin-syntax-class-properties" "^7.12.13" - "@babel/plugin-syntax-class-static-block" "^7.14.5" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - "@babel/plugin-syntax-import-assertions" "^7.24.7" - "@babel/plugin-syntax-import-attributes" "^7.24.7" - "@babel/plugin-syntax-import-meta" "^7.10.4" - "@babel/plugin-syntax-json-strings" "^7.8.3" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - "@babel/plugin-syntax-private-property-in-object" "^7.14.5" - "@babel/plugin-syntax-top-level-await" "^7.14.5" - "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6" - "@babel/plugin-transform-arrow-functions" "^7.24.7" - "@babel/plugin-transform-async-generator-functions" "^7.24.7" - "@babel/plugin-transform-async-to-generator" "^7.24.7" - "@babel/plugin-transform-block-scoped-functions" "^7.24.7" - "@babel/plugin-transform-block-scoping" "^7.24.7" - "@babel/plugin-transform-class-properties" "^7.24.7" - "@babel/plugin-transform-class-static-block" "^7.24.7" - "@babel/plugin-transform-classes" "^7.24.7" - "@babel/plugin-transform-computed-properties" "^7.24.7" - "@babel/plugin-transform-destructuring" "^7.24.7" - "@babel/plugin-transform-dotall-regex" "^7.24.7" - "@babel/plugin-transform-duplicate-keys" "^7.24.7" - "@babel/plugin-transform-dynamic-import" "^7.24.7" - "@babel/plugin-transform-exponentiation-operator" "^7.24.7" - "@babel/plugin-transform-export-namespace-from" "^7.24.7" - "@babel/plugin-transform-for-of" "^7.24.7" - "@babel/plugin-transform-function-name" "^7.24.7" - "@babel/plugin-transform-json-strings" "^7.24.7" - "@babel/plugin-transform-literals" "^7.24.7" - "@babel/plugin-transform-logical-assignment-operators" "^7.24.7" - "@babel/plugin-transform-member-expression-literals" "^7.24.7" - "@babel/plugin-transform-modules-amd" "^7.24.7" - "@babel/plugin-transform-modules-commonjs" "^7.24.7" - "@babel/plugin-transform-modules-systemjs" "^7.24.7" - "@babel/plugin-transform-modules-umd" "^7.24.7" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.24.7" - "@babel/plugin-transform-new-target" "^7.24.7" - "@babel/plugin-transform-nullish-coalescing-operator" "^7.24.7" - "@babel/plugin-transform-numeric-separator" "^7.24.7" - "@babel/plugin-transform-object-rest-spread" "^7.24.7" - "@babel/plugin-transform-object-super" "^7.24.7" - "@babel/plugin-transform-optional-catch-binding" "^7.24.7" - "@babel/plugin-transform-optional-chaining" "^7.24.7" - "@babel/plugin-transform-parameters" "^7.24.7" - "@babel/plugin-transform-private-methods" "^7.24.7" - "@babel/plugin-transform-private-property-in-object" "^7.24.7" - "@babel/plugin-transform-property-literals" "^7.24.7" - "@babel/plugin-transform-regenerator" "^7.24.7" - "@babel/plugin-transform-reserved-words" "^7.24.7" - "@babel/plugin-transform-shorthand-properties" "^7.24.7" - "@babel/plugin-transform-spread" "^7.24.7" - "@babel/plugin-transform-sticky-regex" "^7.24.7" - "@babel/plugin-transform-template-literals" "^7.24.7" - "@babel/plugin-transform-typeof-symbol" "^7.24.7" - "@babel/plugin-transform-unicode-escapes" "^7.24.7" - "@babel/plugin-transform-unicode-property-regex" "^7.24.7" - "@babel/plugin-transform-unicode-regex" "^7.24.7" - "@babel/plugin-transform-unicode-sets-regex" "^7.24.7" - "@babel/preset-modules" "0.1.6-no-external-plugins" - babel-plugin-polyfill-corejs2 "^0.4.10" - babel-plugin-polyfill-corejs3 "^0.10.4" - babel-plugin-polyfill-regenerator "^0.6.1" - core-js-compat "^3.31.0" - semver "^6.3.1" - -"@babel/preset-modules@0.1.6-no-external-plugins": - version "0.1.6-no-external-plugins" - resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz#ccb88a2c49c817236861fee7826080573b8a923a" - integrity sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/types" "^7.4.4" - esutils "^2.0.2" - -"@babel/preset-typescript@^7.18.6": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.24.7.tgz#66cd86ea8f8c014855671d5ea9a737139cbbfef1" - integrity sha512-SyXRe3OdWwIwalxDg5UtJnJQO+YPcTfwiIY2B0Xlddh9o7jpWLvv8X1RthIeDOxQ+O1ML5BLPCONToObyVQVuQ== - dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/helper-validator-option" "^7.24.7" - "@babel/plugin-syntax-jsx" "^7.24.7" - "@babel/plugin-transform-modules-commonjs" "^7.24.7" - "@babel/plugin-transform-typescript" "^7.24.7" - -"@babel/regjsgen@^0.8.0": - version "0.8.0" - resolved "https://registry.yarnpkg.com/@babel/regjsgen/-/regjsgen-0.8.0.tgz#f0ba69b075e1f05fb2825b7fad991e7adbb18310" - integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== - -"@babel/runtime@7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.12.1.tgz#b4116a6b6711d010b2dad3b7b6e43bf1b9954740" - integrity sha512-J5AIf3vPj3UwXaAzb5j1xM4WAQDX3EMgemF8rjCP3SoW09LfRKAXQKt6CoVYl230P6iWdRcBbnLDDdnqWxZSCA== - dependencies: - regenerator-runtime "^0.13.4" - -"@babel/runtime@^7.12.5", "@babel/runtime@^7.8.4": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.24.7.tgz#f4f0d5530e8dbdf59b3451b9b3e594b6ba082e12" - integrity sha512-UwgBRMjJP+xv857DCngvqXI3Iq6J4v0wXmwc6sapg+zyhbwmQX67LUEFrkK5tbyJ30jGuG3ZvWpBiB9LCy1kWw== - dependencies: - regenerator-runtime "^0.14.0" - -"@babel/template@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.24.7.tgz#02efcee317d0609d2c07117cb70ef8fb17ab7315" - integrity sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig== - dependencies: - "@babel/code-frame" "^7.24.7" - "@babel/parser" "^7.24.7" - "@babel/types" "^7.24.7" - -"@babel/traverse@^7.18.6", "@babel/traverse@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.24.7.tgz#de2b900163fa741721ba382163fe46a936c40cf5" - integrity sha512-yb65Ed5S/QAcewNPh0nZczy9JdYXkkAbIsEo+P7BE7yO3txAY30Y/oPa3QkQ5It3xVG2kpKMg9MsdxZaO31uKA== - dependencies: - "@babel/code-frame" "^7.24.7" - "@babel/generator" "^7.24.7" - "@babel/helper-environment-visitor" "^7.24.7" - "@babel/helper-function-name" "^7.24.7" - "@babel/helper-hoist-variables" "^7.24.7" - "@babel/helper-split-export-declaration" "^7.24.7" - "@babel/parser" "^7.24.7" - "@babel/types" "^7.24.7" - debug "^4.3.1" - globals "^11.1.0" - -"@babel/types@^7.20.2", "@babel/types@^7.24.7", "@babel/types@^7.4.4": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.24.7.tgz#6027fe12bc1aa724cd32ab113fb7f1988f1f66f2" - integrity sha512-XEFXSlxiG5td2EJRe8vOmRbaXVgfcBlszKujvVmWIK/UpywWljQCfzAv3RQCGujWQ1RD4YYWEAqDXfuJiy8f5Q== - dependencies: - "@babel/helper-string-parser" "^7.24.7" - "@babel/helper-validator-identifier" "^7.24.7" - to-fast-properties "^2.0.0" - "@cspotcode/source-map-support@^0.8.0": version "0.8.1" resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" @@ -1007,387 +9,37 @@ dependencies: "@jridgewell/trace-mapping" "0.3.9" -"@edge-runtime/format@2.0.1": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@edge-runtime/format/-/format-2.0.1.tgz#765295809ff6a0938da739e13ef327d95a418395" - integrity sha512-aE+9DtBvQyg349srixtXEUNauWtIv5HTKPy8Q9dvG1NvpldVIvvhcDBI+SuvDVM8kQl8phbYnp2NTNloBCn/Yg== +"@edge-runtime/format@2.2.1": + version "2.2.1" + resolved "https://registry.yarnpkg.com/@edge-runtime/format/-/format-2.2.1.tgz#10dcedb0d7c2063c9ee360fbab23846c8720f986" + integrity sha512-JQTRVuiusQLNNLe2W9tnzBlV/GvSVcozLl4XZHk5swnRZ/v6jp8TqR8P7sqmJsQqblDZ3EztcWmLDbhRje/+8g== -"@edge-runtime/primitives@2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@edge-runtime/primitives/-/primitives-2.0.0.tgz#b4bf44f9cab36aee3027fe4c3ff3cc1d5713e155" - integrity sha512-AXqUq1zruTJAICrllUvZcgciIcEGHdF6KJ3r6FM0n4k8LpFxZ62tPWVIJ9HKm+xt+ncTBUZxwgUaQ73QMUQEKw== +"@edge-runtime/node-utils@2.3.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@edge-runtime/node-utils/-/node-utils-2.3.0.tgz#17ac98dd8a39e194c4fd49d66f3579ec5b125a78" + integrity sha512-uUtx8BFoO1hNxtHjp3eqVPC/mWImGb2exOfGjMLUoipuWgjej+f4o/VP4bUI8U40gu7Teogd5VTeZUkGvJSPOQ== -"@edge-runtime/primitives@2.1.2": - version "2.1.2" - resolved "https://registry.yarnpkg.com/@edge-runtime/primitives/-/primitives-2.1.2.tgz#8ff657f12a7f8c7fc4e3a0c10ec19356ef2d656d" - integrity sha512-SR04SMDybALlhIYIi0hiuEUwIl0b7Sn+RKwQkX6hydg4+AKMzBNDFhj2nqHDD1+xkHArV9EhmJIb6iGjShwSzg== +"@edge-runtime/ponyfill@2.4.2": + version "2.4.2" + resolved "https://registry.yarnpkg.com/@edge-runtime/ponyfill/-/ponyfill-2.4.2.tgz#9bec9feff18623f9f3ebe2f4ad8f0475c644ed07" + integrity sha512-oN17GjFr69chu6sDLvXxdhg0Qe8EZviGSuqzR9qOiKh4MhFYGdBBcqRNzdmYeAdeRzOW2mM9yil4RftUQ7sUOA== -"@edge-runtime/vm@2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@edge-runtime/vm/-/vm-2.0.0.tgz#9170d2d03761eff4e27687888c4b2d9af1f94c7d" - integrity sha512-BOLrAX8IWHRXu1siZocwLguKJPEUv7cr+rG8tI4hvHgMdIsBWHJlLeB8EjuUVnIURFrUiM49lVKn8DRrECmngw== - dependencies: - "@edge-runtime/primitives" "2.0.0" +"@edge-runtime/primitives@4.1.0": + version "4.1.0" + resolved "https://registry.yarnpkg.com/@edge-runtime/primitives/-/primitives-4.1.0.tgz#43c6e793362f3333acf0955a75b5735b34035494" + integrity sha512-Vw0lbJ2lvRUqc7/soqygUX216Xb8T3WBZ987oywz6aJqRxcwSVWwr9e+Nqo2m9bxobA9mdbWNNoRY6S9eko1EQ== -"@edge-runtime/vm@2.1.2": - version "2.1.2" - resolved "https://registry.yarnpkg.com/@edge-runtime/vm/-/vm-2.1.2.tgz#d760ce27b659c17c470b23453321769c08d213f5" - integrity sha512-j4H5S26NJhYOyjVMN8T/YJuwwslfnEX1P0j6N2Rq1FaubgNowdYunA9nlO7lg8Rgjv6dqJ2zKuM7GD1HFtNSGw== +"@edge-runtime/vm@3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@edge-runtime/vm/-/vm-3.2.0.tgz#8a735241d14e9fdad85497b8b17d0ea157df4710" + integrity sha512-0dEVyRLM/lG4gp1R/Ik5bfPl/1wX00xFwd5KcNH602tzBa09oF7pbTKETEhR1GjZ75K6OJnYFu8II2dyMhONMw== dependencies: - "@edge-runtime/primitives" "2.1.2" - -"@emotion/hash@^0.9.0": - version "0.9.1" - resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.9.1.tgz#4ffb0055f7ef676ebc3a5a91fb621393294e2f43" - integrity sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ== + "@edge-runtime/primitives" "4.1.0" -"@esbuild-plugins/node-modules-polyfill@^0.1.4": - version "0.1.4" - resolved "https://registry.yarnpkg.com/@esbuild-plugins/node-modules-polyfill/-/node-modules-polyfill-0.1.4.tgz#eb2f55da11967b2986c913f1a7957d1c868849c0" - integrity sha512-uZbcXi0zbmKC/050p3gJnne5Qdzw8vkXIv+c2BW0Lsc1ji1SkrxbKPUy5Efr0blbTu1SL8w4eyfpnSdPg3G0Qg== - dependencies: - escape-string-regexp "^4.0.0" - rollup-plugin-node-polyfills "^0.2.1" - -"@esbuild/aix-ppc64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz#d1bc06aedb6936b3b6d313bf809a5a40387d2b7f" - integrity sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA== - -"@esbuild/aix-ppc64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz#c7184a326533fcdf1b8ee0733e21c713b975575f" - integrity sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ== - -"@esbuild/android-arm64@0.16.3": - version "0.16.3" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.16.3.tgz#6af6d16be6d534d776a51fc215bfd81a68906d2c" - integrity sha512-RolFVeinkeraDvN/OoRf1F/lP0KUfGNb5jxy/vkIMeRRChkrX/HTYN6TYZosRJs3a1+8wqpxAo5PI5hFmxyPRg== - -"@esbuild/android-arm64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz#7ad65a36cfdb7e0d429c353e00f680d737c2aed4" - integrity sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA== - -"@esbuild/android-arm64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz#09d9b4357780da9ea3a7dfb833a1f1ff439b4052" - integrity sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A== - -"@esbuild/android-arm@0.16.3": - version "0.16.3" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.16.3.tgz#2a091222f3b1928e3246fb3c5202eaca88baab67" - integrity sha512-mueuEoh+s1eRbSJqq9KNBQwI4QhQV6sRXIfTyLXSHGMpyew61rOK4qY21uKbXl1iBoMb0AdL1deWFCQVlN2qHA== - -"@esbuild/android-arm@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.19.12.tgz#b0c26536f37776162ca8bde25e42040c203f2824" - integrity sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w== - -"@esbuild/android-arm@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.21.5.tgz#9b04384fb771926dfa6d7ad04324ecb2ab9b2e28" - integrity sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg== - -"@esbuild/android-x64@0.16.3": - version "0.16.3" - resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.16.3.tgz#a6d749c58b022d371dc40d50ac1bb4aebd1eb953" - integrity sha512-SFpTUcIT1bIJuCCBMCQWq1bL2gPTjWoLZdjmIhjdcQHaUfV41OQfho6Ici5uvvkMmZRXIUGpM3GxysP/EU7ifQ== - -"@esbuild/android-x64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.19.12.tgz#cb13e2211282012194d89bf3bfe7721273473b3d" - integrity sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew== - -"@esbuild/android-x64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.21.5.tgz#29918ec2db754cedcb6c1b04de8cd6547af6461e" - integrity sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA== - -"@esbuild/darwin-arm64@0.16.3": - version "0.16.3" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.16.3.tgz#92d1826ed2f21dcac5830b70d7215c6afbb744e2" - integrity sha512-DO8WykMyB+N9mIDfI/Hug70Dk1KipavlGAecxS3jDUwAbTpDXj0Lcwzw9svkhxfpCagDmpaTMgxWK8/C/XcXvw== - -"@esbuild/darwin-arm64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz#cbee41e988020d4b516e9d9e44dd29200996275e" - integrity sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g== - -"@esbuild/darwin-arm64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz#e495b539660e51690f3928af50a76fb0a6ccff2a" - integrity sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ== - -"@esbuild/darwin-x64@0.16.3": - version "0.16.3" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.16.3.tgz#7fc3570c2b16e9ff4fc178593a0a4adb1ae8ea57" - integrity sha512-uEqZQ2omc6BvWqdCiyZ5+XmxuHEi1SPzpVxXCSSV2+Sh7sbXbpeNhHIeFrIpRjAs0lI1FmA1iIOxFozKBhKgRQ== - -"@esbuild/darwin-x64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz#e37d9633246d52aecf491ee916ece709f9d5f4cd" - integrity sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A== - -"@esbuild/darwin-x64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz#c13838fa57372839abdddc91d71542ceea2e1e22" - integrity sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw== - -"@esbuild/freebsd-arm64@0.16.3": - version "0.16.3" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.16.3.tgz#16735ce16f8c9a4e7289e9e259aa01a8d9874307" - integrity sha512-nJansp3sSXakNkOD5i5mIz2Is/HjzIhFs49b1tjrPrpCmwgBmH9SSzhC/Z1UqlkivqMYkhfPwMw1dGFUuwmXhw== - -"@esbuild/freebsd-arm64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz#1ee4d8b682ed363b08af74d1ea2b2b4dbba76487" - integrity sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA== - -"@esbuild/freebsd-arm64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz#646b989aa20bf89fd071dd5dbfad69a3542e550e" - integrity sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g== - -"@esbuild/freebsd-x64@0.16.3": - version "0.16.3" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.16.3.tgz#f4edd1464cb072799ed6b8ab5178478e71c13459" - integrity sha512-TfoDzLw+QHfc4a8aKtGSQ96Wa+6eimljjkq9HKR0rHlU83vw8aldMOUSJTUDxbcUdcgnJzPaX8/vGWm7vyV7ug== - -"@esbuild/freebsd-x64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz#37a693553d42ff77cd7126764b535fb6cc28a11c" - integrity sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg== - -"@esbuild/freebsd-x64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz#aa615cfc80af954d3458906e38ca22c18cf5c261" - integrity sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ== - -"@esbuild/linux-arm64@0.16.3": - version "0.16.3" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.16.3.tgz#4b7ae6fe3618d9a40d6ca39c6edc991ac1447203" - integrity sha512-7I3RlsnxEFCHVZNBLb2w7unamgZ5sVwO0/ikE2GaYvYuUQs9Qte/w7TqWcXHtCwxvZx/2+F97ndiUQAWs47ZfQ== - -"@esbuild/linux-arm64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz#be9b145985ec6c57470e0e051d887b09dddb2d4b" - integrity sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA== - -"@esbuild/linux-arm64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz#70ac6fa14f5cb7e1f7f887bcffb680ad09922b5b" - integrity sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q== - -"@esbuild/linux-arm@0.16.3": - version "0.16.3" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.16.3.tgz#4b3e9f849822e16a76a70844c4db68075b259a58" - integrity sha512-VwswmSYwVAAq6LysV59Fyqk3UIjbhuc6wb3vEcJ7HEJUtFuLK9uXWuFoH1lulEbE4+5GjtHi3MHX+w1gNHdOWQ== - -"@esbuild/linux-arm@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz#207ecd982a8db95f7b5279207d0ff2331acf5eef" - integrity sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w== - -"@esbuild/linux-arm@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz#fc6fd11a8aca56c1f6f3894f2bea0479f8f626b9" - integrity sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA== - -"@esbuild/linux-ia32@0.16.3": - version "0.16.3" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.16.3.tgz#2ff3936b91bfff62f9ecf7f6411ef399b29ed22d" - integrity sha512-X8FDDxM9cqda2rJE+iblQhIMYY49LfvW4kaEjoFbTTQ4Go8G96Smj2w3BRTwA8IHGoi9dPOPGAX63dhuv19UqA== - -"@esbuild/linux-ia32@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz#d0d86b5ca1562523dc284a6723293a52d5860601" - integrity sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA== - -"@esbuild/linux-ia32@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz#3271f53b3f93e3d093d518d1649d6d68d346ede2" - integrity sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg== - -"@esbuild/linux-loong64@0.16.3": - version "0.16.3" - resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.16.3.tgz#ff8aa59f49d9ccbc1ff952ba1f5cd01a534562df" - integrity sha512-hIbeejCOyO0X9ujfIIOKjBjNAs9XD/YdJ9JXAy1lHA+8UXuOqbFe4ErMCqMr8dhlMGBuvcQYGF7+kO7waj2KHw== - -"@esbuild/linux-loong64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz#9a37f87fec4b8408e682b528391fa22afd952299" - integrity sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA== - -"@esbuild/linux-loong64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz#ed62e04238c57026aea831c5a130b73c0f9f26df" - integrity sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg== - -"@esbuild/linux-mips64el@0.16.3": - version "0.16.3" - resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.16.3.tgz#5dd5e118071c3912df69beedbfd11fb117f0fe5e" - integrity sha512-znFRzICT/V8VZQMt6rjb21MtAVJv/3dmKRMlohlShrbVXdBuOdDrGb+C2cZGQAR8RFyRe7HS6klmHq103WpmVw== - -"@esbuild/linux-mips64el@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz#4ddebd4e6eeba20b509d8e74c8e30d8ace0b89ec" - integrity sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w== - -"@esbuild/linux-mips64el@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz#e79b8eb48bf3b106fadec1ac8240fb97b4e64cbe" - integrity sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg== - -"@esbuild/linux-ppc64@0.16.3": - version "0.16.3" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.16.3.tgz#36c62e24eae7fa3f0d921506da8fc1e6098a1364" - integrity sha512-EV7LuEybxhXrVTDpbqWF2yehYRNz5e5p+u3oQUS2+ZFpknyi1NXxr8URk4ykR8Efm7iu04//4sBg249yNOwy5Q== - -"@esbuild/linux-ppc64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz#adb67dadb73656849f63cd522f5ecb351dd8dee8" - integrity sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg== - -"@esbuild/linux-ppc64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz#5f2203860a143b9919d383ef7573521fb154c3e4" - integrity sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w== - -"@esbuild/linux-riscv64@0.16.3": - version "0.16.3" - resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.16.3.tgz#f0fec8e7affb5bcc817fefc61a21cbb95539e393" - integrity sha512-uDxqFOcLzFIJ+r/pkTTSE9lsCEaV/Y6rMlQjUI9BkzASEChYL/aSQjZjchtEmdnVxDKETnUAmsaZ4pqK1eE5BQ== - -"@esbuild/linux-riscv64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz#11bc0698bf0a2abf8727f1c7ace2112612c15adf" - integrity sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg== - -"@esbuild/linux-riscv64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz#07bcafd99322d5af62f618cb9e6a9b7f4bb825dc" - integrity sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA== - -"@esbuild/linux-s390x@0.16.3": - version "0.16.3" - resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.16.3.tgz#22e10edd6e91f53c2e1f60e46abd453d7794409b" - integrity sha512-NbeREhzSxYwFhnCAQOQZmajsPYtX71Ufej3IQ8W2Gxskfz9DK58ENEju4SbpIj48VenktRASC52N5Fhyf/aliQ== - -"@esbuild/linux-s390x@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz#e86fb8ffba7c5c92ba91fc3b27ed5a70196c3cc8" - integrity sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg== - -"@esbuild/linux-s390x@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz#b7ccf686751d6a3e44b8627ababc8be3ef62d8de" - integrity sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A== - -"@esbuild/linux-x64@0.16.3": - version "0.16.3" - resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.16.3.tgz#38388b73fd9eebe45b073d7d8099b9c2e54f7139" - integrity sha512-SDiG0nCixYO9JgpehoKgScwic7vXXndfasjnD5DLbp1xltANzqZ425l7LSdHynt19UWOcDjG9wJJzSElsPvk0w== - -"@esbuild/linux-x64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz#5f37cfdc705aea687dfe5dfbec086a05acfe9c78" - integrity sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg== - -"@esbuild/linux-x64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz#6d8f0c768e070e64309af8004bb94e68ab2bb3b0" - integrity sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ== - -"@esbuild/netbsd-x64@0.16.3": - version "0.16.3" - resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.16.3.tgz#e0270569567f1530b8dbe6d11d5b4930b9cc71ae" - integrity sha512-AzbsJqiHEq1I/tUvOfAzCY15h4/7Ivp3ff/o1GpP16n48JMNAtbW0qui2WCgoIZArEHD0SUQ95gvR0oSO7ZbdA== - -"@esbuild/netbsd-x64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz#29da566a75324e0d0dd7e47519ba2f7ef168657b" - integrity sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA== - -"@esbuild/netbsd-x64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz#bbe430f60d378ecb88decb219c602667387a6047" - integrity sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg== - -"@esbuild/openbsd-x64@0.16.3": - version "0.16.3" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.16.3.tgz#3b16642d443848bca605f33ee3978a1890911e6d" - integrity sha512-gSABi8qHl8k3Cbi/4toAzHiykuBuWLZs43JomTcXkjMZVkp0gj3gg9mO+9HJW/8GB5H89RX/V0QP4JGL7YEEVg== - -"@esbuild/openbsd-x64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz#306c0acbdb5a99c95be98bdd1d47c916e7dc3ff0" - integrity sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw== - -"@esbuild/openbsd-x64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz#99d1cf2937279560d2104821f5ccce220cb2af70" - integrity sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow== - -"@esbuild/sunos-x64@0.16.3": - version "0.16.3" - resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.16.3.tgz#a838f247867380f0ae25ce1936dc5ab6f57b7734" - integrity sha512-SF9Kch5Ete4reovvRO6yNjMxrvlfT0F0Flm+NPoUw5Z4Q3r1d23LFTgaLwm3Cp0iGbrU/MoUI+ZqwCv5XJijCw== - -"@esbuild/sunos-x64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz#0933eaab9af8b9b2c930236f62aae3fc593faf30" - integrity sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA== - -"@esbuild/sunos-x64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz#08741512c10d529566baba837b4fe052c8f3487b" - integrity sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg== - -"@esbuild/win32-arm64@0.16.3": - version "0.16.3" - resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.16.3.tgz#bedd9bef5fb41f89ce2599f1761973cf6d6a67b6" - integrity sha512-u5aBonZIyGopAZyOnoPAA6fGsDeHByZ9CnEzyML9NqntK6D/xl5jteZUKm/p6nD09+v3pTM6TuUIqSPcChk5gg== - -"@esbuild/win32-arm64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz#773bdbaa1971b36db2f6560088639ccd1e6773ae" - integrity sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A== - -"@esbuild/win32-arm64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz#675b7385398411240735016144ab2e99a60fc75d" - integrity sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A== - -"@esbuild/win32-ia32@0.16.3": - version "0.16.3" - resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.16.3.tgz#49800aa812d8cc35ceef61e8d3b01224684cc0b1" - integrity sha512-GlgVq1WpvOEhNioh74TKelwla9KDuAaLZrdxuuUgsP2vayxeLgVc+rbpIv0IYF4+tlIzq2vRhofV+KGLD+37EQ== - -"@esbuild/win32-ia32@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz#000516cad06354cc84a73f0943a4aa690ef6fd67" - integrity sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ== - -"@esbuild/win32-ia32@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz#1bfc3ce98aa6ca9a0969e4d2af72144c59c1193b" - integrity sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA== - -"@esbuild/win32-x64@0.16.3": - version "0.16.3" - resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.16.3.tgz#94047dae921949cfb308117d993c4b941291ae10" - integrity sha512-5/JuTd8OWW8UzEtyf19fbrtMJENza+C9JoPIkvItgTBQ1FO2ZLvjbPO6Xs54vk0s5JB5QsfieUEshRQfu7ZHow== - -"@esbuild/win32-x64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz#c57c8afbb4054a3ab8317591a0b7320360b444ae" - integrity sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA== - -"@esbuild/win32-x64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz#acad351d582d157bb145535db2a6ff53dd514b5c" - integrity sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw== +"@fastify/busboy@^2.0.0": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@fastify/busboy/-/busboy-2.1.1.tgz#b9da6a878a371829a0502c9b6c1c143ef6663f4d" + integrity sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA== "@gar/promisify@^1.0.1": version "1.1.3" @@ -1399,26 +51,12 @@ resolved "https://registry.yarnpkg.com/@ioredis/commands/-/commands-1.2.0.tgz#6d61b3097470af1fdbbe622795b8921d42018e11" integrity sha512-Sx1pU8EM64o2BrqNpEO1CNLtKQwyhuXuqyfH7oGKCk+1a33d2r5saW8zNwm3j6BTExtjrv2BxTgzzkMwts6vGg== -"@jridgewell/gen-mapping@^0.3.5": - version "0.3.5" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz#dcce6aff74bdf6dad1a95802b69b04a2fcb1fb36" - integrity sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg== - dependencies: - "@jridgewell/set-array" "^1.2.1" - "@jridgewell/sourcemap-codec" "^1.4.10" - "@jridgewell/trace-mapping" "^0.3.24" - -"@jridgewell/resolve-uri@^3.0.3", "@jridgewell/resolve-uri@^3.1.0": +"@jridgewell/resolve-uri@^3.0.3": version "3.1.2" resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== -"@jridgewell/set-array@^1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.2.1.tgz#558fb6472ed16a4c850b889530e6b36438c49280" - integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A== - -"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14": +"@jridgewell/sourcemap-codec@^1.4.10": version "1.4.15" resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== @@ -1431,14 +69,6 @@ "@jridgewell/resolve-uri" "^3.0.3" "@jridgewell/sourcemap-codec" "^1.4.10" -"@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": - version "0.3.25" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0" - integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== - dependencies: - "@jridgewell/resolve-uri" "^3.1.0" - "@jridgewell/sourcemap-codec" "^1.4.14" - "@mapbox/node-pre-gyp@^1.0.5": version "1.0.11" resolved "https://registry.yarnpkg.com/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz#417db42b7f5323d79e93b34a6d7a2a12c0df43fa" @@ -1491,90 +121,6 @@ mkdirp "^1.0.4" rimraf "^3.0.2" -"@npmcli/package-json@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/package-json/-/package-json-2.0.0.tgz#3bbcf4677e21055adbe673d9f08c9f9cde942e4a" - integrity sha512-42jnZ6yl16GzjWSH7vtrmWyJDGVa/LXPdpN2rcUWolFjc9ON2N3uz0qdBbQACfmhuJZ2lbKYtmK5qx68ZPLHMA== - dependencies: - json-parse-even-better-errors "^2.3.1" - -"@remix-run/dev@npm:@vercel/remix-run-dev@1.15.0": - version "1.15.0" - resolved "https://registry.yarnpkg.com/@vercel/remix-run-dev/-/remix-run-dev-1.15.0.tgz#42f45baed42804c95636228f919dc3e7bf31c9d3" - integrity sha512-pQTM5WmOzrvhpPSHFDShwqX71YnLaTUxffhnly4MxVNKJ2WKV9zqx8bGQ/7cLfpEu9JfY2c+pVjYYb3wAMBt+Q== - dependencies: - "@babel/core" "^7.18.6" - "@babel/generator" "^7.18.6" - "@babel/parser" "^7.18.6" - "@babel/plugin-syntax-jsx" "^7.18.6" - "@babel/plugin-syntax-typescript" "^7.20.0" - "@babel/preset-env" "^7.18.6" - "@babel/preset-typescript" "^7.18.6" - "@babel/traverse" "^7.18.6" - "@babel/types" "^7.20.2" - "@esbuild-plugins/node-modules-polyfill" "^0.1.4" - "@npmcli/package-json" "^2.0.0" - "@remix-run/server-runtime" "1.15.0" - "@vanilla-extract/integration" "^6.2.0" - arg "^5.0.1" - cacache "^15.0.5" - chalk "^4.1.2" - chokidar "^3.5.1" - dotenv "^16.0.0" - esbuild "0.16.3" - execa "5.1.1" - exit-hook "2.2.1" - express "^4.17.1" - fast-glob "3.2.11" - fs-extra "^10.0.0" - get-port "^5.1.1" - glob-to-regexp "0.4.1" - gunzip-maybe "^1.4.2" - inquirer "^8.2.1" - jsesc "3.0.2" - json5 "^2.2.2" - lodash "^4.17.21" - lodash.debounce "^4.0.8" - lru-cache "^7.14.1" - minimatch "^3.0.5" - node-fetch "^2.6.7" - ora "^5.4.1" - postcss "^8.4.19" - postcss-discard-duplicates "^5.1.0" - postcss-load-config "^4.0.1" - postcss-modules "^6.0.0" - prettier "2.7.1" - pretty-ms "^7.0.1" - proxy-agent "^5.0.0" - react-refresh "^0.14.0" - recast "^0.21.5" - remark-frontmatter "4.0.1" - remark-mdx-frontmatter "^1.0.1" - semver "^7.3.7" - sort-package-json "^1.55.0" - tar-fs "^2.1.1" - tsconfig-paths "^4.0.0" - ws "^7.4.5" - xdm "^2.0.0" - -"@remix-run/router@1.5.0": - version "1.5.0" - resolved "https://registry.yarnpkg.com/@remix-run/router/-/router-1.5.0.tgz#57618e57942a5f0131374a9fdb0167e25a117fdc" - integrity sha512-bkUDCp8o1MvFO+qxkODcbhSqRa6P2GXgrGZVpt0dCXNW2HCSCqYI0ZoAqEOSAjRWmmlKcYgFvN4B4S+zo/f8kg== - -"@remix-run/server-runtime@1.15.0": - version "1.15.0" - resolved "https://registry.yarnpkg.com/@remix-run/server-runtime/-/server-runtime-1.15.0.tgz#78a3ad5e076d2cb9a0ed01d92df1caef09466514" - integrity sha512-DL9xjHfYYrEcOq5VbhYtrjJUWo/nFQAT7Y+Np/oC55HokyU6cb2jGhl52nx96aAxKwaFCse5N90GeodFsRzX7w== - dependencies: - "@remix-run/router" "1.5.0" - "@types/cookie" "^0.4.0" - "@types/react" "^18.0.15" - "@web3-storage/multipart-parser" "^1.0.0" - cookie "^0.4.1" - set-cookie-parser "^2.4.8" - source-map "^0.7.3" - "@rollup/pluginutils@^4.0.0": version "4.2.1" resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-4.2.1.tgz#e6c6c3aba0744edce3fb2074922d3776c0af2a6d" @@ -1583,108 +129,21 @@ estree-walker "^2.0.1" picomatch "^2.2.2" -"@rollup/rollup-android-arm-eabi@4.18.0": - version "4.18.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.18.0.tgz#bbd0e616b2078cd2d68afc9824d1fadb2f2ffd27" - integrity sha512-Tya6xypR10giZV1XzxmH5wr25VcZSncG0pZIjfePT0OVBvqNEurzValetGNarVrGiq66EBVAFn15iYX4w6FKgQ== - -"@rollup/rollup-android-arm64@4.18.0": - version "4.18.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.18.0.tgz#97255ef6384c5f73f4800c0de91f5f6518e21203" - integrity sha512-avCea0RAP03lTsDhEyfy+hpfr85KfyTctMADqHVhLAF3MlIkq83CP8UfAHUssgXTYd+6er6PaAhx/QGv4L1EiA== - -"@rollup/rollup-darwin-arm64@4.18.0": - version "4.18.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.18.0.tgz#b6dd74e117510dfe94541646067b0545b42ff096" - integrity sha512-IWfdwU7KDSm07Ty0PuA/W2JYoZ4iTj3TUQjkVsO/6U+4I1jN5lcR71ZEvRh52sDOERdnNhhHU57UITXz5jC1/w== - -"@rollup/rollup-darwin-x64@4.18.0": - version "4.18.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.18.0.tgz#e07d76de1cec987673e7f3d48ccb8e106d42c05c" - integrity sha512-n2LMsUz7Ynu7DoQrSQkBf8iNrjOGyPLrdSg802vk6XT3FtsgX6JbE8IHRvposskFm9SNxzkLYGSq9QdpLYpRNA== - -"@rollup/rollup-linux-arm-gnueabihf@4.18.0": - version "4.18.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.18.0.tgz#9f1a6d218b560c9d75185af4b8bb42f9f24736b8" - integrity sha512-C/zbRYRXFjWvz9Z4haRxcTdnkPt1BtCkz+7RtBSuNmKzMzp3ZxdM28Mpccn6pt28/UWUCTXa+b0Mx1k3g6NOMA== - -"@rollup/rollup-linux-arm-musleabihf@4.18.0": - version "4.18.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.18.0.tgz#53618b92e6ffb642c7b620e6e528446511330549" - integrity sha512-l3m9ewPgjQSXrUMHg93vt0hYCGnrMOcUpTz6FLtbwljo2HluS4zTXFy2571YQbisTnfTKPZ01u/ukJdQTLGh9A== - -"@rollup/rollup-linux-arm64-gnu@4.18.0": - version "4.18.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.18.0.tgz#99a7ba5e719d4f053761a698f7b52291cefba577" - integrity sha512-rJ5D47d8WD7J+7STKdCUAgmQk49xuFrRi9pZkWoRD1UeSMakbcepWXPF8ycChBoAqs1pb2wzvbY6Q33WmN2ftw== - -"@rollup/rollup-linux-arm64-musl@4.18.0": - version "4.18.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.18.0.tgz#f53db99a45d9bc00ce94db8a35efa7c3c144a58c" - integrity sha512-be6Yx37b24ZwxQ+wOQXXLZqpq4jTckJhtGlWGZs68TgdKXJgw54lUUoFYrg6Zs/kjzAQwEwYbp8JxZVzZLRepQ== - -"@rollup/rollup-linux-powerpc64le-gnu@4.18.0": - version "4.18.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.18.0.tgz#cbb0837408fe081ce3435cf3730e090febafc9bf" - integrity sha512-hNVMQK+qrA9Todu9+wqrXOHxFiD5YmdEi3paj6vP02Kx1hjd2LLYR2eaN7DsEshg09+9uzWi2W18MJDlG0cxJA== - -"@rollup/rollup-linux-riscv64-gnu@4.18.0": - version "4.18.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.18.0.tgz#8ed09c1d1262ada4c38d791a28ae0fea28b80cc9" - integrity sha512-ROCM7i+m1NfdrsmvwSzoxp9HFtmKGHEqu5NNDiZWQtXLA8S5HBCkVvKAxJ8U+CVctHwV2Gb5VUaK7UAkzhDjlg== - -"@rollup/rollup-linux-s390x-gnu@4.18.0": - version "4.18.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.18.0.tgz#938138d3c8e0c96f022252a28441dcfb17afd7ec" - integrity sha512-0UyyRHyDN42QL+NbqevXIIUnKA47A+45WyasO+y2bGJ1mhQrfrtXUpTxCOrfxCR4esV3/RLYyucGVPiUsO8xjg== - -"@rollup/rollup-linux-x64-gnu@4.18.0": - version "4.18.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.18.0.tgz#1a7481137a54740bee1ded4ae5752450f155d942" - integrity sha512-xuglR2rBVHA5UsI8h8UbX4VJ470PtGCf5Vpswh7p2ukaqBGFTnsfzxUBetoWBWymHMxbIG0Cmx7Y9qDZzr648w== - -"@rollup/rollup-linux-x64-musl@4.18.0": - version "4.18.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.18.0.tgz#f1186afc601ac4f4fc25fac4ca15ecbee3a1874d" - integrity sha512-LKaqQL9osY/ir2geuLVvRRs+utWUNilzdE90TpyoX0eNqPzWjRm14oMEE+YLve4k/NAqCdPkGYDaDF5Sw+xBfg== - -"@rollup/rollup-win32-arm64-msvc@4.18.0": - version "4.18.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.18.0.tgz#ed6603e93636a96203c6915be4117245c1bd2daf" - integrity sha512-7J6TkZQFGo9qBKH0pk2cEVSRhJbL6MtfWxth7Y5YmZs57Pi+4x6c2dStAUvaQkHQLnEQv1jzBUW43GvZW8OFqA== - -"@rollup/rollup-win32-ia32-msvc@4.18.0": - version "4.18.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.18.0.tgz#14e0b404b1c25ebe6157a15edb9c46959ba74c54" - integrity sha512-Txjh+IxBPbkUB9+SXZMpv+b/vnTEtFyfWZgJ6iyCmt2tdx0OF5WhFowLmnh8ENGNpfUlUZkdI//4IEmhwPieNg== - -"@rollup/rollup-win32-x64-msvc@4.18.0": - version "4.18.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.18.0.tgz#5d694d345ce36b6ecf657349e03eb87297e68da4" - integrity sha512-UOo5FdvOL0+eIVTgS4tIdbW+TtnBLWg1YBCcU2KWM7nuNwRz9bksDX1bekJJCpu25N1DVWaCwnT39dVQxzqS8g== - "@sinclair/typebox@0.25.24": version "0.25.24" resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.25.24.tgz#8c7688559979f7079aacaf31aa881c3aa410b718" integrity sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ== -"@sindresorhus/is@^4.0.0": - version "4.6.0" - resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-4.6.0.tgz#3c7c9c46e678feefe7a2e5bb609d3dbd665ffb3f" - integrity sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw== - -"@szmarczak/http-timer@^4.0.5": - version "4.0.6" - resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-4.0.6.tgz#b4a914bb62e7c272d4e5989fe4440f812ab1d807" - integrity sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w== - dependencies: - defer-to-connect "^2.0.0" - "@tootallnate/once@1": version "1.1.2" resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== +"@tootallnate/once@2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf" + integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A== + "@ts-morph/common@~0.11.0": version "0.11.1" resolved "https://registry.yarnpkg.com/@ts-morph/common/-/common-0.11.1.tgz#281af2a0642b19354d8aa07a0d50dfdb4aa8164e" @@ -1715,247 +174,100 @@ resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.4.tgz#0b92dcc0cc1c81f6f306a381f28e31b1a56536e9" integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== -"@types/acorn@^4.0.0": - version "4.0.6" - resolved "https://registry.yarnpkg.com/@types/acorn/-/acorn-4.0.6.tgz#d61ca5480300ac41a7d973dd5b84d0a591154a22" - integrity sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ== - dependencies: - "@types/estree" "*" - -"@types/cacheable-request@^6.0.1": - version "6.0.3" - resolved "https://registry.yarnpkg.com/@types/cacheable-request/-/cacheable-request-6.0.3.tgz#a430b3260466ca7b5ca5bfd735693b36e7a9d183" - integrity sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw== - dependencies: - "@types/http-cache-semantics" "*" - "@types/keyv" "^3.1.4" - "@types/node" "*" - "@types/responselike" "^1.0.0" - -"@types/cookie@^0.4.0": - version "0.4.1" - resolved "https://registry.yarnpkg.com/@types/cookie/-/cookie-0.4.1.tgz#bfd02c1f2224567676c1545199f87c3a861d878d" - integrity sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q== - -"@types/debug@^4.0.0": - version "4.1.12" - resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.12.tgz#a155f21690871953410df4b6b6f53187f0500917" - integrity sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ== - dependencies: - "@types/ms" "*" - -"@types/estree-jsx@^0.0.1": - version "0.0.1" - resolved "https://registry.yarnpkg.com/@types/estree-jsx/-/estree-jsx-0.0.1.tgz#c36d7a1afeb47a95a8ee0b7bc8bc705db38f919d" - integrity sha512-gcLAYiMfQklDCPjQegGn0TBAn9it05ISEsEhlKQUddIk7o2XDokOcTN7HBO8tznM0D9dGezvHEfRZBfZf6me0A== - dependencies: - "@types/estree" "*" - -"@types/estree-jsx@^1.0.0": - version "1.0.5" - resolved "https://registry.yarnpkg.com/@types/estree-jsx/-/estree-jsx-1.0.5.tgz#858a88ea20f34fe65111f005a689fa1ebf70dc18" - integrity sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg== - dependencies: - "@types/estree" "*" - -"@types/estree@*", "@types/estree@1.0.5", "@types/estree@^1.0.0": - version "1.0.5" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.5.tgz#a6ce3e556e00fd9895dd872dd172ad0d4bd687f4" - integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw== - -"@types/glob@^7.1.1": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.2.0.tgz#bc1b5bf3aa92f25bd5dd39f35c57361bdce5b2eb" - integrity sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA== - dependencies: - "@types/minimatch" "*" - "@types/node" "*" - -"@types/hast@^2.0.0": - version "2.3.10" - resolved "https://registry.yarnpkg.com/@types/hast/-/hast-2.3.10.tgz#5c9d9e0b304bbb8879b857225c5ebab2d81d7643" - integrity sha512-McWspRw8xx8J9HurkVBfYj0xKoE25tOFlHGdx4MJ5xORQrMGZNqJhVQWaIbm6Oyla5kYOXtDiopzKRJzEOkwJw== - dependencies: - "@types/unist" "^2" - -"@types/http-cache-semantics@*": - version "4.0.4" - resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz#b979ebad3919799c979b17c72621c0bc0a31c6c4" - integrity sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA== - "@types/json-schema@^7.0.6": version "7.0.15" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== -"@types/keyv@^3.1.4": - version "3.1.4" - resolved "https://registry.yarnpkg.com/@types/keyv/-/keyv-3.1.4.tgz#3ccdb1c6751b0c7e52300bcdacd5bcbf8faa75b6" - integrity sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg== - dependencies: - "@types/node" "*" - -"@types/mdast@^3.0.0": - version "3.0.15" - resolved "https://registry.yarnpkg.com/@types/mdast/-/mdast-3.0.15.tgz#49c524a263f30ffa28b71ae282f813ed000ab9f5" - integrity sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ== - dependencies: - "@types/unist" "^2" - -"@types/mdurl@^1.0.0": - version "1.0.5" - resolved "https://registry.yarnpkg.com/@types/mdurl/-/mdurl-1.0.5.tgz#3e0d2db570e9fb6ccb2dc8fde0be1d79ac810d39" - integrity sha512-6L6VymKTzYSrEf4Nev4Xa1LCHKrlTlYCBMTlQKFuddo1CvQcE52I0mwfOJayueUC7MJuXOeHTcIU683lzd0cUA== - -"@types/minimatch@*": - version "5.1.2" - resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-5.1.2.tgz#07508b45797cb81ec3f273011b054cd0755eddca" - integrity sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA== - -"@types/ms@*": - version "0.7.34" - resolved "https://registry.yarnpkg.com/@types/ms/-/ms-0.7.34.tgz#10964ba0dee6ac4cd462e2795b6bebd407303433" - integrity sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g== - -"@types/node@*": - version "20.14.9" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.14.9.tgz#12e8e765ab27f8c421a1820c99f5f313a933b420" - integrity sha512-06OCtnTXtWOZBJlRApleWndH4JsRVs1pDCc8dLSQp+7PpUpX3ePdHyeNSFTeSe7FtKyQkrlPvHwJOW3SLd8Oyg== - dependencies: - undici-types "~5.26.4" - -"@types/node@14.18.33": - version "14.18.33" - resolved "https://registry.yarnpkg.com/@types/node/-/node-14.18.33.tgz#8c29a0036771569662e4635790ffa9e057db379b" - integrity sha512-qelS/Ra6sacc4loe/3MSjXNL1dNQ/GjxNHVzuChwMfmk7HuycRLVQN2qNY3XahK+fZc5E2szqQSKUyAF0E+2bg== +"@types/node@16.18.11": + version "16.18.11" + resolved "https://registry.yarnpkg.com/@types/node/-/node-16.18.11.tgz#cbb15c12ca7c16c85a72b6bdc4d4b01151bb3cae" + integrity sha512-3oJbGBUWuS6ahSnEq1eN2XrCyf4YsWI8OyCvo7c64zQJNplk3mO84t53o8lfTk+2ji59g5ycfc6qQ3fdHliHuA== -"@types/prop-types@*": - version "15.7.12" - resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.12.tgz#12bb1e2be27293c1406acb6af1c3f3a1481d98c6" - integrity sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q== +"@vercel/build-utils@8.3.7": + version "8.3.7" + resolved "https://registry.yarnpkg.com/@vercel/build-utils/-/build-utils-8.3.7.tgz#4859c1d0c605b3392dd5ba82a49ebae755f2ce4c" + integrity sha512-xscYxdzQ2IAMNbXlldbTZv1+YtD/Yq/EXgruqFBTZ/ofh+GIMCig1YrJh2CS6R2B2ja77szUiel//T8lRrDN1g== -"@types/react@^18.0.15": - version "18.3.3" - resolved "https://registry.yarnpkg.com/@types/react/-/react-18.3.3.tgz#9679020895318b0915d7a3ab004d92d33375c45f" - integrity sha512-hti/R0pS0q1/xx+TsI73XIqk26eBsISZ2R0wUijXIngRK9R/e7Xw/cXVxQK7R5JjW+SV4zGcn5hXjudkN/pLIw== - dependencies: - "@types/prop-types" "*" - csstype "^3.0.2" +"@vercel/error-utils@2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@vercel/error-utils/-/error-utils-2.0.2.tgz#d75ccce100dbdfc9cb85700767b59d4257a91113" + integrity sha512-Sj0LFafGpYr6pfCqrQ82X6ukRl5qpmVrHM/191kNYFqkkB9YkjlMAj6QcEsvCG259x4QZ7Tya++0AB85NDPbKQ== -"@types/responselike@^1.0.0": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@types/responselike/-/responselike-1.0.3.tgz#cc29706f0a397cfe6df89debfe4bf5cea159db50" - integrity sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw== +"@vercel/fun@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@vercel/fun/-/fun-1.1.0.tgz#5bac83585a736b6bfe4616017fe5f0a46562c3ba" + integrity sha512-SpuPAo+MlAYMtcMcC0plx7Tv4Mp7SQhJJj1iIENlOnABL24kxHpL09XLQMGzZIzIW7upR8c3edwgfpRtp+dhVw== dependencies: - "@types/node" "*" - -"@types/unist@^2", "@types/unist@^2.0.0": - version "2.0.10" - resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.10.tgz#04ffa7f406ab628f7f7e97ca23e290cd8ab15efc" - integrity sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA== - -"@vanilla-extract/babel-plugin-debug-ids@^1.0.4": - version "1.0.6" - resolved "https://registry.yarnpkg.com/@vanilla-extract/babel-plugin-debug-ids/-/babel-plugin-debug-ids-1.0.6.tgz#e9033b5fb97c1b13066cec701f42e753373c2516" - integrity sha512-C188vUEYmw41yxg3QooTs8r1IdbDQQ2mH7L5RkORBnHx74QlmsNfqVmKwAVTgrlYt8JoRaWMtPfGm/Ql0BNQrA== - dependencies: - "@babel/core" "^7.23.9" - -"@vanilla-extract/css@^1.14.0": - version "1.15.3" - resolved "https://registry.yarnpkg.com/@vanilla-extract/css/-/css-1.15.3.tgz#debf04f61496e290b53f045a2cb6966cc1ba9448" - integrity sha512-mxoskDAxdQAspbkmQRxBvolUi1u1jnyy9WZGm+GeH8V2wwhEvndzl1QoK7w8JfA0WFevTxbev5d+i+xACZlPhA== - dependencies: - "@emotion/hash" "^0.9.0" - "@vanilla-extract/private" "^1.0.5" - css-what "^6.1.0" - cssesc "^3.0.0" - csstype "^3.0.7" - dedent "^1.5.3" - deep-object-diff "^1.1.9" - deepmerge "^4.2.2" - media-query-parser "^2.0.2" - modern-ahocorasick "^1.0.0" - picocolors "^1.0.0" - -"@vanilla-extract/integration@^6.2.0": - version "6.5.0" - resolved "https://registry.yarnpkg.com/@vanilla-extract/integration/-/integration-6.5.0.tgz#613407565b07dc60b123ca9080ea3f47cd2ce7bb" - integrity sha512-E2YcfO8vA+vs+ua+gpvy1HRqvgWbI+MTlUpxA8FvatOvybuNcWAY0CKwQ/Gpj7rswYKtC6C7+xw33emM6/ImdQ== - dependencies: - "@babel/core" "^7.20.7" - "@babel/plugin-syntax-typescript" "^7.20.0" - "@vanilla-extract/babel-plugin-debug-ids" "^1.0.4" - "@vanilla-extract/css" "^1.14.0" - esbuild "npm:esbuild@~0.17.6 || ~0.18.0 || ~0.19.0" - eval "0.1.8" - find-up "^5.0.0" - javascript-stringify "^2.0.1" - lodash "^4.17.21" - mlly "^1.4.2" - outdent "^0.8.0" - vite "^5.0.11" - vite-node "^1.2.0" - -"@vanilla-extract/private@^1.0.5": - version "1.0.5" - resolved "https://registry.yarnpkg.com/@vanilla-extract/private/-/private-1.0.5.tgz#8c08ac4851f4cc89a3dcdb858d8938e69b1481c4" - integrity sha512-6YXeOEKYTA3UV+RC8DeAjFk+/okoNz/h88R+McnzA2zpaVqTR/Ep+vszkWYlGBcMNO7vEkqbq5nT/JMMvhi+tw== - -"@vercel/build-utils@6.7.1": - version "6.7.1" - resolved "https://registry.yarnpkg.com/@vercel/build-utils/-/build-utils-6.7.1.tgz#94bccb959d9f2dcdecb7744c939b546073902373" - integrity sha512-Ecc9oQBSVwk1suENcRcj1L6gQrUt4+0XA9oPFxrUpoFEk04lP/ZV3qAQPk+ex08N+vfUulYdqb+cmVTnwqsmqw== - -"@vercel/error-utils@1.0.8": - version "1.0.8" - resolved "https://registry.yarnpkg.com/@vercel/error-utils/-/error-utils-1.0.8.tgz#5cefc4142820846d011cf048ddfb0afda81d484b" - integrity sha512-s+f7jP2oH1koICbQ8e3K9hOpOeUct7rbCnF9qsNwXemq850wAh2e90tp9R6oYBM0BNpiLRRm+oG5zD2sCIm3HQ== - -"@vercel/gatsby-plugin-vercel-analytics@1.0.10": - version "1.0.10" - resolved "https://registry.yarnpkg.com/@vercel/gatsby-plugin-vercel-analytics/-/gatsby-plugin-vercel-analytics-1.0.10.tgz#05109138b24880fcd81476c78580bb00bea09ed5" - integrity sha512-v329WHdtIce+y7oAmaWRvEx59Xfo0FxlQqK4BJG0u6VWYoKWPaflohDAiehIZf/YHCRVb59ZxnzmMOcm/LR8YQ== + "@tootallnate/once" "2.0.0" + async-listen "1.2.0" + debug "4.1.1" + execa "3.2.0" + fs-extra "8.1.0" + generic-pool "3.4.2" + micro "9.3.5-canary.3" + ms "2.1.1" + node-fetch "2.6.7" + path-match "1.2.4" + promisepipe "3.0.0" + semver "7.3.5" + stat-mode "0.3.0" + stream-to-promise "2.2.0" + tar "4.4.18" + tree-kill "1.2.2" + uid-promise "1.0.0" + uuid "3.3.2" + xdg-app-paths "5.1.0" + yauzl-promise "2.1.3" + +"@vercel/gatsby-plugin-vercel-analytics@1.0.11": + version "1.0.11" + resolved "https://registry.yarnpkg.com/@vercel/gatsby-plugin-vercel-analytics/-/gatsby-plugin-vercel-analytics-1.0.11.tgz#07e6a02665c340ad31ad9d9d3b0df00a30a32aed" + integrity sha512-iTEA0vY6RBPuEzkwUTVzSHDATo1aF6bdLLspI68mQ/BTbi5UQEGjpjyzdKOVcSYApDtFU6M6vypZ1t4vIEnHvw== dependencies: - "@babel/runtime" "7.12.1" web-vitals "0.2.4" -"@vercel/gatsby-plugin-vercel-builder@1.2.10": - version "1.2.10" - resolved "https://registry.yarnpkg.com/@vercel/gatsby-plugin-vercel-builder/-/gatsby-plugin-vercel-builder-1.2.10.tgz#b733da151a769b54cc3eb698340c34314fd26a43" - integrity sha512-7iSCCOe5XyU8lJVcWd9dDxXq8qF91nEKkO6McxOOVRgiPsJU4T/x48o/+gIbUa35zIv7XltZojRQDRq3jzyfWQ== +"@vercel/gatsby-plugin-vercel-builder@2.0.41": + version "2.0.41" + resolved "https://registry.yarnpkg.com/@vercel/gatsby-plugin-vercel-builder/-/gatsby-plugin-vercel-builder-2.0.41.tgz#269a8e746efbd3de5bd8248a468cf23575fad18f" + integrity sha512-YiwLj+lK/AYFAKkdgoTUIVgqYRiS+R/JxLAAm48jy14H8gNr5wmzCu86vedIWb8u6JYQG5mAkTAFP0abkxZnRA== dependencies: "@sinclair/typebox" "0.25.24" - "@vercel/build-utils" "6.7.1" - "@vercel/node" "2.12.0" - "@vercel/routing-utils" "2.2.0" + "@vercel/build-utils" "8.3.7" + "@vercel/routing-utils" "3.1.0" esbuild "0.14.47" etag "1.8.1" fs-extra "11.1.0" -"@vercel/go@2.5.0": - version "2.5.0" - resolved "https://registry.yarnpkg.com/@vercel/go/-/go-2.5.0.tgz#566fe4d126dd0de0f3cd769a03702255a65570d3" - integrity sha512-KUUuFpl65oxyCbc7gDWkhbRUg2ZcAa5bpUrhnqYW4ohDicPGe7F7mo/v4GCp/zsFGFNJf9msbmycJA1f9Sk9Ug== +"@vercel/go@3.1.1": + version "3.1.1" + resolved "https://registry.yarnpkg.com/@vercel/go/-/go-3.1.1.tgz#0894a836ef000e90ef78cee02544dc975dec6bc4" + integrity sha512-mrzomNYltxkjvtUmaYry5YEyvwTz6c/QQHE5Gr/pPGRIniUiP6T6OFOJ49RBN7e6pRXaNzHPVuidiuBhvHh5+Q== -"@vercel/hydrogen@0.0.63": - version "0.0.63" - resolved "https://registry.yarnpkg.com/@vercel/hydrogen/-/hydrogen-0.0.63.tgz#de211cc531ffe71bc3a45a81e8545f56fac40159" - integrity sha512-FxBjgX0Mt22eqvHGrMKDcfxt/81y9QrHM6md+hGIflkQ9DvrtyYmmFze588yXWAv/I04eCgVoE+/KsgETkRi3w== +"@vercel/hydrogen@1.0.4": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@vercel/hydrogen/-/hydrogen-1.0.4.tgz#77dd94c86e967d587a929ef3d74e15beea1f4b9b" + integrity sha512-Sc0lpmI/J6O3o2cL75k8klL7ir2gi6kYI92O5+MrR3hh4fwz/atUIL9UWsTGuFjKTm69VAoJrmn3VKf0/0SGLw== + dependencies: + "@vercel/static-config" "3.0.0" + ts-morph "12.0.0" -"@vercel/next@3.7.5": - version "3.7.5" - resolved "https://registry.yarnpkg.com/@vercel/next/-/next-3.7.5.tgz#54bd0c1f685678a96c89a1c434afd329dd3d42bf" - integrity sha512-NonL8rt49EnwooMnAXYUDpz2B+e+yoQRdEZoekZlnFzP6VF1F1r14N2X9zUqxeRH7rY6X53MgiRNSHeZKqTXPA== +"@vercel/next@4.3.7": + version "4.3.7" + resolved "https://registry.yarnpkg.com/@vercel/next/-/next-4.3.7.tgz#08699aeb610267c878f47024b0f877a91c8fdb7f" + integrity sha512-3VRPicjGJxPCRwO9oScn9cpCkzRWcZRZRsmvgDPgWihvOhpKYfPQpkE73l6o+ypC4ONsuy/IBC3STov28vqOAQ== + dependencies: + "@vercel/nft" "0.27.3" -"@vercel/nft@0.22.5": - version "0.22.5" - resolved "https://registry.yarnpkg.com/@vercel/nft/-/nft-0.22.5.tgz#951bd7589ceebdd3e280afcf3a13bdacf83f6b7e" - integrity sha512-mug57Wd1BL7GMj9gXMgMeKUjdqO0e4u+0QLPYMFE1rwdJ+55oPy6lp3nIBCS8gOvigT62UI4QKUL2sGqcoW4Hw== +"@vercel/nft@0.27.3": + version "0.27.3" + resolved "https://registry.yarnpkg.com/@vercel/nft/-/nft-0.27.3.tgz#03bc09fb0d7bd386c810ec0908a7c853ae73b999" + integrity sha512-oySTdDSzUAFDXpsSLk9Q943o+/Yu/+TCFxnehpFQEf/3khi2stMpTHPVNwFdvZq/Z4Ky93lE+MGHpXCRpMkSCA== dependencies: "@mapbox/node-pre-gyp" "^1.0.5" "@rollup/pluginutils" "^4.0.0" acorn "^8.6.0" + acorn-import-attributes "^1.9.5" async-sema "^3.1.1" bindings "^1.4.0" estree-walker "2.0.2" @@ -1965,126 +277,114 @@ node-gyp-build "^4.2.2" resolve-from "^5.0.0" -"@vercel/node-bridge@4.0.1": - version "4.0.1" - resolved "https://registry.yarnpkg.com/@vercel/node-bridge/-/node-bridge-4.0.1.tgz#e4f41188f61d9cd4e7c44de31d436dd447e1978c" - integrity sha512-XEfKfnLGzlIBpad7eGNPql1HnMhoSTv9q3uDNC4axdaAC/kI5yvl8kXjuCPAXYvpbJnVQPpcSUC5/r5ap8F3jA== - -"@vercel/node@2.12.0": - version "2.12.0" - resolved "https://registry.yarnpkg.com/@vercel/node/-/node-2.12.0.tgz#2eff4ffb04ae3ca19a7fd7e49e4f376791284abb" - integrity sha512-QItQ4DjKrHqTMk/hmtX64V5RfDdp+fDoFzbSbPUICkIOHK3EBCJ5c/392Iv05AwSv+mJIALZUGRQz5o4HKvs6A== - dependencies: - "@edge-runtime/vm" "2.0.0" - "@types/node" "14.18.33" - "@vercel/build-utils" "6.7.1" - "@vercel/error-utils" "1.0.8" - "@vercel/node-bridge" "4.0.1" - "@vercel/static-config" "2.0.16" - async-listen "1.2.0" - edge-runtime "2.1.4" +"@vercel/node@3.2.9": + version "3.2.9" + resolved "https://registry.yarnpkg.com/@vercel/node/-/node-3.2.9.tgz#bd088cdd4de90d8a2164aed46c577a9344976a46" + integrity sha512-q3HLv+yIU3sOFS82GltdjFiBXt8cRcPmDKD3lI0z4cDLb2FSJeGE4yYqK7FxZmO8E5Hqzrm2uUoy5Mw3XERTmw== + dependencies: + "@edge-runtime/node-utils" "2.3.0" + "@edge-runtime/primitives" "4.1.0" + "@edge-runtime/vm" "3.2.0" + "@types/node" "16.18.11" + "@vercel/build-utils" "8.3.7" + "@vercel/error-utils" "2.0.2" + "@vercel/nft" "0.27.3" + "@vercel/static-config" "3.0.0" + async-listen "3.0.0" + cjs-module-lexer "1.2.3" + edge-runtime "2.5.9" + es-module-lexer "1.4.1" esbuild "0.14.47" - exit-hook "2.2.1" - node-fetch "2.6.7" + etag "1.8.1" + node-fetch "2.6.9" path-to-regexp "6.2.1" ts-morph "12.0.0" ts-node "10.9.1" - typescript "4.3.4" - -"@vercel/python@3.1.59": - version "3.1.59" - resolved "https://registry.yarnpkg.com/@vercel/python/-/python-3.1.59.tgz#f6663c73982c4afc39c09ef618a61cb889bbdfa7" - integrity sha512-38/KM33nJK5Jk+FiNhi3MTB7arWGGoCF8blejAexpw+NTL70nNy+4O7TN+y7qqx7Az4nygEgBBTgQVfkgIj0Yg== - -"@vercel/redwood@1.1.14": - version "1.1.14" - resolved "https://registry.yarnpkg.com/@vercel/redwood/-/redwood-1.1.14.tgz#bf41b1c1ecf686ba90a1c9a22211f01171f79438" - integrity sha512-QFIhLegvfVp2OLdv96krTyz6C5/cUncUg4CEEfx3U48+l31hWaWcnjI6+MhgN4PZC4YN+s21vKZNz/UWnGnTiA== - dependencies: - "@vercel/nft" "0.22.5" - "@vercel/routing-utils" "2.2.0" - semver "6.1.1" - -"@vercel/remix-builder@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@vercel/remix-builder/-/remix-builder-1.8.5.tgz#59f2592660a3e76836dff6c72676884807477982" - integrity sha512-nXUNsW6+gfHRqnZdXNm9Myx8G8nihbfRe/myAbvUHAXaym+9Bz+WHC3hXXr6YqAOVhjWvCfxAlA9eYqHbhlvKA== - dependencies: - "@remix-run/dev" "npm:@vercel/remix-run-dev@1.15.0" - "@vercel/build-utils" "6.7.1" - "@vercel/nft" "0.22.5" - "@vercel/static-config" "2.0.16" - path-to-regexp "6.2.1" - semver "7.3.8" + typescript "4.9.5" + undici "5.28.4" + +"@vercel/python@4.3.1": + version "4.3.1" + resolved "https://registry.yarnpkg.com/@vercel/python/-/python-4.3.1.tgz#7c5fbe63f34ccaaf9fb8e2e099105d70d374db5e" + integrity sha512-pWRApBwUsAQJS8oZ7eKMiaBGbYJO71qw2CZqDFvkTj34FNBZtNIUcWSmqGfJJY5m2pU/9wt8z1CnKIyT9dstog== + +"@vercel/redwood@2.1.3": + version "2.1.3" + resolved "https://registry.yarnpkg.com/@vercel/redwood/-/redwood-2.1.3.tgz#770a8edc076e11a2fedf5b4f93adb541c4b6d52b" + integrity sha512-lpsdQSHS2hvSX29/rJNm4q38dVXKstS4MVg875KE6zyXpACwviXuet0Cadyv0E60w7f2B6Ra+nJMpwKz6oJ5xg== + dependencies: + "@vercel/nft" "0.27.3" + "@vercel/routing-utils" "3.1.0" + "@vercel/static-config" "3.0.0" + semver "6.3.1" ts-morph "12.0.0" -"@vercel/routing-utils@2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@vercel/routing-utils/-/routing-utils-2.2.0.tgz#05c807cc2798234d28327a6b24fc25ad84d80de9" - integrity sha512-Ro90s1mStpbgu2HV8I4LFEKNG8GVxkWm238ebD/23BCO9/DxIJ3+wCzga8j8BMmG57x4etVlaHNV25bbzW5r2g== +"@vercel/remix-builder@2.2.6": + version "2.2.6" + resolved "https://registry.yarnpkg.com/@vercel/remix-builder/-/remix-builder-2.2.6.tgz#8fec382407e8bfb5903addf35cc00886c9d8a0cf" + integrity sha512-LOFad9G+CZuq2TNvbT5A03+c437YPy6/J1hHBGMWS6rQ/PWHQSJdEUga9RwTavWoWpCCnrVpMM115EgMKk8JBA== + dependencies: + "@vercel/error-utils" "2.0.2" + "@vercel/nft" "0.27.3" + "@vercel/static-config" "3.0.0" + ts-morph "12.0.0" + +"@vercel/routing-utils@3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@vercel/routing-utils/-/routing-utils-3.1.0.tgz#6a71903f4106006b2cb52add9d3b708b59acaaaf" + integrity sha512-Ci5xTjVTJY/JLZXpCXpLehMft97i9fH34nu9PGav6DtwkVUF6TOPX86U0W0niQjMZ5n6/ZP0BwcJK2LOozKaGw== dependencies: path-to-regexp "6.1.0" optionalDependencies: ajv "^6.0.0" -"@vercel/ruby@1.3.75": - version "1.3.75" - resolved "https://registry.yarnpkg.com/@vercel/ruby/-/ruby-1.3.75.tgz#9588a63bd1335d9a29a4fbefb41872374bf1ff7f" - integrity sha512-sUmzJnd9O1N7StFEpKG9JvHJvHmJjgfrmhgQsQLEQ7OOQJkO9DYoLomlrIDW9qNdu7dNOeyj7gQY5B8y8RMntw== +"@vercel/ruby@2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@vercel/ruby/-/ruby-2.1.0.tgz#431400276bcb131ef0b9f6cad2e4242557b921a4" + integrity sha512-UZYwlSEEfVnfzTmgkD+kxex9/gkZGt7unOWNyWFN7V/ZnZSsGBUgv6hXLnwejdRi3EztgRQEBd1kUKlXdIeC0Q== -"@vercel/static-build@1.3.25": - version "1.3.25" - resolved "https://registry.yarnpkg.com/@vercel/static-build/-/static-build-1.3.25.tgz#7cc89d477655196a2f4f99d014c2beb212206b80" - integrity sha512-yBb37pPGLlQEF/QPUezENo4Eu9gq7Ctzl56Dff/Kv6pApzYZ6Zj88OvRoNBTXhxDi0g4EGSYnP0uYtB7lBQcHA== +"@vercel/static-build@2.5.19": + version "2.5.19" + resolved "https://registry.yarnpkg.com/@vercel/static-build/-/static-build-2.5.19.tgz#1ef3150b5b8fcb44128776acce408cbb0fcc4e91" + integrity sha512-YZPhcDOA7o4S48kzXJ5knYAcbYi8s7DIQl6/B/s0sGar+fWb65obtH6SyIdZt1uwLBKttOdi6zv3j0cLbU0nDw== dependencies: - "@vercel/gatsby-plugin-vercel-analytics" "1.0.10" - "@vercel/gatsby-plugin-vercel-builder" "1.2.10" + "@vercel/gatsby-plugin-vercel-analytics" "1.0.11" + "@vercel/gatsby-plugin-vercel-builder" "2.0.41" + "@vercel/static-config" "3.0.0" + ts-morph "12.0.0" -"@vercel/static-config@2.0.16": - version "2.0.16" - resolved "https://registry.yarnpkg.com/@vercel/static-config/-/static-config-2.0.16.tgz#2495325056e62b94925d8432b703bbf5625b06e5" - integrity sha512-lULo+NWBMpTJb9kR4AwYYK/2e7wknTJO2iFxgYYOkG5i12WHgPhMnXDKrEOcotxctd0yPKx3TsWVGEXniNm63g== +"@vercel/static-config@3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@vercel/static-config/-/static-config-3.0.0.tgz#2bd56aa08d1293f0982ca3a5923412550bf64bfe" + integrity sha512-2qtvcBJ1bGY0dYGYh3iM7yGKkk971FujLEDXzuW5wcZsPr1GSEjO/w2iSr3qve6nDDtBImsGoDEnus5FI4+fIw== dependencies: ajv "8.6.3" json-schema-to-ts "1.6.4" ts-morph "12.0.0" -"@web3-storage/multipart-parser@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@web3-storage/multipart-parser/-/multipart-parser-1.0.0.tgz#6b69dc2a32a5b207ba43e556c25cc136a56659c4" - integrity sha512-BEO6al7BYqcnfX15W2cnGR+Q566ACXAT9UQykORCWW80lmkpWsnEob6zJS1ZVBKsSJC8+7vJkHwlp+lXG1UCdw== - abbrev@1: version "1.1.1" resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== -accepts@~1.3.8: - version "1.3.8" - resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" - integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== - dependencies: - mime-types "~2.1.34" - negotiator "0.6.3" - -acorn-jsx@^5.0.0: - version "5.3.2" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" - integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== +acorn-import-attributes@^1.9.5: + version "1.9.5" + resolved "https://registry.yarnpkg.com/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz#7eb1557b1ba05ef18b5ed0ec67591bfab04688ef" + integrity sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ== -acorn-walk@^8.1.1, acorn-walk@^8.2.0: +acorn-walk@^8.1.1: version "8.3.3" resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.3.tgz#9caeac29eefaa0c41e3d4c65137de4d6f34df43e" integrity sha512-MxXdReSRhGO7VlFe1bRG/oI7/mdLV9B9JJT0N8vZOhF7gFRR5l3M8W9G8JxmKV+JC5mGqJ0QvqfSOLsCPa4nUw== dependencies: acorn "^8.11.0" -acorn@^8.0.0, acorn@^8.11.0, acorn@^8.11.3, acorn@^8.4.1, acorn@^8.6.0, acorn@^8.7.0: +acorn@^8.11.0, acorn@^8.4.1, acorn@^8.6.0: version "8.12.0" resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.12.0.tgz#1627bfa2e058148036133b8d9b51a700663c294c" integrity sha512-RTvkC4w+KNXrM39/lWCUaG0IbRkWdCv7W/IOW9oU6SawyxulvkQy5HQPVTKxEjczcUvapcrw3cFx/60VN/NRNw== -agent-base@6, agent-base@^6.0.0, agent-base@^6.0.2: +agent-base@6, agent-base@^6.0.2: version "6.0.2" resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== @@ -2133,33 +433,17 @@ ajv@^6.0.0: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ansi-escapes@^4.2.1: - version "4.3.2" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" - integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== - dependencies: - type-fest "^0.21.3" - ansi-regex@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== -ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== - dependencies: - color-convert "^1.9.0" - -ansi-styles@^4.0.0, ansi-styles@^4.1.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" - integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== - dependencies: - color-convert "^2.0.1" +any-promise@^1.1.0, any-promise@~1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" + integrity sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A== -anymatch@~3.1.2: +anymatch@~3.1.1: version "3.1.3" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== @@ -2188,94 +472,36 @@ are-we-there-yet@^3.0.0: delegates "^1.0.0" readable-stream "^3.6.0" +arg@4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.0.tgz#583c518199419e0037abb74062c37f8519e575f0" + integrity sha512-ZWc51jO3qegGkVh8Hwpv636EkbesNV5ZNQPCtRa+0qytRYPEs9IYT9qITY9buezqUH5uqyzlWLcufrzU2rffdg== + arg@^4.1.0: version "4.1.3" resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== -arg@^5.0.1: - version "5.0.2" - resolved "https://registry.yarnpkg.com/arg/-/arg-5.0.2.tgz#c81433cc427c92c4dcf4865142dbca6f15acd59c" - integrity sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg== - -argparse@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" - integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== - -array-flatten@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" - integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== - -array-union@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" - integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== - -ast-types@0.15.2: - version "0.15.2" - resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.15.2.tgz#39ae4809393c4b16df751ee563411423e85fb49d" - integrity sha512-c27loCv9QkZinsa5ProX751khO9DJl/AcB5c2KNtA6NRvHKS0PgLfcftz72KVq504vB0Gku5s2kUZzDBvQWvHg== - dependencies: - tslib "^2.0.1" - -ast-types@^0.13.2: - version "0.13.4" - resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.13.4.tgz#ee0d77b343263965ecc3fb62da16e7222b2b6782" - integrity sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w== - dependencies: - tslib "^2.0.1" - -astring@^1.6.0: - version "1.8.6" - resolved "https://registry.yarnpkg.com/astring/-/astring-1.8.6.tgz#2c9c157cf1739d67561c56ba896e6948f6b93731" - integrity sha512-ISvCdHdlTDlH5IpxQJIex7BWBywFWgjJSVdwst+/iQCoEYnyOaQ95+X1JGshuBjGp6nxKUy1jMgE3zPqN7fQdg== - async-listen@1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/async-listen/-/async-listen-1.2.0.tgz#861ab6f92e1703ba54498b10ddb9b5da7b69f363" integrity sha512-CcEtRh/oc9Jc4uWeUwdpG/+Mb2YUHKmdaTf0gUr7Wa+bfp4xx70HOb3RuSTJMvqKNB1TkdTfjLdrcz2X4rkkZA== -async-listen@2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/async-listen/-/async-listen-2.0.3.tgz#be1be5a1b15e6007123e67275450fc4e84955e61" - integrity sha512-WVLi/FGIQaXyfYyNvmkwKT1RZbkzszLLnmW/gFCc5lbVvN/0QQCWpBwRBk2OWSdkkmKRBc8yD6BrKsjA3XKaSw== +async-listen@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/async-listen/-/async-listen-3.0.0.tgz#2e5941390b7d8c753d4dbe94bc6aecbdde52ec5e" + integrity sha512-V+SsTpDqkrWTimiotsyl33ePSjA5/KrithwupuvJ6ztsqPvGv6ge4OredFhPffVXiLN/QUWvE0XcqJaYgt6fOg== + +async-listen@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/async-listen/-/async-listen-3.0.1.tgz#cbe4edeace2b93ebf5cf8092899ee139457978b7" + integrity sha512-cWMaNwUJnf37C/S5TfCkk/15MwbPRwVYALA2jtjkbHjCmAPiDXyNJy2q3p1KAZzDLHAWyarUWSujUoHR4pEgrA== async-sema@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/async-sema/-/async-sema-3.1.1.tgz#e527c08758a0f8f6f9f15f799a173ff3c40ea808" integrity sha512-tLRNUXati5MFePdAk8dw7Qt7DpxPB60ofAgn8WRhW6a2rcimZnYBP9oxHiv0OHy+Wz7kPMG+t4LGdt31+4EmGg== -babel-plugin-polyfill-corejs2@^0.4.10: - version "0.4.11" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.11.tgz#30320dfe3ffe1a336c15afdcdafd6fd615b25e33" - integrity sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q== - dependencies: - "@babel/compat-data" "^7.22.6" - "@babel/helper-define-polyfill-provider" "^0.6.2" - semver "^6.3.1" - -babel-plugin-polyfill-corejs3@^0.10.4: - version "0.10.4" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.4.tgz#789ac82405ad664c20476d0233b485281deb9c77" - integrity sha512-25J6I8NGfa5YkCDogHRID3fVCadIR8/pGl1/spvCkzb6lVn6SR3ojpx9nOn9iEBcUsjY24AmdKm5khcfKdylcg== - dependencies: - "@babel/helper-define-polyfill-provider" "^0.6.1" - core-js-compat "^3.36.1" - -babel-plugin-polyfill-regenerator@^0.6.1: - version "0.6.2" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.2.tgz#addc47e240edd1da1058ebda03021f382bba785e" - integrity sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg== - dependencies: - "@babel/helper-define-polyfill-provider" "^0.6.2" - -bail@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/bail/-/bail-2.0.2.tgz#d26f5cd8fe5d6f832a31517b9f7c356040ba6d5d" - integrity sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw== - balanced-match@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" @@ -2286,11 +512,6 @@ base64-js@^1.3.1: resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== -big.js@^5.2.2: - version "5.2.2" - resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" - integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== - binary-extensions@^2.0.0: version "2.3.0" resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522" @@ -2303,7 +524,7 @@ bindings@^1.4.0, bindings@^1.5.0: dependencies: file-uri-to-path "1.0.0" -bl@^4.0.3, bl@^4.1.0: +bl@^4.0.3: version "4.1.0" resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== @@ -2312,24 +533,6 @@ bl@^4.0.3, bl@^4.1.0: inherits "^2.0.4" readable-stream "^3.4.0" -body-parser@1.20.2: - version "1.20.2" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.2.tgz#6feb0e21c4724d06de7ff38da36dad4f57a747fd" - integrity sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA== - dependencies: - bytes "3.1.2" - content-type "~1.0.5" - debug "2.6.9" - depd "2.0.0" - destroy "1.2.0" - http-errors "2.0.0" - iconv-lite "0.4.24" - on-finished "2.4.1" - qs "6.11.0" - raw-body "2.5.2" - type-is "~1.6.18" - unpipe "1.0.0" - brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" @@ -2345,27 +548,10 @@ braces@^3.0.3, braces@~3.0.2: dependencies: fill-range "^7.1.1" -browserify-zlib@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.1.4.tgz#bb35f8a519f600e0fa6b8485241c979d0141fb2d" - integrity sha512-19OEpq7vWgsH6WkvkBJQDFvJS1uPcbFOQ4v9CU839dO+ZZXUZO6XpE6hNCqvlIIj+4fZvRiJ6DsAQ382GwiyTQ== - dependencies: - pako "~0.2.0" - -browserslist@^4.22.2, browserslist@^4.23.0: - version "4.23.1" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.23.1.tgz#ce4af0534b3d37db5c1a4ca98b9080f985041e96" - integrity sha512-TUfofFo/KsK/bWZ9TWQ5O26tsWW4Uhmt8IYklbnUa70udB6P2wA7w7o4PY4muaEPBQaAX+CEnmmIA41NVHtPVw== - dependencies: - caniuse-lite "^1.0.30001629" - electron-to-chromium "^1.4.796" - node-releases "^2.0.14" - update-browserslist-db "^1.0.16" - -buffer-from@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" - integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== +buffer-crc32@~0.2.3: + version "0.2.13" + resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" + integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ== buffer@^5.5.0: version "5.7.1" @@ -2375,17 +561,12 @@ buffer@^5.5.0: base64-js "^1.3.1" ieee754 "^1.1.13" -bytes@3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" - integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== - -cac@^6.7.14: - version "6.7.14" - resolved "https://registry.yarnpkg.com/cac/-/cac-6.7.14.tgz#804e1e6f506ee363cb0e3ccbb09cad5dd9870959" - integrity sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ== +bytes@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" + integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== -cacache@^15.0.5, cacache@^15.2.0: +cacache@^15.2.0: version "15.3.0" resolved "https://registry.yarnpkg.com/cacache/-/cacache-15.3.0.tgz#dc85380fb2f556fe3dda4c719bfa0ec875a7f1eb" integrity sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ== @@ -2409,103 +590,27 @@ cacache@^15.0.5, cacache@^15.2.0: tar "^6.0.2" unique-filename "^1.1.1" -cacheable-lookup@^5.0.3: - version "5.0.4" - resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz#5a6b865b2c44357be3d5ebc2a467b032719a7005" - integrity sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA== - -cacheable-request@^7.0.2: - version "7.0.4" - resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-7.0.4.tgz#7a33ebf08613178b403635be7b899d3e69bbe817" - integrity sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg== - dependencies: - clone-response "^1.0.2" - get-stream "^5.1.0" - http-cache-semantics "^4.0.0" - keyv "^4.0.0" - lowercase-keys "^2.0.0" - normalize-url "^6.0.1" - responselike "^2.0.0" - -call-bind@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.7.tgz#06016599c40c56498c18769d2730be242b6fa3b9" - integrity sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w== - dependencies: - es-define-property "^1.0.0" - es-errors "^1.3.0" - function-bind "^1.1.2" - get-intrinsic "^1.2.4" - set-function-length "^1.2.1" - -caniuse-lite@^1.0.30001629: - version "1.0.30001638" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001638.tgz#598e1f0c2ac36f37ebc3f5b8887a32ca558e5d56" - integrity sha512-5SuJUJ7cZnhPpeLHaH0c/HPAnAHZvS6ElWyHK9GSIbVOQABLzowiI2pjmpvZ1WEbkyz46iFd4UXlOHR5SqgfMQ== - -chalk@^2.4.2: - version "2.4.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" +chatgpt-telegram-workers@^1.8.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/chatgpt-telegram-workers/-/chatgpt-telegram-workers-1.8.0.tgz#e03c00a5080f16085052c6d52e5ab25e12dbcfe0" + integrity sha512-3qklSYZ5Yieknbl0uDW8HwKkMcZRH1ACIylZLEcs67z7eAzPzB2u4teNCZtg6i4fGpW+3NBDmb9m1vo6N/ivWg== -chalk@^4.1.0, chalk@^4.1.1, chalk@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" - integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== +chokidar@3.3.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.3.1.tgz#c84e5b3d18d9a4d77558fef466b1bf16bbeb3450" + integrity sha512-4QYCEWOcK3OJrxwvyyAOxFuhpvOVCYkr33LPfFNBjAD/w3sEzWsp2BUOkI4l9bHvWioAd0rc6NlHUOEaWkTeqg== dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -character-entities-html4@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/character-entities-html4/-/character-entities-html4-2.1.0.tgz#1f1adb940c971a4b22ba39ddca6b618dc6e56b2b" - integrity sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA== - -character-entities-legacy@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz#76bc83a90738901d7bc223a9e93759fdd560125b" - integrity sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ== - -character-entities@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/character-entities/-/character-entities-2.0.2.tgz#2d09c2e72cd9523076ccb21157dff66ad43fcc22" - integrity sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ== - -character-reference-invalid@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz#85c66b041e43b47210faf401278abf808ac45cb9" - integrity sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw== - -chardet@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" - integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== - -chatgpt-telegram-workers@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/chatgpt-telegram-workers/-/chatgpt-telegram-workers-1.7.0.tgz#c02241280b4761b486f5674154c7d73e602ba3ad" - integrity sha512-yoC7xygwMeoaudhDSHgSs09kWDlp9vKasEnAZx811TRZP/6ssMaoLabvm8MSZJyTwli6NHuAEiXEJl1UAil5hA== - -chokidar@^3.5.1: - version "3.6.0" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" - integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== - dependencies: - anymatch "~3.1.2" + anymatch "~3.1.1" braces "~3.0.2" - glob-parent "~5.1.2" + glob-parent "~5.1.0" is-binary-path "~2.1.0" is-glob "~4.0.1" normalize-path "~3.0.0" - readdirp "~3.6.0" + readdirp "~3.3.0" optionalDependencies: - fsevents "~2.3.2" + fsevents "~2.1.2" -chownr@^1.1.1: +chownr@^1.1.1, chownr@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== @@ -2515,49 +620,25 @@ chownr@^2.0.0: resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== +cjs-module-lexer@1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz#6c370ab19f8a3394e318fe682686ec0ac684d107" + integrity sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ== + clean-stack@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== -cli-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" - integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== - dependencies: - restore-cursor "^3.1.0" - -cli-spinners@^2.5.0: - version "2.9.2" - resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.9.2.tgz#1773a8f4b9c4d6ac31563df53b3fc1d79462fe41" - integrity sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg== - -cli-width@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" - integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== - -clone-response@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.3.tgz#af2032aa47816399cf5f0a1d0db902f517abb8c3" - integrity sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA== - dependencies: - mimic-response "^1.0.0" - -clone@^1.0.2: - version "1.0.4" - resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" - integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg== - -cloudflare-worker-adapter@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/cloudflare-worker-adapter/-/cloudflare-worker-adapter-1.2.1.tgz#d96434d2b6e6ebe8ebb935ae010ec3006e5da990" - integrity sha512-XRIJes+dUkM65sTQa4OmdT5QAnmJgIZFdSLBAoc8cezzKZgfsUwldF9RgEDKxLWLyBvgZFugROo7Jgcoaz7NBw== +cloudflare-worker-adapter@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/cloudflare-worker-adapter/-/cloudflare-worker-adapter-1.3.1.tgz#3910fb0eb6c671e39bfe3f847142b36e47bffdcd" + integrity sha512-bgic3Za1BdcBVi4rphyWqQSO0thsoc5bxd/GIziBhP2+F3qSoMxoc02MHcgfkWLTgFpd5Lasqd5gcrp+Cxa9GQ== dependencies: https-proxy-agent "^7.0.5" ioredis "^5.4.1" node-fetch "^3.3.2" - sqlite3 "^5" + sqlite3 "^5.1.7" toml "^3.0.0" cluster-key-slot@^1.1.0: @@ -2570,110 +651,37 @@ code-block-writer@^10.1.1: resolved "https://registry.yarnpkg.com/code-block-writer/-/code-block-writer-10.1.1.tgz#ad5684ed4bfb2b0783c8b131281ae84ee640a42f" integrity sha512-67ueh2IRGst/51p0n6FvPrnRjAGHY5F8xdjkgrYE7DDzpJe6qA07RYQ9VcoUeo5ATOjSOiWpSL3SWBRRbempMw== -color-convert@^1.9.0: - version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== - dependencies: - color-name "1.1.3" - -color-convert@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" - integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== - dependencies: - color-name "~1.1.4" - -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== - -color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - color-support@^1.1.2, color-support@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== -comma-separated-tokens@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz#4e89c9458acb61bc8fef19f4529973b2392839ee" - integrity sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg== - concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== -confbox@^0.1.7: - version "0.1.7" - resolved "https://registry.yarnpkg.com/confbox/-/confbox-0.1.7.tgz#ccfc0a2bcae36a84838e83a3b7f770fb17d6c579" - integrity sha512-uJcB/FKZtBMCJpK8MQji6bJHgu1tixKPxRLeGkNzBoOZzpnZUJm0jm2/sBDWcuBx1dYgxV4JU+g5hmNxCyAmdA== - console-control-strings@^1.0.0, console-control-strings@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ== -content-disposition@0.5.4: - version "0.5.4" - resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" - integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== - dependencies: - safe-buffer "5.2.1" - -content-type@~1.0.4, content-type@~1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" - integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== +content-type@1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" + integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== convert-hrtime@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/convert-hrtime/-/convert-hrtime-3.0.0.tgz#62c7593f5809ca10be8da858a6d2f702bcda00aa" integrity sha512-7V+KqSvMiHp8yWDuwfww06XleMWVVB9b9tURBx+G7UTADuo5hYPuowKloz4OzOqbPezxgo+fdQ1522WzPG4OeA== -convert-source-map@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" - integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== - -cookie-signature@1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" - integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== - -cookie@0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.6.0.tgz#2798b04b071b0ecbff0dbb62a505a8efa4e19051" - integrity sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw== - -cookie@^0.4.1: - version "0.4.2" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432" - integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== - -core-js-compat@^3.31.0, core-js-compat@^3.36.1: - version "3.37.1" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.37.1.tgz#c844310c7852f4bdf49b8d339730b97e17ff09ee" - integrity sha512-9TNiImhKvQqSUkOvk/mMRZzOANTiEVC7WaBNhHcKM7x+/5E1l5NvsysR19zuDQScE8k+kfQXWRN3AtS/eOSHpg== - dependencies: - browserslist "^4.23.0" - -core-util-is@~1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" - integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== - create-require@^1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== -cross-spawn@^7.0.3: +cross-spawn@^7.0.0: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== @@ -2682,59 +690,24 @@ cross-spawn@^7.0.3: shebang-command "^2.0.0" which "^2.0.1" -css-what@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4" - integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== - -cssesc@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" - integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== - -csstype@^3.0.2, csstype@^3.0.7: - version "3.1.3" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.3.tgz#d80ff294d114fb0e6ac500fbf85b60137d7eff81" - integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw== - -data-uri-to-buffer@3: - version "3.0.1" - resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz#594b8973938c5bc2c33046535785341abc4f3636" - integrity sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og== - data-uri-to-buffer@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz#d8feb2b2881e6a4f58c2e08acfd0e2834e26222e" integrity sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A== -deasync@^0.1.0: - version "0.1.30" - resolved "https://registry.yarnpkg.com/deasync/-/deasync-0.1.30.tgz#b0e5445e533fc116b25b21001d2b8e2b6d60b6d3" - integrity sha512-OaAjvEQuQ9tJsKG4oHO9nV1UHTwb2Qc2+fadB0VeVtD0Z9wiG1XPGLJ4W3aLhAoQSYTaLROFRbd5X20Dkzf7MQ== - dependencies: - bindings "^1.5.0" - node-addon-api "^1.7.1" - -debug@2.6.9: - version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== - dependencies: - ms "2.0.0" - -debug@4, debug@^4.0.0, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.3, debug@^4.3.4: +debug@4, debug@^4.3.3, debug@^4.3.4: version "4.3.5" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.5.tgz#e83444eceb9fedd4a1da56d671ae2446a01a6e1e" integrity sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg== dependencies: ms "2.1.2" -decode-named-character-reference@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz#daabac9690874c394c81e4162a0304b35d824f0e" - integrity sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg== +debug@4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" + integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== dependencies: - character-entities "^2.0.0" + ms "^2.1.1" decompress-response@^6.0.0: version "6.0.0" @@ -2743,62 +716,11 @@ decompress-response@^6.0.0: dependencies: mimic-response "^3.1.0" -dedent@^1.5.3: - version "1.5.3" - resolved "https://registry.yarnpkg.com/dedent/-/dedent-1.5.3.tgz#99aee19eb9bae55a67327717b6e848d0bf777e5a" - integrity sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ== - deep-extend@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== -deep-is@~0.1.3: - version "0.1.4" - resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" - integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== - -deep-object-diff@^1.1.9: - version "1.1.9" - resolved "https://registry.yarnpkg.com/deep-object-diff/-/deep-object-diff-1.1.9.tgz#6df7ef035ad6a0caa44479c536ed7b02570f4595" - integrity sha512-Rn+RuwkmkDwCi2/oXOFS9Gsr5lJZu/yTGpK7wAaAIE75CC+LCGEZHpY6VQJa/RoJcrmaA/docWJZvYohlNkWPA== - -deepmerge@^4.2.2: - version "4.3.1" - resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" - integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== - -defaults@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.4.tgz#b0b02062c1e2aa62ff5d9528f0f98baa90978d7a" - integrity sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A== - dependencies: - clone "^1.0.2" - -defer-to-connect@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-2.0.1.tgz#8016bdb4143e4632b77a3449c6236277de520587" - integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg== - -define-data-property@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" - integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== - dependencies: - es-define-property "^1.0.0" - es-errors "^1.3.0" - gopd "^1.0.1" - -degenerator@^3.0.2: - version "3.0.4" - resolved "https://registry.yarnpkg.com/degenerator/-/degenerator-3.0.4.tgz#07ccf95bc11044a37a6efc2f66029fb636e31f24" - integrity sha512-Z66uPeBfHZAHVmue3HPfyKu2Q0rC2cRxbTOsvmU/po5fvvcx27W4mIu9n0PUlQih4oUYvcG1BsbtVv8x7KDOSw== - dependencies: - ast-types "^0.13.2" - escodegen "^1.8.1" - esprima "^4.0.0" - vm2 "^3.9.17" - delegates@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" @@ -2809,108 +731,46 @@ denque@^2.1.0: resolved "https://registry.yarnpkg.com/denque/-/denque-2.1.0.tgz#e93e1a6569fb5e66f16a3c2a2964617d349d6ab1" integrity sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw== -depd@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" - integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== - -dequal@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be" - integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA== - -destroy@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" - integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== - -detect-indent@^6.0.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-6.1.0.tgz#592485ebbbf6b3b1ab2be175c8393d04ca0d57e6" - integrity sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA== +depd@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ== detect-libc@^2.0.0: version "2.0.3" resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.3.tgz#f0cd503b40f9939b894697d19ad50895e30cf700" integrity sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw== -detect-newline@3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" - integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== - diff@^4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== -diff@^5.0.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-5.2.0.tgz#26ded047cd1179b78b9537d5ef725503ce1ae531" - integrity sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A== - -dir-glob@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" - integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== - dependencies: - path-type "^4.0.0" - -dotenv@^16.0.0, dotenv@^16.0.3: +dotenv@^16.0.3: version "16.4.5" resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.4.5.tgz#cdd3b3b604cb327e286b4762e13502f717cb099f" integrity sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg== -duplexify@^3.5.0, duplexify@^3.6.0: - version "3.7.1" - resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309" - integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g== - dependencies: - end-of-stream "^1.0.0" - inherits "^2.0.1" - readable-stream "^2.0.0" - stream-shift "^1.0.0" - -edge-runtime@2.1.4: - version "2.1.4" - resolved "https://registry.yarnpkg.com/edge-runtime/-/edge-runtime-2.1.4.tgz#aea4e103897f451f98a9094df26b07c4d1eb75b3" - integrity sha512-SertKByzAmjm+MkLbFl1q0ko+/90V24dhZgQM8fcdguQaDYVEVtb6okEBGeg8IQgL1/JUP8oSlUIxSI/bvsVRQ== - dependencies: - "@edge-runtime/format" "2.0.1" - "@edge-runtime/vm" "2.1.2" - async-listen "2.0.3" - exit-hook "2.2.1" +edge-runtime@2.5.9: + version "2.5.9" + resolved "https://registry.yarnpkg.com/edge-runtime/-/edge-runtime-2.5.9.tgz#9daeb329f0339b8377483f230789b3d68f45f1d9" + integrity sha512-pk+k0oK0PVXdlT4oRp4lwh+unuKB7Ng4iZ2HB+EZ7QCEQizX360Rp/F4aRpgpRgdP2ufB35N+1KppHmYjqIGSg== + dependencies: + "@edge-runtime/format" "2.2.1" + "@edge-runtime/ponyfill" "2.4.2" + "@edge-runtime/vm" "3.2.0" + async-listen "3.0.1" mri "1.2.0" picocolors "1.0.0" - pretty-bytes "5.6.0" pretty-ms "7.0.1" + signal-exit "4.0.2" time-span "4.0.0" -ee-first@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" - integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== - -electron-to-chromium@^1.4.796: - version "1.4.812" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.812.tgz#21b78709c5a13af5d5c688d135a22dcea7617acf" - integrity sha512-7L8fC2Ey/b6SePDFKR2zHAy4mbdp1/38Yk5TsARO66W3hC5KEaeKMMHoxwtuH+jcu2AYLSn9QX04i95t6Fl1Hg== - emoji-regex@^8.0.0: version "8.0.0" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== -emojis-list@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" - integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== - -encodeurl@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" - integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== - encoding@^0.1.12: version "0.1.13" resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" @@ -2918,13 +778,20 @@ encoding@^0.1.12: dependencies: iconv-lite "^0.6.2" -end-of-stream@^1.0.0, end-of-stream@^1.1.0, end-of-stream@^1.4.1: +end-of-stream@^1.1.0, end-of-stream@^1.4.1: version "1.4.4" resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== dependencies: once "^1.4.0" +end-of-stream@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.1.0.tgz#e9353258baa9108965efc41cb0ef8ade2f3cfb07" + integrity sha512-EoulkdKF/1xa92q25PbjuDcgJ9RDHYU2Rs3SCIvs2/dSQ3BpmxneNHmA/M7fe60M3PrV7nNGTTNbkK62l6vXiQ== + dependencies: + once "~1.3.0" + env-paths@^2.2.0: version "2.2.1" resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" @@ -2935,17 +802,10 @@ err-code@^2.0.2: resolved "https://registry.yarnpkg.com/err-code/-/err-code-2.0.3.tgz#23c2f3b756ffdfc608d30e27c9a941024807e7f9" integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA== -es-define-property@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.0.tgz#c7faefbdff8b2696cf5f46921edfb77cc4ba3845" - integrity sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ== - dependencies: - get-intrinsic "^1.2.4" - -es-errors@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" - integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== +es-module-lexer@1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.4.1.tgz#41ea21b43908fe6a287ffcbe4300f790555331f5" + integrity sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w== esbuild-android-64@0.14.47: version "0.14.47" @@ -3073,303 +933,48 @@ esbuild@0.14.47: esbuild-windows-64 "0.14.47" esbuild-windows-arm64 "0.14.47" -esbuild@0.16.3: - version "0.16.3" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.16.3.tgz#5868632fa23f7a8547f2a4ea359c44e946515c94" - integrity sha512-71f7EjPWTiSguen8X/kxEpkAS7BFHwtQKisCDDV3Y4GLGWBaoSCyD5uXkaUew6JDzA9FEN1W23mdnSwW9kqCeg== - optionalDependencies: - "@esbuild/android-arm" "0.16.3" - "@esbuild/android-arm64" "0.16.3" - "@esbuild/android-x64" "0.16.3" - "@esbuild/darwin-arm64" "0.16.3" - "@esbuild/darwin-x64" "0.16.3" - "@esbuild/freebsd-arm64" "0.16.3" - "@esbuild/freebsd-x64" "0.16.3" - "@esbuild/linux-arm" "0.16.3" - "@esbuild/linux-arm64" "0.16.3" - "@esbuild/linux-ia32" "0.16.3" - "@esbuild/linux-loong64" "0.16.3" - "@esbuild/linux-mips64el" "0.16.3" - "@esbuild/linux-ppc64" "0.16.3" - "@esbuild/linux-riscv64" "0.16.3" - "@esbuild/linux-s390x" "0.16.3" - "@esbuild/linux-x64" "0.16.3" - "@esbuild/netbsd-x64" "0.16.3" - "@esbuild/openbsd-x64" "0.16.3" - "@esbuild/sunos-x64" "0.16.3" - "@esbuild/win32-arm64" "0.16.3" - "@esbuild/win32-ia32" "0.16.3" - "@esbuild/win32-x64" "0.16.3" - -esbuild@^0.21.3: - version "0.21.5" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.21.5.tgz#9ca301b120922959b766360d8ac830da0d02997d" - integrity sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw== - optionalDependencies: - "@esbuild/aix-ppc64" "0.21.5" - "@esbuild/android-arm" "0.21.5" - "@esbuild/android-arm64" "0.21.5" - "@esbuild/android-x64" "0.21.5" - "@esbuild/darwin-arm64" "0.21.5" - "@esbuild/darwin-x64" "0.21.5" - "@esbuild/freebsd-arm64" "0.21.5" - "@esbuild/freebsd-x64" "0.21.5" - "@esbuild/linux-arm" "0.21.5" - "@esbuild/linux-arm64" "0.21.5" - "@esbuild/linux-ia32" "0.21.5" - "@esbuild/linux-loong64" "0.21.5" - "@esbuild/linux-mips64el" "0.21.5" - "@esbuild/linux-ppc64" "0.21.5" - "@esbuild/linux-riscv64" "0.21.5" - "@esbuild/linux-s390x" "0.21.5" - "@esbuild/linux-x64" "0.21.5" - "@esbuild/netbsd-x64" "0.21.5" - "@esbuild/openbsd-x64" "0.21.5" - "@esbuild/sunos-x64" "0.21.5" - "@esbuild/win32-arm64" "0.21.5" - "@esbuild/win32-ia32" "0.21.5" - "@esbuild/win32-x64" "0.21.5" - -"esbuild@npm:esbuild@~0.17.6 || ~0.18.0 || ~0.19.0": - version "0.19.12" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.19.12.tgz#dc82ee5dc79e82f5a5c3b4323a2a641827db3e04" - integrity sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg== - optionalDependencies: - "@esbuild/aix-ppc64" "0.19.12" - "@esbuild/android-arm" "0.19.12" - "@esbuild/android-arm64" "0.19.12" - "@esbuild/android-x64" "0.19.12" - "@esbuild/darwin-arm64" "0.19.12" - "@esbuild/darwin-x64" "0.19.12" - "@esbuild/freebsd-arm64" "0.19.12" - "@esbuild/freebsd-x64" "0.19.12" - "@esbuild/linux-arm" "0.19.12" - "@esbuild/linux-arm64" "0.19.12" - "@esbuild/linux-ia32" "0.19.12" - "@esbuild/linux-loong64" "0.19.12" - "@esbuild/linux-mips64el" "0.19.12" - "@esbuild/linux-ppc64" "0.19.12" - "@esbuild/linux-riscv64" "0.19.12" - "@esbuild/linux-s390x" "0.19.12" - "@esbuild/linux-x64" "0.19.12" - "@esbuild/netbsd-x64" "0.19.12" - "@esbuild/openbsd-x64" "0.19.12" - "@esbuild/sunos-x64" "0.19.12" - "@esbuild/win32-arm64" "0.19.12" - "@esbuild/win32-ia32" "0.19.12" - "@esbuild/win32-x64" "0.19.12" - -escalade@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.2.tgz#54076e9ab29ea5bf3d8f1ed62acffbb88272df27" - integrity sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA== - -escape-html@~1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" - integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== - -escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== - -escape-string-regexp@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" - integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== - -escodegen@^1.8.1: - version "1.14.3" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.14.3.tgz#4e7b81fba61581dc97582ed78cab7f0e8d63f503" - integrity sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw== - dependencies: - esprima "^4.0.1" - estraverse "^4.2.0" - esutils "^2.0.2" - optionator "^0.8.1" - optionalDependencies: - source-map "~0.6.1" - -esprima@^4.0.0, esprima@^4.0.1, esprima@~4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" - integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== - -estraverse@^4.2.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" - integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== - -estree-util-attach-comments@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/estree-util-attach-comments/-/estree-util-attach-comments-2.1.1.tgz#ee44f4ff6890ee7dfb3237ac7810154c94c63f84" - integrity sha512-+5Ba/xGGS6mnwFbXIuQiDPTbuTxuMCooq3arVv7gPZtYpjp+VXH/NkHAP35OOefPhNG/UGqU3vt/LTABwcHX0w== - dependencies: - "@types/estree" "^1.0.0" - -estree-util-build-jsx@^2.0.0: - version "2.2.2" - resolved "https://registry.yarnpkg.com/estree-util-build-jsx/-/estree-util-build-jsx-2.2.2.tgz#32f8a239fb40dc3f3dca75bb5dcf77a831e4e47b" - integrity sha512-m56vOXcOBuaF+Igpb9OPAy7f9w9OIkb5yhjsZuaPm7HoGi4oTOQi0h2+yZ+AtKklYFZ+rPC4n0wYCJCEU1ONqg== - dependencies: - "@types/estree-jsx" "^1.0.0" - estree-util-is-identifier-name "^2.0.0" - estree-walker "^3.0.0" - -estree-util-is-identifier-name@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/estree-util-is-identifier-name/-/estree-util-is-identifier-name-1.1.0.tgz#2e3488ea06d9ea2face116058864f6370b37456d" - integrity sha512-OVJZ3fGGt9By77Ix9NhaRbzfbDV/2rx9EP7YIDJTmsZSEc5kYn2vWcNccYyahJL2uAQZK2a5Or2i0wtIKTPoRQ== - -estree-util-is-identifier-name@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/estree-util-is-identifier-name/-/estree-util-is-identifier-name-2.1.0.tgz#fb70a432dcb19045e77b05c8e732f1364b4b49b2" - integrity sha512-bEN9VHRyXAUOjkKVQVvArFym08BTWB0aJPppZZr0UNyAqWsLaVfAqP7hbaTJjzHifmB5ebnR8Wm7r7yGN/HonQ== - -estree-util-value-to-estree@^1.0.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/estree-util-value-to-estree/-/estree-util-value-to-estree-1.3.0.tgz#1d3125594b4d6680f666644491e7ac1745a3df49" - integrity sha512-Y+ughcF9jSUJvncXwqRageavjrNPAI+1M/L3BI3PyLp1nmgYTGUXU6t5z1Y7OWuThoDdhPME07bQU+d5LxdJqw== - dependencies: - is-plain-obj "^3.0.0" - -estree-util-visit@^1.0.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/estree-util-visit/-/estree-util-visit-1.2.1.tgz#8bc2bc09f25b00827294703835aabee1cc9ec69d" - integrity sha512-xbgqcrkIVbIG+lI/gzbvd9SGTJL4zqJKBFttUl5pP27KhAjtMKbX/mQXJ7qgyXpMgVy/zvpm0xoQQaGL8OloOw== - dependencies: - "@types/estree-jsx" "^1.0.0" - "@types/unist" "^2.0.0" - estree-walker@2.0.2, estree-walker@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac" integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== -estree-walker@^0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.6.1.tgz#53049143f40c6eb918b23671d1fe3219f3a1b362" - integrity sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w== - -estree-walker@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-3.0.3.tgz#67c3e549ec402a487b4fc193d1953a524752340d" - integrity sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g== - dependencies: - "@types/estree" "^1.0.0" - -esutils@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" - integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== - -etag@1.8.1, etag@~1.8.1: +etag@1.8.1: version "1.8.1" resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== -eval@0.1.8: - version "0.1.8" - resolved "https://registry.yarnpkg.com/eval/-/eval-0.1.8.tgz#2b903473b8cc1d1989b83a1e7923f883eb357f85" - integrity sha512-EzV94NYKoO09GLXGjXj9JIlXijVck4ONSr5wiCWDvhsvj5jxSrzTmRU/9C1DyB6uToszLs8aifA6NQ7lEQdvFw== - dependencies: - "@types/node" "*" - require-like ">= 0.1.1" +events-intercept@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/events-intercept/-/events-intercept-2.0.0.tgz#adbf38681c5a4b2011c41ee41f61a34cba448897" + integrity sha512-blk1va0zol9QOrdZt0rFXo5KMkNPVSp92Eju/Qz8THwKWKRKeE0T8Br/1aW6+Edkyq9xHYgYxn2QtOnUKPUp+Q== -execa@5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" - integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== +execa@3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-3.2.0.tgz#18326b79c7ab7fbd6610fd900c1b9e95fa48f90a" + integrity sha512-kJJfVbI/lZE1PZYDI5VPxp8zXPO9rtxOkhpZ0jMKha56AI9y2gGVC6bkukStQf0ka5Rh15BA5m7cCCH4jmHqkw== dependencies: - cross-spawn "^7.0.3" - get-stream "^6.0.0" - human-signals "^2.1.0" + cross-spawn "^7.0.0" + get-stream "^5.0.0" + human-signals "^1.1.1" is-stream "^2.0.0" merge-stream "^2.0.0" - npm-run-path "^4.0.1" - onetime "^5.1.2" - signal-exit "^3.0.3" + npm-run-path "^4.0.0" + onetime "^5.1.0" + p-finally "^2.0.0" + signal-exit "^3.0.2" strip-final-newline "^2.0.0" -exit-hook@2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/exit-hook/-/exit-hook-2.2.1.tgz#007b2d92c6428eda2b76e7016a34351586934593" - integrity sha512-eNTPlAD67BmP31LDINZ3U7HSF8l57TxOY2PmBJ1shpCvpnxBF93mWCE8YHBnXs8qiUZJc9WDcWIeC3a2HIAMfw== - expand-template@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c" integrity sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg== -express@^4.17.1: - version "4.19.2" - resolved "https://registry.yarnpkg.com/express/-/express-4.19.2.tgz#e25437827a3aa7f2a827bc8171bbbb664a356465" - integrity sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q== - dependencies: - accepts "~1.3.8" - array-flatten "1.1.1" - body-parser "1.20.2" - content-disposition "0.5.4" - content-type "~1.0.4" - cookie "0.6.0" - cookie-signature "1.0.6" - debug "2.6.9" - depd "2.0.0" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - finalhandler "1.2.0" - fresh "0.5.2" - http-errors "2.0.0" - merge-descriptors "1.0.1" - methods "~1.1.2" - on-finished "2.4.1" - parseurl "~1.3.3" - path-to-regexp "0.1.7" - proxy-addr "~2.0.7" - qs "6.11.0" - range-parser "~1.2.1" - safe-buffer "5.2.1" - send "0.18.0" - serve-static "1.15.0" - setprototypeof "1.2.0" - statuses "2.0.1" - type-is "~1.6.18" - utils-merge "1.0.1" - vary "~1.1.2" - -extend@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" - integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== - -external-editor@^3.0.3: - version "3.1.0" - resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" - integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== - dependencies: - chardet "^0.7.0" - iconv-lite "^0.4.24" - tmp "^0.0.33" - fast-deep-equal@^3.1.1: version "3.1.3" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== -fast-glob@3.2.11: - version "3.2.11" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.11.tgz#a1172ad95ceb8a16e20caa5c5e56480e5129c1d9" - integrity sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew== - dependencies: - "@nodelib/fs.stat" "^2.0.2" - "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.2" - merge2 "^1.3.0" - micromatch "^4.0.4" - -fast-glob@^3.0.3, fast-glob@^3.2.7: +fast-glob@^3.2.7: version "3.3.2" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129" integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== @@ -3385,11 +990,6 @@ fast-json-stable-stringify@^2.0.0: resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== -fast-levenshtein@~2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" - integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== - fastq@^1.6.0: version "1.17.1" resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.17.1.tgz#2a523f07a4e7b1e81a42b91b8bf2254107753b47" @@ -3397,12 +997,12 @@ fastq@^1.6.0: dependencies: reusify "^1.0.4" -fault@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/fault/-/fault-2.0.1.tgz#d47ca9f37ca26e4bd38374a7c500b5a384755b6c" - integrity sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ== +fd-slicer@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e" + integrity sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g== dependencies: - format "^0.2.0" + pend "~1.2.0" fetch-blob@^3.1.2, fetch-blob@^3.1.4: version "3.2.0" @@ -3412,23 +1012,11 @@ fetch-blob@^3.1.2, fetch-blob@^3.1.4: node-domexception "^1.0.0" web-streams-polyfill "^3.0.3" -figures@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" - integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== - dependencies: - escape-string-regexp "^1.0.5" - file-uri-to-path@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== -file-uri-to-path@2: - version "2.0.0" - resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-2.0.0.tgz#7b415aeba227d575851e0a5b0c640d7656403fba" - integrity sha512-hjPFI8oE/2iQPVe4gbrJ73Pp+Xfub2+WI2LlXDbsaJBwT5wuMh35WNWVYYTpnz895shtwfyutMFLFywpQAFdLg== - fill-range@^7.1.1: version "7.1.1" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" @@ -3436,32 +1024,6 @@ fill-range@^7.1.1: dependencies: to-regex-range "^5.0.1" -finalhandler@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.2.0.tgz#7d23fe5731b207b4640e4fcd00aec1f9207a7b32" - integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg== - dependencies: - debug "2.6.9" - encodeurl "~1.0.2" - escape-html "~1.0.3" - on-finished "2.4.1" - parseurl "~1.3.3" - statuses "2.0.1" - unpipe "~1.0.0" - -find-up@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" - integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== - dependencies: - locate-path "^6.0.0" - path-exists "^4.0.0" - -format@^0.2.0: - version "0.2.2" - resolved "https://registry.yarnpkg.com/format/-/format-0.2.2.tgz#d6170107e9efdc4ed30c9dc39016df942b5cb58b" - integrity sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww== - formdata-polyfill@^4.0.10: version "4.0.10" resolved "https://registry.yarnpkg.com/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz#24807c31c9d402e002ab3d8c720144ceb8848423" @@ -3469,16 +1031,6 @@ formdata-polyfill@^4.0.10: dependencies: fetch-blob "^3.1.2" -forwarded@0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" - integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== - -fresh@0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" - integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== - fs-constants@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" @@ -3493,16 +1045,7 @@ fs-extra@11.1.0: jsonfile "^6.0.1" universalify "^2.0.0" -fs-extra@^10.0.0: - version "10.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" - integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - -fs-extra@^8.1.0: +fs-extra@8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== @@ -3511,6 +1054,13 @@ fs-extra@^8.1.0: jsonfile "^4.0.0" universalify "^0.1.0" +fs-minipass@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7" + integrity sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA== + dependencies: + minipass "^2.6.0" + fs-minipass@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" @@ -3523,23 +1073,10 @@ fs.realpath@^1.0.0: resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== -fsevents@~2.3.2, fsevents@~2.3.3: - version "2.3.3" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" - integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== - -ftp@^0.3.10: - version "0.3.10" - resolved "https://registry.yarnpkg.com/ftp/-/ftp-0.3.10.tgz#9197d861ad8142f3e63d5a83bfe4c59f7330885d" - integrity sha512-faFVML1aBx2UoDStmLwv2Wptt4vw5x03xxX172nhA5Y5HBshW5JweqQ2W4xL4dezQTG8inJsuYcpPHHU3X5OTQ== - dependencies: - readable-stream "1.1.x" - xregexp "2.0.0" - -function-bind@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" - integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== +fsevents@~2.1.2: + version "2.1.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e" + integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ== gauge@^3.0.0: version "3.0.2" @@ -3570,80 +1107,30 @@ gauge@^4.0.3: strip-ansi "^6.0.1" wide-align "^1.1.5" -generic-names@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/generic-names/-/generic-names-4.0.0.tgz#0bd8a2fd23fe8ea16cbd0a279acd69c06933d9a3" - integrity sha512-ySFolZQfw9FoDb3ed9d80Cm9f0+r7qj+HJkWjeD9RBfpxEVTlVhol+gvaQB/78WbwYfbnNh8nWHHBSlg072y6A== - dependencies: - loader-utils "^3.2.0" - -gensync@^1.0.0-beta.2: - version "1.0.0-beta.2" - resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" - integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== +generic-pool@3.4.2: + version "3.4.2" + resolved "https://registry.yarnpkg.com/generic-pool/-/generic-pool-3.4.2.tgz#92ff7196520d670839a67308092a12aadf2f6a59" + integrity sha512-H7cUpwCQSiJmAHM4c/aFu6fUfrhWXW1ncyh8ftxEPMu6AiYkHw9K8br720TGPZJbk5eOH2bynjZD1yPvdDAmag== -get-intrinsic@^1.1.3, get-intrinsic@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd" - integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== - dependencies: - es-errors "^1.3.0" - function-bind "^1.1.2" - has-proto "^1.0.1" - has-symbols "^1.0.3" - hasown "^2.0.0" - -get-port@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/get-port/-/get-port-5.1.1.tgz#0469ed07563479de6efb986baf053dcd7d4e3193" - integrity sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ== - -get-stream@^5.1.0: +get-stream@^5.0.0: version "5.2.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== dependencies: pump "^3.0.0" -get-stream@^6.0.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" - integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== - -get-uri@3: - version "3.0.2" - resolved "https://registry.yarnpkg.com/get-uri/-/get-uri-3.0.2.tgz#f0ef1356faabc70e1f9404fa3b66b2ba9bfc725c" - integrity sha512-+5s0SJbGoyiJTZZ2JTpFPLMPSch72KEqGOTvQsBqg0RBWvwhWUSYZFAtz3TPW0GXJuLBJPts1E241iHg+VRfhg== - dependencies: - "@tootallnate/once" "1" - data-uri-to-buffer "3" - debug "4" - file-uri-to-path "2" - fs-extra "^8.1.0" - ftp "^0.3.10" - -git-hooks-list@1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/git-hooks-list/-/git-hooks-list-1.0.3.tgz#be5baaf78203ce342f2f844a9d2b03dba1b45156" - integrity sha512-Y7wLWcrLUXwk2noSka166byGCvhMtDRpgHdzCno1UQv/n/Hegp++a2xBWJL1lJarnKD3SWaljD+0z1ztqxuKyQ== - github-from-package@0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce" integrity sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw== -glob-parent@^5.1.2, glob-parent@~5.1.2: +glob-parent@^5.1.2, glob-parent@~5.1.0: version "5.1.2" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== dependencies: is-glob "^4.0.1" -glob-to-regexp@0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" - integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== - glob@^7.1.3, glob@^7.1.4: version "7.2.3" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" @@ -3656,148 +1143,41 @@ glob@^7.1.3, glob@^7.1.4: once "^1.3.0" path-is-absolute "^1.0.0" -globals@^11.1.0: - version "11.12.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" - integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== - -globby@10.0.0: - version "10.0.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-10.0.0.tgz#abfcd0630037ae174a88590132c2f6804e291072" - integrity sha512-3LifW9M4joGZasyYPz2A1U74zbC/45fvpXUvO/9KbSa+VV0aGZarWkfdgKyR9sExNP0t0x0ss/UMJpNpcaTspw== - dependencies: - "@types/glob" "^7.1.1" - array-union "^2.1.0" - dir-glob "^3.0.1" - fast-glob "^3.0.3" - glob "^7.1.3" - ignore "^5.1.1" - merge2 "^1.2.3" - slash "^3.0.0" - -gopd@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" - integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== - dependencies: - get-intrinsic "^1.1.3" - -got@^11.0.0: - version "11.8.6" - resolved "https://registry.yarnpkg.com/got/-/got-11.8.6.tgz#276e827ead8772eddbcfc97170590b841823233a" - integrity sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g== - dependencies: - "@sindresorhus/is" "^4.0.0" - "@szmarczak/http-timer" "^4.0.5" - "@types/cacheable-request" "^6.0.1" - "@types/responselike" "^1.0.0" - cacheable-lookup "^5.0.3" - cacheable-request "^7.0.2" - decompress-response "^6.0.0" - http2-wrapper "^1.0.0-beta.5.2" - lowercase-keys "^2.0.0" - p-cancelable "^2.0.0" - responselike "^2.0.0" - graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.6, graceful-fs@^4.2.9: version "4.2.11" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== -gunzip-maybe@^1.4.2: - version "1.4.2" - resolved "https://registry.yarnpkg.com/gunzip-maybe/-/gunzip-maybe-1.4.2.tgz#b913564ae3be0eda6f3de36464837a9cd94b98ac" - integrity sha512-4haO1M4mLO91PW57BMsDFf75UmwoRX0GkdD+Faw+Lr+r/OZrOCS0pIBwOL1xCKQqnQzbNFGgK2V2CpBUPeFNTw== - dependencies: - browserify-zlib "^0.1.4" - is-deflate "^1.0.0" - is-gzip "^1.0.0" - peek-stream "^1.1.0" - pumpify "^1.3.3" - through2 "^2.0.3" - -has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== - -has-flag@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" - integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== - -has-property-descriptors@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" - integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== - dependencies: - es-define-property "^1.0.0" - -has-proto@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.3.tgz#b31ddfe9b0e6e9914536a6ab286426d0214f77fd" - integrity sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q== - -has-symbols@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" - integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== - has-unicode@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" integrity sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ== -hasown@^2.0.0, hasown@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" - integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== - dependencies: - function-bind "^1.1.2" - -hast-util-to-estree@^2.0.0: - version "2.3.3" - resolved "https://registry.yarnpkg.com/hast-util-to-estree/-/hast-util-to-estree-2.3.3.tgz#da60142ffe19a6296923ec222aba73339c8bf470" - integrity sha512-ihhPIUPxN0v0w6M5+IiAZZrn0LH2uZomeWwhn7uP7avZC6TE7lIiEh2yBMPr5+zi1aUCXq6VoYRgs2Bw9xmycQ== - dependencies: - "@types/estree" "^1.0.0" - "@types/estree-jsx" "^1.0.0" - "@types/hast" "^2.0.0" - "@types/unist" "^2.0.0" - comma-separated-tokens "^2.0.0" - estree-util-attach-comments "^2.0.0" - estree-util-is-identifier-name "^2.0.0" - hast-util-whitespace "^2.0.0" - mdast-util-mdx-expression "^1.0.0" - mdast-util-mdxjs-esm "^1.0.0" - property-information "^6.0.0" - space-separated-tokens "^2.0.0" - style-to-object "^0.4.1" - unist-util-position "^4.0.0" - zwitch "^2.0.0" - -hast-util-whitespace@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/hast-util-whitespace/-/hast-util-whitespace-2.0.1.tgz#0ec64e257e6fc216c7d14c8a1b74d27d650b4557" - integrity sha512-nAxA0v8+vXSBDt3AnRUNjyRIQ0rD+ntpbAp4LnPkumc5M9yUbSMa4XDU9Q6etY4f1Wp4bNgvc1yjiZtsTTrSng== - -http-cache-semantics@^4.0.0, http-cache-semantics@^4.1.0: +http-cache-semantics@^4.1.0: version "4.1.1" resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== -http-errors@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" - integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== +http-errors@1.7.3: + version "1.7.3" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" + integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw== dependencies: - depd "2.0.0" + depd "~1.1.2" inherits "2.0.4" - setprototypeof "1.2.0" - statuses "2.0.1" - toidentifier "1.0.1" + setprototypeof "1.1.1" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" + +http-errors@~1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.4.0.tgz#6c0242dea6b3df7afda153c71089b31c6e82aabf" + integrity sha512-oLjPqve1tuOl5aRhv8GK5eHpqP1C9fb+Ol+XTLjKfLltE44zdDbEdjPSbU7Ch5rSNsVFqZn97SrMmZLdu1/YMw== + dependencies: + inherits "2.0.1" + statuses ">= 1.2.1 < 2" -http-proxy-agent@^4.0.0, http-proxy-agent@^4.0.1: +http-proxy-agent@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== @@ -3806,15 +1186,7 @@ http-proxy-agent@^4.0.0, http-proxy-agent@^4.0.1: agent-base "6" debug "4" -http2-wrapper@^1.0.0-beta.5.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-1.0.3.tgz#b8f55e0c1f25d4ebd08b3b0c2c079f9590800b3d" - integrity sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg== - dependencies: - quick-lru "^5.1.1" - resolve-alpn "^1.0.0" - -https-proxy-agent@5, https-proxy-agent@^5.0.0: +https-proxy-agent@^5.0.0: version "5.0.1" resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== @@ -3830,10 +1202,10 @@ https-proxy-agent@^7.0.5: agent-base "^7.0.2" debug "4" -human-signals@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" - integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== +human-signals@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" + integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== humanize-ms@^1.2.1: version "1.2.1" @@ -3842,7 +1214,7 @@ humanize-ms@^1.2.1: dependencies: ms "^2.0.0" -iconv-lite@0.4.24, iconv-lite@^0.4.24: +iconv-lite@0.4.24: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== @@ -3856,21 +1228,11 @@ iconv-lite@^0.6.2: dependencies: safer-buffer ">= 2.1.2 < 3.0.0" -icss-utils@^5.0.0, icss-utils@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-5.1.0.tgz#c6be6858abd013d768e98366ae47e25d5887b1ae" - integrity sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA== - ieee754@^1.1.13: version "1.2.1" resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== -ignore@^5.1.1: - version "5.3.1" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.1.tgz#5073e554cd42c5b33b394375f538b8593e34d4ef" - integrity sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw== - imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" @@ -3894,42 +1256,21 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3: +inherits@2, inherits@2.0.4, inherits@^2.0.3, inherits@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== +inherits@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" + integrity sha512-8nWq2nLTAwd02jTqJExUYFSD/fKq6VH9Y/oG2accc/kdI0V98Bag8d5a4gi3XHz73rDWa2PvTtvcWYquKqSENA== + ini@~1.3.0: version "1.3.8" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== -inline-style-parser@0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/inline-style-parser/-/inline-style-parser-0.1.1.tgz#ec8a3b429274e9c0a1f1c4ffa9453a7fef72cea1" - integrity sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q== - -inquirer@^8.2.1: - version "8.2.6" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-8.2.6.tgz#733b74888195d8d400a67ac332011b5fae5ea562" - integrity sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg== - dependencies: - ansi-escapes "^4.2.1" - chalk "^4.1.1" - cli-cursor "^3.1.0" - cli-width "^3.0.0" - external-editor "^3.0.3" - figures "^3.0.0" - lodash "^4.17.21" - mute-stream "0.0.8" - ora "^5.4.1" - run-async "^2.4.0" - rxjs "^7.5.5" - string-width "^4.1.0" - strip-ansi "^6.0.0" - through "^2.3.6" - wrap-ansi "^6.0.1" - ioredis@^5.4.1: version "5.4.1" resolved "https://registry.yarnpkg.com/ioredis/-/ioredis-5.4.1.tgz#1c56b70b759f01465913887375ed809134296f40" @@ -3953,29 +1294,6 @@ ip-address@^9.0.5: jsbn "1.1.0" sprintf-js "^1.1.3" -ip@^1.1.5: - version "1.1.9" - resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.9.tgz#8dfbcc99a754d07f425310b86a99546b1151e396" - integrity sha512-cyRxvOEpNHNtchU3Ln9KC/auJgup87llfQpQ+t5ghoC/UhL16SWzbueiCsdTnWmqAWl7LadfuwhlqmtOaqMHdQ== - -ipaddr.js@1.9.1: - version "1.9.1" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" - integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== - -is-alphabetical@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-alphabetical/-/is-alphabetical-2.0.1.tgz#01072053ea7c1036df3c7d19a6daaec7f19e789b" - integrity sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ== - -is-alphanumerical@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz#7c03fbe96e3e931113e57f964b0a368cc2dfd875" - integrity sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw== - dependencies: - is-alphabetical "^2.0.0" - is-decimal "^2.0.0" - is-binary-path@~2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" @@ -3983,28 +1301,6 @@ is-binary-path@~2.1.0: dependencies: binary-extensions "^2.0.0" -is-buffer@^2.0.0: - version "2.0.5" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191" - integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== - -is-core-module@^2.13.0: - version "2.14.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.14.0.tgz#43b8ef9f46a6a08888db67b1ffd4ec9e3dfd59d1" - integrity sha512-a5dFJih5ZLYlRtDc0dZWP7RiKr6xIKzmn/oAYCDvdLThadVgyJwlaoQPmRtMSpz+rk0OGAgIu+TcM9HUF0fk1A== - dependencies: - hasown "^2.0.2" - -is-decimal@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-decimal/-/is-decimal-2.0.1.tgz#9469d2dc190d0214fd87d78b78caecc0cc14eef7" - integrity sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A== - -is-deflate@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-deflate/-/is-deflate-1.0.0.tgz#c862901c3c161fb09dac7cdc7e784f80e98f2f14" - integrity sha512-YDoFpuZWu1VRXlsnlYMzKyVRITXj7Ej/V9gXQ2/pAe7X1J7M/RNOqaIYi6qUn+B7nGyB9pDXrv02dsB58d2ZAQ== - is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" @@ -4022,21 +1318,6 @@ is-glob@^4.0.1, is-glob@~4.0.1: dependencies: is-extglob "^2.1.1" -is-gzip@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-gzip/-/is-gzip-1.0.0.tgz#6ca8b07b99c77998025900e555ced8ed80879a83" - integrity sha512-rcfALRIb1YewtnksfRIHGcIY93QnK8BIQ/2c9yDYcG/Y6+vRoJuTWBmmSEbyLLYtXm7q35pHOHbZFQBaLrhlWQ== - -is-hexadecimal@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz#86b5bf668fca307498d319dfc03289d781a90027" - integrity sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg== - -is-interactive@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" - integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== - is-lambda@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-lambda/-/is-lambda-1.0.1.tgz#3d9877899e6a53efc0160504cde15f82e6f061d5" @@ -4047,100 +1328,26 @@ is-number@^7.0.0: resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== -is-plain-obj@2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" - integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== - -is-plain-obj@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-3.0.0.tgz#af6f2ea14ac5a646183a5bbdb5baabbc156ad9d7" - integrity sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA== - -is-plain-obj@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-4.1.0.tgz#d65025edec3657ce032fd7db63c97883eaed71f0" - integrity sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg== - -is-reference@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/is-reference/-/is-reference-3.0.2.tgz#154747a01f45cd962404ee89d43837af2cba247c" - integrity sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg== - dependencies: - "@types/estree" "*" - is-stream@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== -is-unicode-supported@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" - integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== - isarray@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" integrity sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ== -isarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== - isexe@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== -javascript-stringify@^2.0.1: - version "2.1.0" - resolved "https://registry.yarnpkg.com/javascript-stringify/-/javascript-stringify-2.1.0.tgz#27c76539be14d8bd128219a2d731b09337904e79" - integrity sha512-JVAfqNPTvNq3sB/VHQJAFxN/sPgKnsKrCwyRt15zwNCdrMMJDdcEOdubuy+DuJYYdm0ox1J4uzEuYKkN+9yhVg== - -js-tokens@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" - integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== - -js-yaml@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" - integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== - dependencies: - argparse "^2.0.1" - jsbn@1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-1.1.0.tgz#b01307cb29b618a1ed26ec79e911f803c4da0040" integrity sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A== -jsesc@3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-3.0.2.tgz#bb8b09a6597ba426425f2e4a07245c3d00b9343e" - integrity sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g== - -jsesc@^2.5.1: - version "2.5.2" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" - integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== - -jsesc@~0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" - integrity sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA== - -json-buffer@3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" - integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== - -json-parse-even-better-errors@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" - integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== - json-schema-to-ts@1.6.4: version "1.6.4" resolved "https://registry.yarnpkg.com/json-schema-to-ts/-/json-schema-to-ts-1.6.4.tgz#63e4fe854dff093923be9e8b59b39ee9a7971ba4" @@ -4159,11 +1366,6 @@ json-schema-traverse@^1.0.0: resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== -json5@^2.1.2, json5@^2.2.2, json5@^2.2.3: - version "2.2.3" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" - integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== - jsonfile@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" @@ -4180,62 +1382,6 @@ jsonfile@^6.0.1: optionalDependencies: graceful-fs "^4.1.6" -keyv@^4.0.0: - version "4.5.4" - resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" - integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== - dependencies: - json-buffer "3.0.1" - -kleur@^4.0.3: - version "4.1.5" - resolved "https://registry.yarnpkg.com/kleur/-/kleur-4.1.5.tgz#95106101795f7050c6c650f350c683febddb1780" - integrity sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ== - -levn@~0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" - integrity sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA== - dependencies: - prelude-ls "~1.1.2" - type-check "~0.3.2" - -lilconfig@^3.0.0: - version "3.1.2" - resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-3.1.2.tgz#e4a7c3cb549e3a606c8dcc32e5ae1005e62c05cb" - integrity sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow== - -loader-utils@^2.0.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.4.tgz#8b5cb38b5c34a9a018ee1fc0e6a066d1dfcc528c" - integrity sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw== - dependencies: - big.js "^5.2.2" - emojis-list "^3.0.0" - json5 "^2.1.2" - -loader-utils@^3.2.0: - version "3.3.1" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-3.3.1.tgz#735b9a19fd63648ca7adbd31c2327dfe281304e5" - integrity sha512-FMJTLMXfCLMLfJxcX9PFqX5qD88Z5MRGaZCVzfuqeZSPsyiBzs+pahDQjbIWz2QIzPZz0NX9Zy4FX3lmK6YHIg== - -locate-path@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" - integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== - dependencies: - p-locate "^5.0.0" - -lodash.camelcase@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" - integrity sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA== - -lodash.debounce@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" - integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== - lodash.defaults@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c" @@ -4246,36 +1392,6 @@ lodash.isarguments@^3.1.0: resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" integrity sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg== -lodash@^4.17.21: - version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" - integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== - -log-symbols@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" - integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== - dependencies: - chalk "^4.1.0" - is-unicode-supported "^0.1.0" - -longest-streak@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/longest-streak/-/longest-streak-3.1.0.tgz#62fa67cd958742a1574af9f39866364102d90cd4" - integrity sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g== - -lowercase-keys@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" - integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== - -lru-cache@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" - integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== - dependencies: - yallist "^3.0.2" - lru-cache@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" @@ -4283,18 +1399,6 @@ lru-cache@^6.0.0: dependencies: yallist "^4.0.0" -lru-cache@^7.14.1: - version "7.18.3" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.18.3.tgz#f793896e0fd0e954a59dfdd82f0773808df6aa89" - integrity sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA== - -magic-string@^0.25.3: - version "0.25.9" - resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.9.tgz#de7f9faf91ef8a1c91d02c2e5314c8277dbcdd1c" - integrity sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ== - dependencies: - sourcemap-codec "^1.4.8" - make-dir@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" @@ -4329,470 +1433,24 @@ make-fetch-happen@^9.1.0: socks-proxy-agent "^6.0.0" ssri "^8.0.0" -markdown-extensions@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/markdown-extensions/-/markdown-extensions-1.1.1.tgz#fea03b539faeaee9b4ef02a3769b455b189f7fc3" - integrity sha512-WWC0ZuMzCyDHYCasEGs4IPvLyTGftYwh6wIEOULOF0HXcqZlhwRzrK0w2VUlxWA98xnvb/jszw4ZSkJ6ADpM6Q== - -mdast-util-definitions@^5.0.0: - version "5.1.2" - resolved "https://registry.yarnpkg.com/mdast-util-definitions/-/mdast-util-definitions-5.1.2.tgz#9910abb60ac5d7115d6819b57ae0bcef07a3f7a7" - integrity sha512-8SVPMuHqlPME/z3gqVwWY4zVXn8lqKv/pAhC57FuJ40ImXyBpmO5ukh98zB2v7Blql2FiHjHv9LVztSIqjY+MA== - dependencies: - "@types/mdast" "^3.0.0" - "@types/unist" "^2.0.0" - unist-util-visit "^4.0.0" - -mdast-util-from-markdown@^1.0.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/mdast-util-from-markdown/-/mdast-util-from-markdown-1.3.1.tgz#9421a5a247f10d31d2faed2a30df5ec89ceafcf0" - integrity sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww== - dependencies: - "@types/mdast" "^3.0.0" - "@types/unist" "^2.0.0" - decode-named-character-reference "^1.0.0" - mdast-util-to-string "^3.1.0" - micromark "^3.0.0" - micromark-util-decode-numeric-character-reference "^1.0.0" - micromark-util-decode-string "^1.0.0" - micromark-util-normalize-identifier "^1.0.0" - micromark-util-symbol "^1.0.0" - micromark-util-types "^1.0.0" - unist-util-stringify-position "^3.0.0" - uvu "^0.5.0" - -mdast-util-frontmatter@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/mdast-util-frontmatter/-/mdast-util-frontmatter-1.0.1.tgz#79c46d7414eb9d3acabe801ee4a70a70b75e5af1" - integrity sha512-JjA2OjxRqAa8wEG8hloD0uTU0kdn8kbtOWpPP94NBkfAlbxn4S8gCGf/9DwFtEeGPXrDcNXdiDjVaRdUFqYokw== - dependencies: - "@types/mdast" "^3.0.0" - mdast-util-to-markdown "^1.3.0" - micromark-extension-frontmatter "^1.0.0" - -mdast-util-mdx-expression@^1.0.0: - version "1.3.2" - resolved "https://registry.yarnpkg.com/mdast-util-mdx-expression/-/mdast-util-mdx-expression-1.3.2.tgz#d027789e67524d541d6de543f36d51ae2586f220" - integrity sha512-xIPmR5ReJDu/DHH1OoIT1HkuybIfRGYRywC+gJtI7qHjCJp/M9jrmBEJW22O8lskDWm562BX2W8TiAwRTb0rKA== - dependencies: - "@types/estree-jsx" "^1.0.0" - "@types/hast" "^2.0.0" - "@types/mdast" "^3.0.0" - mdast-util-from-markdown "^1.0.0" - mdast-util-to-markdown "^1.0.0" - -mdast-util-mdx-jsx@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-1.2.0.tgz#c0f5140e021fd134fa90272eb8bbddb39f8db399" - integrity sha512-5+ot/kfxYd3ChgEMwsMUO71oAfYjyRI3pADEK4I7xTmWLGQ8Y7ghm1CG36zUoUvDPxMlIYwQV/9DYHAUWdG4dA== - dependencies: - "@types/estree-jsx" "^0.0.1" - "@types/mdast" "^3.0.0" - mdast-util-to-markdown "^1.0.0" - parse-entities "^4.0.0" - stringify-entities "^4.0.0" - unist-util-remove-position "^4.0.0" - unist-util-stringify-position "^3.0.0" - vfile-message "^3.0.0" - -mdast-util-mdx@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/mdast-util-mdx/-/mdast-util-mdx-1.1.0.tgz#c98612804719309aea97e3da068658392e126488" - integrity sha512-leKb9uG7laXdyFlTleYV4ZEaCpsxeU1LlkkR/xp35pgKrfV1Y0fNCuOw9vaRc2a9YDpH22wd145Wt7UY5yzeZw== - dependencies: - mdast-util-mdx-expression "^1.0.0" - mdast-util-mdx-jsx "^1.0.0" - mdast-util-mdxjs-esm "^1.0.0" - -mdast-util-mdxjs-esm@^1.0.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-1.3.1.tgz#645d02cd607a227b49721d146fd81796b2e2d15b" - integrity sha512-SXqglS0HrEvSdUEfoXFtcg7DRl7S2cwOXc7jkuusG472Mmjag34DUDeOJUZtl+BVnyeO1frIgVpHlNRWc2gk/w== - dependencies: - "@types/estree-jsx" "^1.0.0" - "@types/hast" "^2.0.0" - "@types/mdast" "^3.0.0" - mdast-util-from-markdown "^1.0.0" - mdast-util-to-markdown "^1.0.0" - -mdast-util-phrasing@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/mdast-util-phrasing/-/mdast-util-phrasing-3.0.1.tgz#c7c21d0d435d7fb90956038f02e8702781f95463" - integrity sha512-WmI1gTXUBJo4/ZmSk79Wcb2HcjPJBzM1nlI/OUWA8yk2X9ik3ffNbBGsU+09BFmXaL1IBb9fiuvq6/KMiNycSg== - dependencies: - "@types/mdast" "^3.0.0" - unist-util-is "^5.0.0" - -mdast-util-to-hast@^11.0.0: - version "11.3.0" - resolved "https://registry.yarnpkg.com/mdast-util-to-hast/-/mdast-util-to-hast-11.3.0.tgz#ea9220617a710e80aa5cc3ac7cc9d4bb0440ae7a" - integrity sha512-4o3Cli3hXPmm1LhB+6rqhfsIUBjnKFlIUZvudaermXB+4/KONdd/W4saWWkC+LBLbPMqhFSSTSRgafHsT5fVJw== - dependencies: - "@types/hast" "^2.0.0" - "@types/mdast" "^3.0.0" - "@types/mdurl" "^1.0.0" - mdast-util-definitions "^5.0.0" - mdurl "^1.0.0" - unist-builder "^3.0.0" - unist-util-generated "^2.0.0" - unist-util-position "^4.0.0" - unist-util-visit "^4.0.0" - -mdast-util-to-markdown@^1.0.0, mdast-util-to-markdown@^1.3.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/mdast-util-to-markdown/-/mdast-util-to-markdown-1.5.0.tgz#c13343cb3fc98621911d33b5cd42e7d0731171c6" - integrity sha512-bbv7TPv/WC49thZPg3jXuqzuvI45IL2EVAr/KxF0BSdHsU0ceFHOmwQn6evxAh1GaoK/6GQ1wp4R4oW2+LFL/A== - dependencies: - "@types/mdast" "^3.0.0" - "@types/unist" "^2.0.0" - longest-streak "^3.0.0" - mdast-util-phrasing "^3.0.0" - mdast-util-to-string "^3.0.0" - micromark-util-decode-string "^1.0.0" - unist-util-visit "^4.0.0" - zwitch "^2.0.0" - -mdast-util-to-string@^3.0.0, mdast-util-to-string@^3.1.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/mdast-util-to-string/-/mdast-util-to-string-3.2.0.tgz#66f7bb6324756741c5f47a53557f0cbf16b6f789" - integrity sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg== - dependencies: - "@types/mdast" "^3.0.0" - -mdurl@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e" - integrity sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g== - -media-query-parser@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/media-query-parser/-/media-query-parser-2.0.2.tgz#ff79e56cee92615a304a1c2fa4f2bd056c0a1d29" - integrity sha512-1N4qp+jE0pL5Xv4uEcwVUhIkwdUO3S/9gML90nqKA7v7FcOS5vUtatfzok9S9U1EJU8dHWlcv95WLnKmmxZI9w== - dependencies: - "@babel/runtime" "^7.12.5" - -media-typer@0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" - integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== - -merge-descriptors@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" - integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w== - merge-stream@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== -merge2@^1.2.3, merge2@^1.3.0: +merge2@^1.3.0: version "1.4.1" resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== -methods@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" - integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== - -micromark-core-commonmark@^1.0.0, micromark-core-commonmark@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/micromark-core-commonmark/-/micromark-core-commonmark-1.1.0.tgz#1386628df59946b2d39fb2edfd10f3e8e0a75bb8" - integrity sha512-BgHO1aRbolh2hcrzL2d1La37V0Aoz73ymF8rAcKnohLy93titmv62E0gP8Hrx9PKcKrqCZ1BbLGbP3bEhoXYlw== - dependencies: - decode-named-character-reference "^1.0.0" - micromark-factory-destination "^1.0.0" - micromark-factory-label "^1.0.0" - micromark-factory-space "^1.0.0" - micromark-factory-title "^1.0.0" - micromark-factory-whitespace "^1.0.0" - micromark-util-character "^1.0.0" - micromark-util-chunked "^1.0.0" - micromark-util-classify-character "^1.0.0" - micromark-util-html-tag-name "^1.0.0" - micromark-util-normalize-identifier "^1.0.0" - micromark-util-resolve-all "^1.0.0" - micromark-util-subtokenize "^1.0.0" - micromark-util-symbol "^1.0.0" - micromark-util-types "^1.0.1" - uvu "^0.5.0" - -micromark-extension-frontmatter@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/micromark-extension-frontmatter/-/micromark-extension-frontmatter-1.1.1.tgz#2946643938e491374145d0c9aacc3249e38a865f" - integrity sha512-m2UH9a7n3W8VAH9JO9y01APpPKmNNNs71P0RbknEmYSaZU5Ghogv38BYO94AI5Xw6OYfxZRdHZZ2nYjs/Z+SZQ== - dependencies: - fault "^2.0.0" - micromark-util-character "^1.0.0" - micromark-util-symbol "^1.0.0" - micromark-util-types "^1.0.0" - -micromark-extension-mdx-expression@^1.0.0: - version "1.0.8" - resolved "https://registry.yarnpkg.com/micromark-extension-mdx-expression/-/micromark-extension-mdx-expression-1.0.8.tgz#5bc1f5fd90388e8293b3ef4f7c6f06c24aff6314" - integrity sha512-zZpeQtc5wfWKdzDsHRBY003H2Smg+PUi2REhqgIhdzAa5xonhP03FcXxqFSerFiNUr5AWmHpaNPQTBVOS4lrXw== - dependencies: - "@types/estree" "^1.0.0" - micromark-factory-mdx-expression "^1.0.0" - micromark-factory-space "^1.0.0" - micromark-util-character "^1.0.0" - micromark-util-events-to-acorn "^1.0.0" - micromark-util-symbol "^1.0.0" - micromark-util-types "^1.0.0" - uvu "^0.5.0" - -micromark-extension-mdx-jsx@^1.0.0: - version "1.0.5" - resolved "https://registry.yarnpkg.com/micromark-extension-mdx-jsx/-/micromark-extension-mdx-jsx-1.0.5.tgz#e72d24b7754a30d20fb797ece11e2c4e2cae9e82" - integrity sha512-gPH+9ZdmDflbu19Xkb8+gheqEDqkSpdCEubQyxuz/Hn8DOXiXvrXeikOoBA71+e8Pfi0/UYmU3wW3H58kr7akA== - dependencies: - "@types/acorn" "^4.0.0" - "@types/estree" "^1.0.0" - estree-util-is-identifier-name "^2.0.0" - micromark-factory-mdx-expression "^1.0.0" - micromark-factory-space "^1.0.0" - micromark-util-character "^1.0.0" - micromark-util-symbol "^1.0.0" - micromark-util-types "^1.0.0" - uvu "^0.5.0" - vfile-message "^3.0.0" - -micromark-extension-mdx-md@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/micromark-extension-mdx-md/-/micromark-extension-mdx-md-1.0.1.tgz#595d4b2f692b134080dca92c12272ab5b74c6d1a" - integrity sha512-7MSuj2S7xjOQXAjjkbjBsHkMtb+mDGVW6uI2dBL9snOBCbZmoNgDAeZ0nSn9j3T42UE/g2xVNMn18PJxZvkBEA== - dependencies: - micromark-util-types "^1.0.0" - -micromark-extension-mdxjs-esm@^1.0.0: - version "1.0.5" - resolved "https://registry.yarnpkg.com/micromark-extension-mdxjs-esm/-/micromark-extension-mdxjs-esm-1.0.5.tgz#e4f8be9c14c324a80833d8d3a227419e2b25dec1" - integrity sha512-xNRBw4aoURcyz/S69B19WnZAkWJMxHMT5hE36GtDAyhoyn/8TuAeqjFJQlwk+MKQsUD7b3l7kFX+vlfVWgcX1w== - dependencies: - "@types/estree" "^1.0.0" - micromark-core-commonmark "^1.0.0" - micromark-util-character "^1.0.0" - micromark-util-events-to-acorn "^1.0.0" - micromark-util-symbol "^1.0.0" - micromark-util-types "^1.0.0" - unist-util-position-from-estree "^1.1.0" - uvu "^0.5.0" - vfile-message "^3.0.0" - -micromark-extension-mdxjs@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/micromark-extension-mdxjs/-/micromark-extension-mdxjs-1.0.1.tgz#f78d4671678d16395efeda85170c520ee795ded8" - integrity sha512-7YA7hF6i5eKOfFUzZ+0z6avRG52GpWR8DL+kN47y3f2KhxbBZMhmxe7auOeaTBrW2DenbbZTf1ea9tA2hDpC2Q== - dependencies: - acorn "^8.0.0" - acorn-jsx "^5.0.0" - micromark-extension-mdx-expression "^1.0.0" - micromark-extension-mdx-jsx "^1.0.0" - micromark-extension-mdx-md "^1.0.0" - micromark-extension-mdxjs-esm "^1.0.0" - micromark-util-combine-extensions "^1.0.0" - micromark-util-types "^1.0.0" - -micromark-factory-destination@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/micromark-factory-destination/-/micromark-factory-destination-1.1.0.tgz#eb815957d83e6d44479b3df640f010edad667b9f" - integrity sha512-XaNDROBgx9SgSChd69pjiGKbV+nfHGDPVYFs5dOoDd7ZnMAE+Cuu91BCpsY8RT2NP9vo/B8pds2VQNCLiu0zhg== - dependencies: - micromark-util-character "^1.0.0" - micromark-util-symbol "^1.0.0" - micromark-util-types "^1.0.0" - -micromark-factory-label@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/micromark-factory-label/-/micromark-factory-label-1.1.0.tgz#cc95d5478269085cfa2a7282b3de26eb2e2dec68" - integrity sha512-OLtyez4vZo/1NjxGhcpDSbHQ+m0IIGnT8BoPamh+7jVlzLJBH98zzuCoUeMxvM6WsNeh8wx8cKvqLiPHEACn0w== - dependencies: - micromark-util-character "^1.0.0" - micromark-util-symbol "^1.0.0" - micromark-util-types "^1.0.0" - uvu "^0.5.0" - -micromark-factory-mdx-expression@^1.0.0: - version "1.0.9" - resolved "https://registry.yarnpkg.com/micromark-factory-mdx-expression/-/micromark-factory-mdx-expression-1.0.9.tgz#57ba4571b69a867a1530f34741011c71c73a4976" - integrity sha512-jGIWzSmNfdnkJq05c7b0+Wv0Kfz3NJ3N4cBjnbO4zjXIlxJr+f8lk+5ZmwFvqdAbUy2q6B5rCY//g0QAAaXDWA== - dependencies: - "@types/estree" "^1.0.0" - micromark-util-character "^1.0.0" - micromark-util-events-to-acorn "^1.0.0" - micromark-util-symbol "^1.0.0" - micromark-util-types "^1.0.0" - unist-util-position-from-estree "^1.0.0" - uvu "^0.5.0" - vfile-message "^3.0.0" - -micromark-factory-space@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/micromark-factory-space/-/micromark-factory-space-1.1.0.tgz#c8f40b0640a0150751d3345ed885a080b0d15faf" - integrity sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ== - dependencies: - micromark-util-character "^1.0.0" - micromark-util-types "^1.0.0" - -micromark-factory-title@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/micromark-factory-title/-/micromark-factory-title-1.1.0.tgz#dd0fe951d7a0ac71bdc5ee13e5d1465ad7f50ea1" - integrity sha512-J7n9R3vMmgjDOCY8NPw55jiyaQnH5kBdV2/UXCtZIpnHH3P6nHUKaH7XXEYuWwx/xUJcawa8plLBEjMPU24HzQ== - dependencies: - micromark-factory-space "^1.0.0" - micromark-util-character "^1.0.0" - micromark-util-symbol "^1.0.0" - micromark-util-types "^1.0.0" - -micromark-factory-whitespace@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/micromark-factory-whitespace/-/micromark-factory-whitespace-1.1.0.tgz#798fb7489f4c8abafa7ca77eed6b5745853c9705" - integrity sha512-v2WlmiymVSp5oMg+1Q0N1Lxmt6pMhIHD457whWM7/GUlEks1hI9xj5w3zbc4uuMKXGisksZk8DzP2UyGbGqNsQ== - dependencies: - micromark-factory-space "^1.0.0" - micromark-util-character "^1.0.0" - micromark-util-symbol "^1.0.0" - micromark-util-types "^1.0.0" - -micromark-util-character@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/micromark-util-character/-/micromark-util-character-1.2.0.tgz#4fedaa3646db249bc58caeb000eb3549a8ca5dcc" - integrity sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg== - dependencies: - micromark-util-symbol "^1.0.0" - micromark-util-types "^1.0.0" - -micromark-util-chunked@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/micromark-util-chunked/-/micromark-util-chunked-1.1.0.tgz#37a24d33333c8c69a74ba12a14651fd9ea8a368b" - integrity sha512-Ye01HXpkZPNcV6FiyoW2fGZDUw4Yc7vT0E9Sad83+bEDiCJ1uXu0S3mr8WLpsz3HaG3x2q0HM6CTuPdcZcluFQ== - dependencies: - micromark-util-symbol "^1.0.0" - -micromark-util-classify-character@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/micromark-util-classify-character/-/micromark-util-classify-character-1.1.0.tgz#6a7f8c8838e8a120c8e3c4f2ae97a2bff9190e9d" - integrity sha512-SL0wLxtKSnklKSUplok1WQFoGhUdWYKggKUiqhX+Swala+BtptGCu5iPRc+xvzJ4PXE/hwM3FNXsfEVgoZsWbw== - dependencies: - micromark-util-character "^1.0.0" - micromark-util-symbol "^1.0.0" - micromark-util-types "^1.0.0" - -micromark-util-combine-extensions@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/micromark-util-combine-extensions/-/micromark-util-combine-extensions-1.1.0.tgz#192e2b3d6567660a85f735e54d8ea6e3952dbe84" - integrity sha512-Q20sp4mfNf9yEqDL50WwuWZHUrCO4fEyeDCnMGmG5Pr0Cz15Uo7KBs6jq+dq0EgX4DPwwrh9m0X+zPV1ypFvUA== - dependencies: - micromark-util-chunked "^1.0.0" - micromark-util-types "^1.0.0" - -micromark-util-decode-numeric-character-reference@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-1.1.0.tgz#b1e6e17009b1f20bc652a521309c5f22c85eb1c6" - integrity sha512-m9V0ExGv0jB1OT21mrWcuf4QhP46pH1KkfWy9ZEezqHKAxkj4mPCy3nIH1rkbdMlChLHX531eOrymlwyZIf2iw== - dependencies: - micromark-util-symbol "^1.0.0" - -micromark-util-decode-string@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/micromark-util-decode-string/-/micromark-util-decode-string-1.1.0.tgz#dc12b078cba7a3ff690d0203f95b5d5537f2809c" - integrity sha512-YphLGCK8gM1tG1bd54azwyrQRjCFcmgj2S2GoJDNnh4vYtnL38JS8M4gpxzOPNyHdNEpheyWXCTnnTDY3N+NVQ== - dependencies: - decode-named-character-reference "^1.0.0" - micromark-util-character "^1.0.0" - micromark-util-decode-numeric-character-reference "^1.0.0" - micromark-util-symbol "^1.0.0" - -micromark-util-encode@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/micromark-util-encode/-/micromark-util-encode-1.1.0.tgz#92e4f565fd4ccb19e0dcae1afab9a173bbeb19a5" - integrity sha512-EuEzTWSTAj9PA5GOAs992GzNh2dGQO52UvAbtSOMvXTxv3Criqb6IOzJUBCmEqrrXSblJIJBbFFv6zPxpreiJw== - -micromark-util-events-to-acorn@^1.0.0: - version "1.2.3" - resolved "https://registry.yarnpkg.com/micromark-util-events-to-acorn/-/micromark-util-events-to-acorn-1.2.3.tgz#a4ab157f57a380e646670e49ddee97a72b58b557" - integrity sha512-ij4X7Wuc4fED6UoLWkmo0xJQhsktfNh1J0m8g4PbIMPlx+ek/4YdW5mvbye8z/aZvAPUoxgXHrwVlXAPKMRp1w== - dependencies: - "@types/acorn" "^4.0.0" - "@types/estree" "^1.0.0" - "@types/unist" "^2.0.0" - estree-util-visit "^1.0.0" - micromark-util-symbol "^1.0.0" - micromark-util-types "^1.0.0" - uvu "^0.5.0" - vfile-message "^3.0.0" - -micromark-util-html-tag-name@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/micromark-util-html-tag-name/-/micromark-util-html-tag-name-1.2.0.tgz#48fd7a25826f29d2f71479d3b4e83e94829b3588" - integrity sha512-VTQzcuQgFUD7yYztuQFKXT49KghjtETQ+Wv/zUjGSGBioZnkA4P1XXZPT1FHeJA6RwRXSF47yvJ1tsJdoxwO+Q== - -micromark-util-normalize-identifier@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-1.1.0.tgz#7a73f824eb9f10d442b4d7f120fecb9b38ebf8b7" - integrity sha512-N+w5vhqrBihhjdpM8+5Xsxy71QWqGn7HYNUvch71iV2PM7+E3uWGox1Qp90loa1ephtCxG2ftRV/Conitc6P2Q== - dependencies: - micromark-util-symbol "^1.0.0" - -micromark-util-resolve-all@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/micromark-util-resolve-all/-/micromark-util-resolve-all-1.1.0.tgz#4652a591ee8c8fa06714c9b54cd6c8e693671188" - integrity sha512-b/G6BTMSg+bX+xVCshPTPyAu2tmA0E4X98NSR7eIbeC6ycCqCeE7wjfDIgzEbkzdEVJXRtOG4FbEm/uGbCRouA== - dependencies: - micromark-util-types "^1.0.0" - -micromark-util-sanitize-uri@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-1.2.0.tgz#613f738e4400c6eedbc53590c67b197e30d7f90d" - integrity sha512-QO4GXv0XZfWey4pYFndLUKEAktKkG5kZTdUNaTAkzbuJxn2tNBOr+QtxR2XpWaMhbImT2dPzyLrPXLlPhph34A== +micro@9.3.5-canary.3: + version "9.3.5-canary.3" + resolved "https://registry.yarnpkg.com/micro/-/micro-9.3.5-canary.3.tgz#e957598abb9ab05aea8453e0150a521fe22135c3" + integrity sha512-viYIo9PefV+w9dvoIBh1gI44Mvx1BOk67B4BpC2QK77qdY0xZF0Q+vWLt/BII6cLkIc8rLmSIcJaB/OrXXKe1g== dependencies: - micromark-util-character "^1.0.0" - micromark-util-encode "^1.0.0" - micromark-util-symbol "^1.0.0" - -micromark-util-subtokenize@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/micromark-util-subtokenize/-/micromark-util-subtokenize-1.1.0.tgz#941c74f93a93eaf687b9054aeb94642b0e92edb1" - integrity sha512-kUQHyzRoxvZO2PuLzMt2P/dwVsTiivCK8icYTeR+3WgbuPqfHgPPy7nFKbeqRivBvn/3N3GBiNC+JRTMSxEC7A== - dependencies: - micromark-util-chunked "^1.0.0" - micromark-util-symbol "^1.0.0" - micromark-util-types "^1.0.0" - uvu "^0.5.0" - -micromark-util-symbol@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/micromark-util-symbol/-/micromark-util-symbol-1.1.0.tgz#813cd17837bdb912d069a12ebe3a44b6f7063142" - integrity sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag== - -micromark-util-types@^1.0.0, micromark-util-types@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/micromark-util-types/-/micromark-util-types-1.1.0.tgz#e6676a8cae0bb86a2171c498167971886cb7e283" - integrity sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg== - -micromark@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/micromark/-/micromark-3.2.0.tgz#1af9fef3f995ea1ea4ac9c7e2f19c48fd5c006e9" - integrity sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA== - dependencies: - "@types/debug" "^4.0.0" - debug "^4.0.0" - decode-named-character-reference "^1.0.0" - micromark-core-commonmark "^1.0.1" - micromark-factory-space "^1.0.0" - micromark-util-character "^1.0.0" - micromark-util-chunked "^1.0.0" - micromark-util-combine-extensions "^1.0.0" - micromark-util-decode-numeric-character-reference "^1.0.0" - micromark-util-encode "^1.0.0" - micromark-util-normalize-identifier "^1.0.0" - micromark-util-resolve-all "^1.0.0" - micromark-util-sanitize-uri "^1.0.0" - micromark-util-subtokenize "^1.0.0" - micromark-util-symbol "^1.0.0" - micromark-util-types "^1.0.1" - uvu "^0.5.0" + arg "4.1.0" + content-type "1.0.4" + raw-body "2.4.1" micromatch@^4.0.2, micromatch@^4.0.4: version "4.0.7" @@ -4802,39 +1460,17 @@ micromatch@^4.0.2, micromatch@^4.0.4: braces "^3.0.3" picomatch "^2.3.1" -mime-db@1.52.0: - version "1.52.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" - integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== - -mime-types@~2.1.24, mime-types@~2.1.34: - version "2.1.35" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" - integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== - dependencies: - mime-db "1.52.0" - -mime@1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" - integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== - mimic-fn@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== -mimic-response@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" - integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== - mimic-response@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== -minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1: +minimatch@^3.0.4, minimatch@^3.1.1: version "3.1.2" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== @@ -4885,6 +1521,14 @@ minipass-sized@^1.0.3: dependencies: minipass "^3.0.0" +minipass@^2.6.0, minipass@^2.9.0: + version "2.9.0" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6" + integrity sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg== + dependencies: + safe-buffer "^5.1.2" + yallist "^3.0.0" + minipass@^3.0.0, minipass@^3.1.0, minipass@^3.1.1, minipass@^3.1.3: version "3.3.6" resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.6.tgz#7bba384db3a1520d18c9c0e5251c3444e95dd94a" @@ -4897,6 +1541,13 @@ minipass@^5.0.0: resolved "https://registry.yarnpkg.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d" integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== +minizlib@^1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d" + integrity sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q== + dependencies: + minipass "^2.9.0" + minizlib@^2.0.0, minizlib@^2.1.1: version "2.1.2" resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" @@ -4910,71 +1561,48 @@ mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3: resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113" integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== +mkdirp@^0.5.5: + version "0.5.6" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" + integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== + dependencies: + minimist "^1.2.6" + mkdirp@^1.0.3, mkdirp@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== -mlly@^1.4.2, mlly@^1.7.0: - version "1.7.1" - resolved "https://registry.yarnpkg.com/mlly/-/mlly-1.7.1.tgz#e0336429bb0731b6a8e887b438cbdae522c8f32f" - integrity sha512-rrVRZRELyQzrIUAVMHxP97kv+G786pHmOKzuFII8zDYahFBS7qnHh2AlYSl1GAHhaMPCz6/oHjVMcfFYgFYHgA== - dependencies: - acorn "^8.11.3" - pathe "^1.1.2" - pkg-types "^1.1.1" - ufo "^1.5.3" - -modern-ahocorasick@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/modern-ahocorasick/-/modern-ahocorasick-1.0.1.tgz#dec373444f51b5458ac05216a8ec376e126dd283" - integrity sha512-yoe+JbhTClckZ67b2itRtistFKf8yPYelHLc7e5xAwtNAXxM6wJTUx2C7QeVSJFDzKT7bCIFyBVybPMKvmB9AA== - -mri@1.2.0, mri@^1.1.0: +mri@1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/mri/-/mri-1.2.0.tgz#6721480fec2a11a4889861115a48b6cbe7cc8f0b" integrity sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA== -ms@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== +ms@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" + integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== ms@2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== -ms@2.1.3, ms@^2.0.0: +ms@^2.0.0, ms@^2.1.1: version "2.1.3" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== -mute-stream@0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" - integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== - -nanoid@^3.3.7: - version "3.3.7" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8" - integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g== - napi-build-utils@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-1.0.2.tgz#b1fddc0b2c46e380a0b7a76f984dd47c41a13806" integrity sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg== -negotiator@0.6.3, negotiator@^0.6.2: +negotiator@^0.6.2: version "0.6.3" resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== -netmask@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/netmask/-/netmask-2.0.2.tgz#8b01a07644065d536383835823bc52004ebac5e7" - integrity sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg== - node-abi@^3.3.0: version "3.65.0" resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.65.0.tgz#ca92d559388e1e9cab1680a18c1a18757cdac9d3" @@ -4982,11 +1610,6 @@ node-abi@^3.3.0: dependencies: semver "^7.3.5" -node-addon-api@^1.7.1: - version "1.7.2" - resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-1.7.2.tgz#3df30b95720b53c24e59948b49532b662444f54d" - integrity sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg== - node-addon-api@^7.0.0: version "7.1.0" resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-7.1.0.tgz#71f609369379c08e251c558527a107107b5e0fdb" @@ -5004,6 +1627,13 @@ node-fetch@2.6.7: dependencies: whatwg-url "^5.0.0" +node-fetch@2.6.9: + version "2.6.9" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.9.tgz#7c7f744b5cc6eb5fd404e0c7a9fec630a55657e6" + integrity sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg== + dependencies: + whatwg-url "^5.0.0" + node-fetch@^2.6.7: version "2.7.0" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" @@ -5041,11 +1671,6 @@ node-gyp@8.x: tar "^6.1.2" which "^2.0.2" -node-releases@^2.0.14: - version "2.0.14" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.14.tgz#2ffb053bceb8b2be8495ece1ab6ce600c4461b0b" - integrity sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw== - nopt@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/nopt/-/nopt-5.0.0.tgz#530942bb58a512fccafe53fe210f13a25355dc88" @@ -5058,12 +1683,7 @@ normalize-path@^3.0.0, normalize-path@~3.0.0: resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== -normalize-url@^6.0.1: - version "6.1.0" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" - integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== - -npm-run-path@^4.0.1: +npm-run-path@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== @@ -5095,18 +1715,6 @@ object-assign@^4.1.1: resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== -object-inspect@^1.13.1: - version "1.13.2" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.2.tgz#dea0088467fb991e67af4058147a24824a3043ff" - integrity sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g== - -on-finished@2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" - integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== - dependencies: - ee-first "1.1.1" - once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" @@ -5114,68 +1722,29 @@ once@^1.3.0, once@^1.3.1, once@^1.4.0: dependencies: wrappy "1" -onetime@^5.1.0, onetime@^5.1.2: +once@~1.3.0: + version "1.3.3" + resolved "https://registry.yarnpkg.com/once/-/once-1.3.3.tgz#b2e261557ce4c314ec8304f3fa82663e4297ca20" + integrity sha512-6vaNInhu+CHxtONf3zw3vq4SP2DOQhjBvIa3rNcG0+P7eKWlYH6Peu7rHizSloRU2EwMz6GraLieis9Ac9+p1w== + dependencies: + wrappy "1" + +onetime@^5.1.0: version "5.1.2" resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== dependencies: mimic-fn "^2.1.0" -optionator@^0.8.1: - version "0.8.3" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" - integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== - dependencies: - deep-is "~0.1.3" - fast-levenshtein "~2.0.6" - levn "~0.3.0" - prelude-ls "~1.1.2" - type-check "~0.3.2" - word-wrap "~1.2.3" - -ora@^5.4.1: - version "5.4.1" - resolved "https://registry.yarnpkg.com/ora/-/ora-5.4.1.tgz#1b2678426af4ac4a509008e5e4ac9e9959db9e18" - integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ== - dependencies: - bl "^4.1.0" - chalk "^4.1.0" - cli-cursor "^3.1.0" - cli-spinners "^2.5.0" - is-interactive "^1.0.0" - is-unicode-supported "^0.1.0" - log-symbols "^4.1.0" - strip-ansi "^6.0.0" - wcwidth "^1.0.1" - -os-tmpdir@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" - integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== - -outdent@^0.8.0: - version "0.8.0" - resolved "https://registry.yarnpkg.com/outdent/-/outdent-0.8.0.tgz#2ebc3e77bf49912543f1008100ff8e7f44428eb0" - integrity sha512-KiOAIsdpUTcAXuykya5fnVVT+/5uS0Q1mrkRHcF89tpieSmY33O/tmc54CqwA+bfhbtEfZUNLHaPUiB9X3jt1A== - -p-cancelable@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-2.1.1.tgz#aab7fbd416582fa32a3db49859c122487c5ed2cf" - integrity sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg== +os-paths@^4.0.1: + version "4.4.0" + resolved "https://registry.yarnpkg.com/os-paths/-/os-paths-4.4.0.tgz#2908b5bcb60cbfe3afb869292281a2a6b2f77ebe" + integrity sha512-wrAwOeXp1RRMFfQY8Sy7VaGVmPocaLwSFOYCGKSyo8qmJ+/yaafCl5BCA1IQZWqFSRBrKDYFeR9d/VyQzfH/jg== -p-limit@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" - integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== - dependencies: - yocto-queue "^0.1.0" - -p-locate@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" - integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== - dependencies: - p-limit "^3.0.2" +p-finally@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-2.0.1.tgz#bd6fcaa9c559a096b680806f4d657b3f0f240561" + integrity sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw== p-map@^4.0.0: version "4.0.0" @@ -5184,69 +1753,16 @@ p-map@^4.0.0: dependencies: aggregate-error "^3.0.0" -pac-proxy-agent@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/pac-proxy-agent/-/pac-proxy-agent-5.0.0.tgz#b718f76475a6a5415c2efbe256c1c971c84f635e" - integrity sha512-CcFG3ZtnxO8McDigozwE3AqAw15zDvGH+OjXO4kzf7IkEKkQ4gxQ+3sdF50WmhQ4P/bVusXcqNE2S3XrNURwzQ== - dependencies: - "@tootallnate/once" "1" - agent-base "6" - debug "4" - get-uri "3" - http-proxy-agent "^4.0.1" - https-proxy-agent "5" - pac-resolver "^5.0.0" - raw-body "^2.2.0" - socks-proxy-agent "5" - -pac-resolver@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/pac-resolver/-/pac-resolver-5.0.1.tgz#c91efa3a9af9f669104fa2f51102839d01cde8e7" - integrity sha512-cy7u00ko2KVgBAjuhevqpPeHIkCIqPe1v24cydhWjmeuzaBfmUWFCZJ1iAh5TuVzVZoUzXIW7K8sMYOZ84uZ9Q== - dependencies: - degenerator "^3.0.2" - ip "^1.1.5" - netmask "^2.0.2" - -pako@~0.2.0: - version "0.2.9" - resolved "https://registry.yarnpkg.com/pako/-/pako-0.2.9.tgz#f3f7522f4ef782348da8161bad9ecfd51bf83a75" - integrity sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA== - -parse-entities@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-4.0.1.tgz#4e2a01111fb1c986549b944af39eeda258fc9e4e" - integrity sha512-SWzvYcSJh4d/SGLIOQfZ/CoNv6BTlI6YEQ7Nj82oDVnRpwe/Z/F1EMx42x3JAOwGBlCjeCH0BRJQbQ/opHL17w== - dependencies: - "@types/unist" "^2.0.0" - character-entities "^2.0.0" - character-entities-legacy "^3.0.0" - character-reference-invalid "^2.0.0" - decode-named-character-reference "^1.0.0" - is-alphanumerical "^2.0.0" - is-decimal "^2.0.0" - is-hexadecimal "^2.0.0" - parse-ms@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/parse-ms/-/parse-ms-2.1.0.tgz#348565a753d4391fa524029956b172cb7753097d" integrity sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA== -parseurl@~1.3.3: - version "1.3.3" - resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" - integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== - path-browserify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-1.0.1.tgz#d98454a9c3753d5790860f16f68867b9e46be1fd" integrity sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g== -path-exists@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" - integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== - path-is-absolute@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" @@ -5257,15 +1773,13 @@ path-key@^3.0.0, path-key@^3.1.0: resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== -path-parse@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" - integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== - -path-to-regexp@0.1.7: - version "0.1.7" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" - integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ== +path-match@1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/path-match/-/path-match-1.2.4.tgz#a62747f3c7e0c2514762697f24443585b09100ea" + integrity sha512-UWlehEdqu36jmh4h5CWJ7tARp1OEVKGHKm6+dg9qMq5RKUTV5WJrGgaZ3dN2m7WFAXDbjlHzvJvL/IUpy84Ktw== + dependencies: + http-errors "~1.4.0" + path-to-regexp "^1.0.0" path-to-regexp@6.1.0: version "6.1.0" @@ -5277,134 +1791,27 @@ path-to-regexp@6.2.1: resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-6.2.1.tgz#d54934d6798eb9e5ef14e7af7962c945906918e5" integrity sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw== -path-type@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" - integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== - -pathe@^1.1.1, pathe@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/pathe/-/pathe-1.1.2.tgz#6c4cb47a945692e48a1ddd6e4094d170516437ec" - integrity sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ== - -peek-stream@^1.1.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/peek-stream/-/peek-stream-1.1.3.tgz#3b35d84b7ccbbd262fff31dc10da56856ead6d67" - integrity sha512-FhJ+YbOSBb9/rIl2ZeE/QHEsWn7PqNYt8ARAY3kIgNGOk13g9FGyIY6JIl/xB/3TFRVoTv5as0l11weORrTekA== - dependencies: - buffer-from "^1.0.0" - duplexify "^3.5.0" - through2 "^2.0.3" - -periscopic@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/periscopic/-/periscopic-3.1.0.tgz#7e9037bf51c5855bd33b48928828db4afa79d97a" - integrity sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw== - dependencies: - "@types/estree" "^1.0.0" - estree-walker "^3.0.0" - is-reference "^3.0.0" - -picocolors@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" - integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== - -picocolors@^1.0.0, picocolors@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.1.tgz#a8ad579b571952f0e5d25892de5445bcfe25aaa1" - integrity sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew== - -picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.2, picomatch@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" - integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== - -pkg-types@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/pkg-types/-/pkg-types-1.1.1.tgz#07b626880749beb607b0c817af63aac1845a73f2" - integrity sha512-ko14TjmDuQJ14zsotODv7dBlwxKhUKQEhuhmbqo1uCi9BB0Z2alo/wAXg6q1dTR5TyuqYyWhjtfe/Tsh+X28jQ== - dependencies: - confbox "^0.1.7" - mlly "^1.7.0" - pathe "^1.1.2" - -postcss-discard-duplicates@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz#9eb4fe8456706a4eebd6d3b7b777d07bad03e848" - integrity sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw== - -postcss-load-config@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-4.0.2.tgz#7159dcf626118d33e299f485d6afe4aff7c4a3e3" - integrity sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ== - dependencies: - lilconfig "^3.0.0" - yaml "^2.3.4" - -postcss-modules-extract-imports@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz#b4497cb85a9c0c4b5aabeb759bb25e8d89f15002" - integrity sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q== - -postcss-modules-local-by-default@^4.0.0: - version "4.0.5" - resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.5.tgz#f1b9bd757a8edf4d8556e8d0f4f894260e3df78f" - integrity sha512-6MieY7sIfTK0hYfafw1OMEG+2bg8Q1ocHCpoWLqOKj3JXlKu4G7btkmM/B7lFubYkYWmRSPLZi5chid63ZaZYw== - dependencies: - icss-utils "^5.0.0" - postcss-selector-parser "^6.0.2" - postcss-value-parser "^4.1.0" - -postcss-modules-scope@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-3.2.0.tgz#a43d28289a169ce2c15c00c4e64c0858e43457d5" - integrity sha512-oq+g1ssrsZOsx9M96c5w8laRmvEu9C3adDSjI8oTcbfkrTE8hx/zfyobUoWIxaKPO8bt6S62kxpw5GqypEw1QQ== +path-to-regexp@^1.0.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-1.8.0.tgz#887b3ba9d84393e87a0a0b9f4cb756198b53548a" + integrity sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA== dependencies: - postcss-selector-parser "^6.0.4" - -postcss-modules-values@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz#d7c5e7e68c3bb3c9b27cbf48ca0bb3ffb4602c9c" - integrity sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ== - dependencies: - icss-utils "^5.0.0" + isarray "0.0.1" -postcss-modules@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/postcss-modules/-/postcss-modules-6.0.0.tgz#cac283dbabbbdc2558c45391cbd0e2df9ec50118" - integrity sha512-7DGfnlyi/ju82BRzTIjWS5C4Tafmzl3R79YP/PASiocj+aa6yYphHhhKUOEoXQToId5rgyFgJ88+ccOUydjBXQ== - dependencies: - generic-names "^4.0.0" - icss-utils "^5.1.0" - lodash.camelcase "^4.3.0" - postcss-modules-extract-imports "^3.0.0" - postcss-modules-local-by-default "^4.0.0" - postcss-modules-scope "^3.0.0" - postcss-modules-values "^4.0.0" - string-hash "^1.1.1" - -postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4: - version "6.1.0" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.1.0.tgz#49694cb4e7c649299fea510a29fa6577104bcf53" - integrity sha512-UMz42UD0UY0EApS0ZL9o1XnLhSTtvvvLe5Dc2H2O56fvRZi+KulDyf5ctDhhtYJBGKStV2FL1fy6253cmLgqVQ== - dependencies: - cssesc "^3.0.0" - util-deprecate "^1.0.2" +pend@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" + integrity sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg== -postcss-value-parser@^4.1.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" - integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== +picocolors@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" + integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== -postcss@^8.4.19, postcss@^8.4.38: - version "8.4.38" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.38.tgz#b387d533baf2054288e337066d81c6bee9db9e0e" - integrity sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A== - dependencies: - nanoid "^3.3.7" - picocolors "^1.0.0" - source-map-js "^1.2.0" +picomatch@^2.0.4, picomatch@^2.0.7, picomatch@^2.2.2, picomatch@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== prebuild-install@^7.1.1: version "7.1.2" @@ -5424,33 +1831,13 @@ prebuild-install@^7.1.1: tar-fs "^2.0.0" tunnel-agent "^0.6.0" -prelude-ls@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" - integrity sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w== - -prettier@2.7.1: - version "2.7.1" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.7.1.tgz#e235806850d057f97bb08368a4f7d899f7760c64" - integrity sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g== - -pretty-bytes@5.6.0: - version "5.6.0" - resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.6.0.tgz#356256f643804773c82f64723fe78c92c62beaeb" - integrity sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg== - -pretty-ms@7.0.1, pretty-ms@^7.0.1: +pretty-ms@7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/pretty-ms/-/pretty-ms-7.0.1.tgz#7d903eaab281f7d8e03c66f867e239dc32fb73e8" integrity sha512-973driJZvxiGOQ5ONsFhOF/DtzPMOMtgC11kCpUrPGMTgqp2q/1gwzCquocrN33is0VZ5GFHXZYMM9l6h67v2Q== dependencies: parse-ms "^2.1.0" -process-nextick-args@~2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" - integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== - promise-inflight@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" @@ -5464,45 +1851,10 @@ promise-retry@^2.0.1: err-code "^2.0.2" retry "^0.12.0" -property-information@^6.0.0: - version "6.5.0" - resolved "https://registry.yarnpkg.com/property-information/-/property-information-6.5.0.tgz#6212fbb52ba757e92ef4fb9d657563b933b7ffec" - integrity sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig== - -proxy-addr@~2.0.7: - version "2.0.7" - resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" - integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== - dependencies: - forwarded "0.2.0" - ipaddr.js "1.9.1" - -proxy-agent@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/proxy-agent/-/proxy-agent-5.0.0.tgz#d31405c10d6e8431fde96cba7a0c027ce01d633b" - integrity sha512-gkH7BkvLVkSfX9Dk27W6TyNOWWZWRilRfk1XxGNWOYJ2TuedAv1yFpCaU9QSBmBe716XOTNpYNOzhysyw8xn7g== - dependencies: - agent-base "^6.0.0" - debug "4" - http-proxy-agent "^4.0.0" - https-proxy-agent "^5.0.0" - lru-cache "^5.1.1" - pac-proxy-agent "^5.0.0" - proxy-from-env "^1.0.0" - socks-proxy-agent "^5.0.0" - -proxy-from-env@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" - integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== - -pump@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" - integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" +promisepipe@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/promisepipe/-/promisepipe-3.0.0.tgz#c9b6e5aa861ef5fcce6134f6f75e14f8f30bd3b2" + integrity sha512-V6TbZDJ/ZswevgkDNpGt/YqNCiZP9ASfgU+p83uJE6NrGtvSGoOcHLiDCqkMs2+yg7F5qHdLV8d0aS8O26G/KA== pump@^3.0.0: version "3.0.0" @@ -5512,49 +1864,23 @@ pump@^3.0.0: end-of-stream "^1.1.0" once "^1.3.1" -pumpify@^1.3.3: - version "1.5.1" - resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce" - integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ== - dependencies: - duplexify "^3.6.0" - inherits "^2.0.3" - pump "^2.0.0" - punycode@^2.1.0: version "2.3.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== -qs@6.11.0: - version "6.11.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" - integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== - dependencies: - side-channel "^1.0.4" - queue-microtask@^1.2.2: version "1.2.3" resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== -quick-lru@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932" - integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== - -range-parser@~1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" - integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== - -raw-body@2.5.2, raw-body@^2.2.0: - version "2.5.2" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.2.tgz#99febd83b90e08975087e8f1f9419a149366b68a" - integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA== +raw-body@2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.1.tgz#30ac82f98bb5ae8c152e67149dac8d55153b168c" + integrity sha512-9WmIKF6mkvA0SLmA2Knm9+qj89e+j1zqgyn8aXGd7+nAduPoqgI9lO57SAZNn/Byzo5P7JhXTyg9PzaJbH73bA== dependencies: - bytes "3.1.2" - http-errors "2.0.0" + bytes "3.1.0" + http-errors "1.7.3" iconv-lite "0.4.24" unpipe "1.0.0" @@ -5568,34 +1894,6 @@ rc@^1.2.7: minimist "^1.2.0" strip-json-comments "~2.0.1" -react-refresh@^0.14.0: - version "0.14.2" - resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.14.2.tgz#3833da01ce32da470f1f936b9d477da5c7028bf9" - integrity sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA== - -readable-stream@1.1.x: - version "1.1.14" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" - integrity sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "0.0.1" - string_decoder "~0.10.x" - -readable-stream@^2.0.0, readable-stream@~2.3.6: - version "2.3.8" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" - integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.1.1" - util-deprecate "~1.0.1" - readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: version "3.6.2" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" @@ -5605,22 +1903,12 @@ readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: string_decoder "^1.1.1" util-deprecate "^1.0.1" -readdirp@~3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" - integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== - dependencies: - picomatch "^2.2.1" - -recast@^0.21.5: - version "0.21.5" - resolved "https://registry.yarnpkg.com/recast/-/recast-0.21.5.tgz#e8cd22bb51bcd6130e54f87955d33a2b2e57b495" - integrity sha512-hjMmLaUXAm1hIuTqOdeYObMslq/q+Xff6QE3Y2P+uoHAg2nmVlLBps2hzh1UJDdMtDTMXOFewK6ky51JQIeECg== +readdirp@~3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.3.0.tgz#984458d13a1e42e2e9f5841b129e162f369aff17" + integrity sha512-zz0pAkSPOXXm1viEwygWIPSPkcBYjW1xU5j/JBh5t9bGCJwa6f9+BJa6VaB2g+b55yVrmXzqkyLf4xaWYM0IkQ== dependencies: - ast-types "0.15.2" - esprima "~4.0.0" - source-map "~0.6.1" - tslib "^2.0.1" + picomatch "^2.0.7" redis-errors@^1.0.0, redis-errors@^1.2.0: version "1.2.0" @@ -5634,137 +1922,16 @@ redis-parser@^3.0.0: dependencies: redis-errors "^1.0.0" -regenerate-unicode-properties@^10.1.0: - version "10.1.1" - resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz#6b0e05489d9076b04c436f318d9b067bba459480" - integrity sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q== - dependencies: - regenerate "^1.4.2" - -regenerate@^1.4.2: - version "1.4.2" - resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" - integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== - -regenerator-runtime@^0.13.4: - version "0.13.11" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9" - integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== - -regenerator-runtime@^0.14.0: - version "0.14.1" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f" - integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw== - -regenerator-transform@^0.15.2: - version "0.15.2" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.15.2.tgz#5bbae58b522098ebdf09bca2f83838929001c7a4" - integrity sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg== - dependencies: - "@babel/runtime" "^7.8.4" - -regexpu-core@^5.3.1: - version "5.3.2" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-5.3.2.tgz#11a2b06884f3527aec3e93dbbf4a3b958a95546b" - integrity sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ== - dependencies: - "@babel/regjsgen" "^0.8.0" - regenerate "^1.4.2" - regenerate-unicode-properties "^10.1.0" - regjsparser "^0.9.1" - unicode-match-property-ecmascript "^2.0.0" - unicode-match-property-value-ecmascript "^2.1.0" - -regjsparser@^0.9.1: - version "0.9.1" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.9.1.tgz#272d05aa10c7c1f67095b1ff0addae8442fc5709" - integrity sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ== - dependencies: - jsesc "~0.5.0" - -remark-frontmatter@4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/remark-frontmatter/-/remark-frontmatter-4.0.1.tgz#84560f7ccef114ef076d3d3735be6d69f8922309" - integrity sha512-38fJrB0KnmD3E33a5jZC/5+gGAC2WKNiPw1/fdXJvijBlhA7RCsvJklrYJakS0HedninvaCYW8lQGf9C918GfA== - dependencies: - "@types/mdast" "^3.0.0" - mdast-util-frontmatter "^1.0.0" - micromark-extension-frontmatter "^1.0.0" - unified "^10.0.0" - -remark-mdx-frontmatter@^1.0.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/remark-mdx-frontmatter/-/remark-mdx-frontmatter-1.1.1.tgz#54cfb3821fbb9cb6057673e0570ae2d645f6fe32" - integrity sha512-7teX9DW4tI2WZkXS4DBxneYSY7NHiXl4AKdWDO9LXVweULlCT8OPWsOjLEnMIXViN1j+QcY8mfbq3k0EK6x3uA== - dependencies: - estree-util-is-identifier-name "^1.0.0" - estree-util-value-to-estree "^1.0.0" - js-yaml "^4.0.0" - toml "^3.0.0" - -remark-parse@^10.0.0: - version "10.0.2" - resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-10.0.2.tgz#ca241fde8751c2158933f031a4e3efbaeb8bc262" - integrity sha512-3ydxgHa/ZQzG8LvC7jTXccARYDcRld3VfcgIIFs7bI6vbRSxJJmzgLEIIoYKyrfhaY+ujuWaf/PJiMZXoiCXgw== - dependencies: - "@types/mdast" "^3.0.0" - mdast-util-from-markdown "^1.0.0" - unified "^10.0.0" - -remark-rehype@^9.0.0: - version "9.1.0" - resolved "https://registry.yarnpkg.com/remark-rehype/-/remark-rehype-9.1.0.tgz#e4b5b6e19c125b3780343eb66c3e9b99b0f06a81" - integrity sha512-oLa6YmgAYg19zb0ZrBACh40hpBLteYROaPLhBXzLgjqyHQrN+gVP9N/FJvfzuNNuzCutktkroXEZBrxAxKhh7Q== - dependencies: - "@types/hast" "^2.0.0" - "@types/mdast" "^3.0.0" - mdast-util-to-hast "^11.0.0" - unified "^10.0.0" - require-from-string@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== -"require-like@>= 0.1.1": - version "0.1.2" - resolved "https://registry.yarnpkg.com/require-like/-/require-like-0.1.2.tgz#ad6f30c13becd797010c468afa775c0c0a6b47fa" - integrity sha512-oyrU88skkMtDdauHDuKVrgR+zuItqr6/c//FXzvmxRGMexSDc6hNvJInGW3LL46n+8b50RykrvwSUIIQH2LQ5A== - -resolve-alpn@^1.0.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/resolve-alpn/-/resolve-alpn-1.2.1.tgz#b7adbdac3546aaaec20b45e7d8265927072726f9" - integrity sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g== - resolve-from@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== -resolve@^1.14.2: - version "1.22.8" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" - integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== - dependencies: - is-core-module "^2.13.0" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" - -responselike@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/responselike/-/responselike-2.0.1.tgz#9a0bc8fdc252f3fb1cca68b016591059ba1422bc" - integrity sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw== - dependencies: - lowercase-keys "^2.0.0" - -restore-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" - integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== - dependencies: - onetime "^5.1.0" - signal-exit "^3.0.2" - retry@^0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" @@ -5782,59 +1949,6 @@ rimraf@^3.0.2: dependencies: glob "^7.1.3" -rollup-plugin-inject@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/rollup-plugin-inject/-/rollup-plugin-inject-3.0.2.tgz#e4233855bfba6c0c12a312fd6649dff9a13ee9f4" - integrity sha512-ptg9PQwzs3orn4jkgXJ74bfs5vYz1NCZlSQMBUA0wKcGp5i5pA1AO3fOUEte8enhGUC+iapTCzEWw2jEFFUO/w== - dependencies: - estree-walker "^0.6.1" - magic-string "^0.25.3" - rollup-pluginutils "^2.8.1" - -rollup-plugin-node-polyfills@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/rollup-plugin-node-polyfills/-/rollup-plugin-node-polyfills-0.2.1.tgz#53092a2744837164d5b8a28812ba5f3ff61109fd" - integrity sha512-4kCrKPTJ6sK4/gLL/U5QzVT8cxJcofO0OU74tnB19F40cmuAKSzH5/siithxlofFEjwvw1YAhPmbvGNA6jEroA== - dependencies: - rollup-plugin-inject "^3.0.0" - -rollup-pluginutils@^2.8.1: - version "2.8.2" - resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz#72f2af0748b592364dbd3389e600e5a9444a351e" - integrity sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ== - dependencies: - estree-walker "^0.6.1" - -rollup@^4.13.0: - version "4.18.0" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.18.0.tgz#497f60f0c5308e4602cf41136339fbf87d5f5dda" - integrity sha512-QmJz14PX3rzbJCN1SG4Xe/bAAX2a6NpCP8ab2vfu2GiUr8AQcr2nCV/oEO3yneFarB67zk8ShlIyWb2LGTb3Sg== - dependencies: - "@types/estree" "1.0.5" - optionalDependencies: - "@rollup/rollup-android-arm-eabi" "4.18.0" - "@rollup/rollup-android-arm64" "4.18.0" - "@rollup/rollup-darwin-arm64" "4.18.0" - "@rollup/rollup-darwin-x64" "4.18.0" - "@rollup/rollup-linux-arm-gnueabihf" "4.18.0" - "@rollup/rollup-linux-arm-musleabihf" "4.18.0" - "@rollup/rollup-linux-arm64-gnu" "4.18.0" - "@rollup/rollup-linux-arm64-musl" "4.18.0" - "@rollup/rollup-linux-powerpc64le-gnu" "4.18.0" - "@rollup/rollup-linux-riscv64-gnu" "4.18.0" - "@rollup/rollup-linux-s390x-gnu" "4.18.0" - "@rollup/rollup-linux-x64-gnu" "4.18.0" - "@rollup/rollup-linux-x64-musl" "4.18.0" - "@rollup/rollup-win32-arm64-msvc" "4.18.0" - "@rollup/rollup-win32-ia32-msvc" "4.18.0" - "@rollup/rollup-win32-x64-msvc" "4.18.0" - fsevents "~2.3.2" - -run-async@^2.4.0: - version "2.4.1" - resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" - integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== - run-parallel@^1.1.9: version "1.2.0" resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" @@ -5842,112 +1956,42 @@ run-parallel@^1.1.9: dependencies: queue-microtask "^1.2.2" -rxjs@^7.5.5: - version "7.8.1" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.1.tgz#6f6f3d99ea8044291efd92e7c7fcf562c4057543" - integrity sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg== - dependencies: - tslib "^2.1.0" - -sade@^1.7.3: - version "1.8.1" - resolved "https://registry.yarnpkg.com/sade/-/sade-1.8.1.tgz#0a78e81d658d394887be57d2a409bf703a3b2701" - integrity sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A== - dependencies: - mri "^1.1.0" - -safe-buffer@5.2.1, safe-buffer@^5.0.1, safe-buffer@~5.2.0: +safe-buffer@^5.0.1, safe-buffer@^5.1.2, safe-buffer@^5.2.1, safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== -safe-buffer@~5.1.0, safe-buffer@~5.1.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - "safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0": version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -semver@6.1.1: - version "6.1.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.1.1.tgz#53f53da9b30b2103cd4f15eab3a18ecbcb210c9b" - integrity sha512-rWYq2e5iYW+fFe/oPPtYJxYgjBm8sC4rmoGdUOgBB7VnwKt6HrL793l2voH1UlsyYZpJ4g0wfjnTEO1s1NP2eQ== - -semver@7.3.8: - version "7.3.8" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798" - integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== - dependencies: - lru-cache "^6.0.0" - -semver@^6.0.0, semver@^6.3.1: +semver@6.3.1, semver@^6.0.0: version "6.3.1" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -semver@^7.3.5, semver@^7.3.7: +semver@7.3.5: + version "7.3.5" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" + integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== + dependencies: + lru-cache "^6.0.0" + +semver@^7.3.5: version "7.6.2" resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.2.tgz#1e3b34759f896e8f14d6134732ce798aeb0c6e13" integrity sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w== -send@0.18.0: - version "0.18.0" - resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" - integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg== - dependencies: - debug "2.6.9" - depd "2.0.0" - destroy "1.2.0" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - fresh "0.5.2" - http-errors "2.0.0" - mime "1.6.0" - ms "2.1.3" - on-finished "2.4.1" - range-parser "~1.2.1" - statuses "2.0.1" - -serve-static@1.15.0: - version "1.15.0" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540" - integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== - dependencies: - encodeurl "~1.0.2" - escape-html "~1.0.3" - parseurl "~1.3.3" - send "0.18.0" - set-blocking@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== -set-cookie-parser@^2.4.8: - version "2.6.0" - resolved "https://registry.yarnpkg.com/set-cookie-parser/-/set-cookie-parser-2.6.0.tgz#131921e50f62ff1a66a461d7d62d7b21d5d15a51" - integrity sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ== - -set-function-length@^1.2.1: - version "1.2.2" - resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449" - integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== - dependencies: - define-data-property "^1.1.4" - es-errors "^1.3.0" - function-bind "^1.1.2" - get-intrinsic "^1.2.4" - gopd "^1.0.1" - has-property-descriptors "^1.0.2" - -setprototypeof@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" - integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== +setprototypeof@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" + integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== shebang-command@^2.0.0: version "2.0.0" @@ -5961,17 +2005,12 @@ shebang-regex@^3.0.0: resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== -side-channel@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.6.tgz#abd25fb7cd24baf45466406b1096b7831c9215f2" - integrity sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA== - dependencies: - call-bind "^1.0.7" - es-errors "^1.3.0" - get-intrinsic "^1.2.4" - object-inspect "^1.13.1" +signal-exit@4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.0.2.tgz#ff55bb1d9ff2114c13b400688fa544ac63c36967" + integrity sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q== -signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7: +signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.7: version "3.0.7" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== @@ -5990,25 +2029,11 @@ simple-get@^4.0.0: once "^1.3.1" simple-concat "^1.0.0" -slash@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" - integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== - smart-buffer@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae" integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== -socks-proxy-agent@5, socks-proxy-agent@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-5.0.1.tgz#032fb583048a29ebffec2e6a73fca0761f48177e" - integrity sha512-vZdmnjb9a2Tz6WEQVIurybSwElwPxMZaIc7PzqbJTrezcKNznv6giT7J7tZDZ1BojVaa1jvO/UiUdhDVB0ACoQ== - dependencies: - agent-base "^6.0.2" - debug "4" - socks "^2.3.3" - socks-proxy-agent@^6.0.0: version "6.2.1" resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz#2687a31f9d7185e38d530bef1944fe1f1496d6ce" @@ -6018,7 +2043,7 @@ socks-proxy-agent@^6.0.0: debug "^4.3.3" socks "^2.6.2" -socks@^2.3.3, socks@^2.6.2: +socks@^2.6.2: version "2.8.3" resolved "https://registry.yarnpkg.com/socks/-/socks-2.8.3.tgz#1ebd0f09c52ba95a09750afe3f3f9f724a800cb5" integrity sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw== @@ -6026,54 +2051,12 @@ socks@^2.3.3, socks@^2.6.2: ip-address "^9.0.5" smart-buffer "^4.2.0" -sort-object-keys@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/sort-object-keys/-/sort-object-keys-1.1.3.tgz#bff833fe85cab147b34742e45863453c1e190b45" - integrity sha512-855pvK+VkU7PaKYPc+Jjnmt4EzejQHyhhF33q31qG8x7maDzkeFhAAThdCYay11CISO+qAMwjOBP+fPZe0IPyg== - -sort-package-json@^1.55.0: - version "1.57.0" - resolved "https://registry.yarnpkg.com/sort-package-json/-/sort-package-json-1.57.0.tgz#e95fb44af8ede0bb6147e3f39258102d4bb23fc4" - integrity sha512-FYsjYn2dHTRb41wqnv+uEqCUvBpK3jZcTp9rbz2qDTmel7Pmdtf+i2rLaaPMRZeSVM60V3Se31GyWFpmKs4Q5Q== - dependencies: - detect-indent "^6.0.0" - detect-newline "3.1.0" - git-hooks-list "1.0.3" - globby "10.0.0" - is-plain-obj "2.1.0" - sort-object-keys "^1.1.3" - -source-map-js@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.0.tgz#16b809c162517b5b8c3e7dcd315a2a5c2612b2af" - integrity sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg== - -source-map@^0.7.0, source-map@^0.7.3: - version "0.7.4" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.4.tgz#a9bbe705c9d8846f4e08ff6765acf0f1b0898656" - integrity sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA== - -source-map@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== - -sourcemap-codec@^1.4.8: - version "1.4.8" - resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" - integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== - -space-separated-tokens@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz#1ecd9d2350a3844572c3f4a312bceb018348859f" - integrity sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q== - sprintf-js@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.3.tgz#4914b903a2f8b685d17fdf78a70e917e872e444a" integrity sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA== -sqlite3@^5: +sqlite3@^5.1.7: version "5.1.7" resolved "https://registry.yarnpkg.com/sqlite3/-/sqlite3-5.1.7.tgz#59ca1053c1ab38647396586edad019b1551041b7" integrity sha512-GGIyOiFaG+TUra3JIfkI/zGP8yZYLPQ0pl1bH+ODjiX57sPhrLU5sQJn1y9bDKZUFYkX1crlrPfSYt0BKKdkog== @@ -6097,22 +2080,33 @@ standard-as-callback@^2.1.0: resolved "https://registry.yarnpkg.com/standard-as-callback/-/standard-as-callback-2.1.0.tgz#8953fc05359868a77b5b9739a665c5977bb7df45" integrity sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A== -statuses@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" - integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== +stat-mode@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/stat-mode/-/stat-mode-0.3.0.tgz#69283b081f851582b328d2a4ace5f591ce52f54b" + integrity sha512-QjMLR0A3WwFY2aZdV0okfFEJB5TRjkggXZjxP3A1RsWsNHNu3YPv8btmtc6iCFZ0Rul3FE93OYogvhOUClU+ng== -stream-shift@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.3.tgz#85b8fab4d71010fc3ba8772e8046cc49b8a3864b" - integrity sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ== +"statuses@>= 1.2.1 < 2", "statuses@>= 1.5.0 < 2": + version "1.5.0" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" + integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== -string-hash@^1.1.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/string-hash/-/string-hash-1.1.3.tgz#e8aafc0ac1855b4666929ed7dd1275df5d6c811b" - integrity sha512-kJUvRUFK49aub+a7T1nNE66EJbZBMnBgoC1UbCZ5n6bsZKBRga4KgBRTMn/pFkeCZSYtNeSyMxPDM0AXWELk2A== +stream-to-array@~2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/stream-to-array/-/stream-to-array-2.3.0.tgz#bbf6b39f5f43ec30bc71babcb37557acecf34353" + integrity sha512-UsZtOYEn4tWU2RGLOXr/o/xjRBftZRlG3dEWoaHr8j4GuypJ3isitGbVyjQKAuMu+xbiop8q224TjiZWc4XTZA== + dependencies: + any-promise "^1.1.0" + +stream-to-promise@2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/stream-to-promise/-/stream-to-promise-2.2.0.tgz#b1edb2e1c8cb11289d1b503c08d3f2aef51e650f" + integrity sha512-HAGUASw8NT0k8JvIVutB2Y/9iBk7gpgEyAudXwNJmZERdMITGdajOa4VJfD/kNiA3TppQpTP4J+CtcHwdzKBAw== + dependencies: + any-promise "~1.3.0" + end-of-stream "~1.1.0" + stream-to-array "~2.3.0" -"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.3: +"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -6128,38 +2122,13 @@ string_decoder@^1.1.1: dependencies: safe-buffer "~5.2.0" -string_decoder@~0.10.x: - version "0.10.31" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" - integrity sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ== - -string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" - integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== - dependencies: - safe-buffer "~5.1.0" - -stringify-entities@^4.0.0: - version "4.0.4" - resolved "https://registry.yarnpkg.com/stringify-entities/-/stringify-entities-4.0.4.tgz#b3b79ef5f277cc4ac73caeb0236c5ba939b3a4f3" - integrity sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg== - dependencies: - character-entities-html4 "^2.0.0" - character-entities-legacy "^3.0.0" - -strip-ansi@^6.0.0, strip-ansi@^6.0.1: +strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== dependencies: ansi-regex "^5.0.1" -strip-bom@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" - integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== - strip-final-newline@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" @@ -6170,33 +2139,7 @@ strip-json-comments@~2.0.1: resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== -style-to-object@^0.4.1: - version "0.4.4" - resolved "https://registry.yarnpkg.com/style-to-object/-/style-to-object-0.4.4.tgz#266e3dfd56391a7eefb7770423612d043c3f33ec" - integrity sha512-HYNoHZa2GorYNyqiCaBgsxvcJIn7OHq6inEga+E6Ke3m5JkoqpQbnFssk4jwe+K7AhGa2fcha4wSOf1Kn01dMg== - dependencies: - inline-style-parser "0.1.1" - -supports-color@^5.3.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" - integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== - dependencies: - has-flag "^3.0.0" - -supports-color@^7.1.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" - integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== - dependencies: - has-flag "^4.0.0" - -supports-preserve-symlinks-flag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" - integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== - -tar-fs@^2.0.0, tar-fs@^2.1.1: +tar-fs@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.1.tgz#489a15ab85f1f0befabb370b7de4f9eb5cbe8784" integrity sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng== @@ -6217,6 +2160,19 @@ tar-stream@^2.1.4: inherits "^2.0.3" readable-stream "^3.1.1" +tar@4.4.18: + version "4.4.18" + resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.18.tgz#a565090fdcf786ee08ed14b1739179451b3cc476" + integrity sha512-ZuOtqqmkV9RE1+4odd+MhBpibmCxNP6PJhH/h2OqNuotTX7/XHPZQJv2pKvWMplFH9SIZZhitehh6vBH6LO8Pg== + dependencies: + chownr "^1.1.4" + fs-minipass "^1.2.7" + minipass "^2.9.0" + minizlib "^1.3.3" + mkdirp "^0.5.5" + safe-buffer "^5.2.1" + yallist "^3.1.1" + tar@^6.0.2, tar@^6.1.11, tar@^6.1.2: version "6.2.1" resolved "https://registry.yarnpkg.com/tar/-/tar-6.2.1.tgz#717549c541bc3c2af15751bea94b1dd068d4b03a" @@ -6229,19 +2185,6 @@ tar@^6.0.2, tar@^6.1.11, tar@^6.1.2: mkdirp "^1.0.3" yallist "^4.0.0" -through2@^2.0.3: - version "2.0.5" - resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" - integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== - dependencies: - readable-stream "~2.3.6" - xtend "~4.0.1" - -through@^2.3.6: - version "2.3.8" - resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" - integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== - time-span@4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/time-span/-/time-span-4.0.0.tgz#fe74cd50a54e7998712f90ddfe47109040c985c4" @@ -6249,18 +2192,6 @@ time-span@4.0.0: dependencies: convert-hrtime "^3.0.0" -tmp@^0.0.33: - version "0.0.33" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" - integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== - dependencies: - os-tmpdir "~1.0.2" - -to-fast-properties@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" - integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== - to-regex-range@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" @@ -6268,10 +2199,10 @@ to-regex-range@^5.0.1: dependencies: is-number "^7.0.0" -toidentifier@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" - integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== +toidentifier@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" + integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== toml@^3.0.0: version "3.0.0" @@ -6283,10 +2214,10 @@ tr46@~0.0.3: resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== -trough@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/trough/-/trough-2.2.0.tgz#94a60bd6bd375c152c1df911a4b11d5b0256f50f" - integrity sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw== +tree-kill@1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.2.tgz#4ca09a9092c88b73a7cdc5e8a01b507b0790a0cc" + integrity sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A== ts-morph@12.0.0: version "12.0.0" @@ -6320,20 +2251,6 @@ ts-toolbelt@^6.15.5: resolved "https://registry.yarnpkg.com/ts-toolbelt/-/ts-toolbelt-6.15.5.tgz#cb3b43ed725cb63644782c64fbcad7d8f28c0a83" integrity sha512-FZIXf1ksVyLcfr7M317jbB67XFJhOO1YqdTcuGaq9q5jLUoTikukZ+98TPjKiP2jC5CgmYdWWYs0s2nLSU0/1A== -tsconfig-paths@^4.0.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz#ef78e19039133446d244beac0fd6a1632e2d107c" - integrity sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg== - dependencies: - json5 "^2.2.2" - minimist "^1.2.6" - strip-bom "^3.0.0" - -tslib@^2.0.1, tslib@^2.1.0: - version "2.6.3" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.3.tgz#0438f810ad7a9edcde7a241c3d80db693c8cbfe0" - integrity sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ== - tunnel-agent@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" @@ -6341,76 +2258,22 @@ tunnel-agent@^0.6.0: dependencies: safe-buffer "^5.0.1" -type-check@~0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" - integrity sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg== - dependencies: - prelude-ls "~1.1.2" - -type-fest@^0.21.3: - version "0.21.3" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" - integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== - -type-is@~1.6.18: - version "1.6.18" - resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" - integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== - dependencies: - media-typer "0.3.0" - mime-types "~2.1.24" - -typescript@4.3.4: - version "4.3.4" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.3.4.tgz#3f85b986945bcf31071decdd96cf8bfa65f9dcbc" - integrity sha512-uauPG7XZn9F/mo+7MrsRjyvbxFpzemRjKEZXS4AK83oP2KKOJPvb+9cO/gmnv8arWZvhnjVOXz7B49m1l0e9Ew== - -ufo@^1.5.3: - version "1.5.3" - resolved "https://registry.yarnpkg.com/ufo/-/ufo-1.5.3.tgz#3325bd3c977b6c6cd3160bf4ff52989adc9d3344" - integrity sha512-Y7HYmWaFwPUmkoQCUIAYpKqkOf+SbVj/2fJJZ4RJMCfZp0rTGwRbzQD+HghfnhKOjL9E01okqz+ncJskGYfBNw== - -undici-types@~5.26.4: - version "5.26.5" - resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" - integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== +typescript@4.9.5: + version "4.9.5" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" + integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== -unicode-canonical-property-names-ecmascript@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc" - integrity sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ== +uid-promise@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/uid-promise/-/uid-promise-1.0.0.tgz#68ef7c70a19dea4d637c7e3df2e0e548106f1a37" + integrity sha512-R8375j0qwXyIu/7R0tjdF06/sElHqbmdmWC9M2qQHpEVbvE4I5+38KJI7LUUmQMp7NVq4tKHiBMkT0NFM453Ig== -unicode-match-property-ecmascript@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz#54fd16e0ecb167cf04cf1f756bdcc92eba7976c3" - integrity sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q== +undici@5.28.4: + version "5.28.4" + resolved "https://registry.yarnpkg.com/undici/-/undici-5.28.4.tgz#6b280408edb6a1a604a9b20340f45b422e373068" + integrity sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g== dependencies: - unicode-canonical-property-names-ecmascript "^2.0.0" - unicode-property-aliases-ecmascript "^2.0.0" - -unicode-match-property-value-ecmascript@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz#cb5fffdcd16a05124f5a4b0bf7c3770208acbbe0" - integrity sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA== - -unicode-property-aliases-ecmascript@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz#43d41e3be698bd493ef911077c9b131f827e8ccd" - integrity sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w== - -unified@^10.0.0: - version "10.1.2" - resolved "https://registry.yarnpkg.com/unified/-/unified-10.1.2.tgz#b1d64e55dafe1f0b98bb6c719881103ecf6c86df" - integrity sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q== - dependencies: - "@types/unist" "^2.0.0" - bail "^2.0.0" - extend "^3.0.0" - is-buffer "^2.0.0" - is-plain-obj "^4.0.0" - trough "^2.0.0" - vfile "^5.0.0" + "@fastify/busboy" "^2.0.0" unique-filename@^1.1.1: version "1.1.1" @@ -6426,71 +2289,6 @@ unique-slug@^2.0.0: dependencies: imurmurhash "^0.1.4" -unist-builder@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/unist-builder/-/unist-builder-3.0.1.tgz#258b89dcadd3c973656b2327b347863556907f58" - integrity sha512-gnpOw7DIpCA0vpr6NqdPvTWnlPTApCTRzr+38E6hCWx3rz/cjo83SsKIlS1Z+L5ttScQ2AwutNnb8+tAvpb6qQ== - dependencies: - "@types/unist" "^2.0.0" - -unist-util-generated@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/unist-util-generated/-/unist-util-generated-2.0.1.tgz#e37c50af35d3ed185ac6ceacb6ca0afb28a85cae" - integrity sha512-qF72kLmPxAw0oN2fwpWIqbXAVyEqUzDHMsbtPvOudIlUzXYFIeQIuxXQCRCFh22B7cixvU0MG7m3MW8FTq/S+A== - -unist-util-is@^5.0.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-5.2.1.tgz#b74960e145c18dcb6226bc57933597f5486deae9" - integrity sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw== - dependencies: - "@types/unist" "^2.0.0" - -unist-util-position-from-estree@^1.0.0, unist-util-position-from-estree@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/unist-util-position-from-estree/-/unist-util-position-from-estree-1.1.2.tgz#8ac2480027229de76512079e377afbcabcfcce22" - integrity sha512-poZa0eXpS+/XpoQwGwl79UUdea4ol2ZuCYguVaJS4qzIOMDzbqz8a3erUCOmubSZkaOuGamb3tX790iwOIROww== - dependencies: - "@types/unist" "^2.0.0" - -unist-util-position@^4.0.0: - version "4.0.4" - resolved "https://registry.yarnpkg.com/unist-util-position/-/unist-util-position-4.0.4.tgz#93f6d8c7d6b373d9b825844645877c127455f037" - integrity sha512-kUBE91efOWfIVBo8xzh/uZQ7p9ffYRtUbMRZBNFYwf0RK8koUMx6dGUfwylLOKmaT2cs4wSW96QoYUSXAyEtpg== - dependencies: - "@types/unist" "^2.0.0" - -unist-util-remove-position@^4.0.0: - version "4.0.2" - resolved "https://registry.yarnpkg.com/unist-util-remove-position/-/unist-util-remove-position-4.0.2.tgz#a89be6ea72e23b1a402350832b02a91f6a9afe51" - integrity sha512-TkBb0HABNmxzAcfLf4qsIbFbaPDvMO6wa3b3j4VcEzFVaw1LBKwnW4/sRJ/atSLSzoIg41JWEdnE7N6DIhGDGQ== - dependencies: - "@types/unist" "^2.0.0" - unist-util-visit "^4.0.0" - -unist-util-stringify-position@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz#03ad3348210c2d930772d64b489580c13a7db39d" - integrity sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg== - dependencies: - "@types/unist" "^2.0.0" - -unist-util-visit-parents@^5.1.1: - version "5.1.3" - resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-5.1.3.tgz#b4520811b0ca34285633785045df7a8d6776cfeb" - integrity sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg== - dependencies: - "@types/unist" "^2.0.0" - unist-util-is "^5.0.0" - -unist-util-visit@^4.0.0: - version "4.1.2" - resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-4.1.2.tgz#125a42d1eb876283715a3cb5cceaa531828c72e2" - integrity sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg== - dependencies: - "@types/unist" "^2.0.0" - unist-util-is "^5.0.0" - unist-util-visit-parents "^5.1.1" - universalify@^0.1.0: version "0.1.2" resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" @@ -6501,19 +2299,11 @@ universalify@^2.0.0: resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== -unpipe@1.0.0, unpipe@~1.0.0: +unpipe@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== -update-browserslist-db@^1.0.16: - version "1.0.16" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.16.tgz#f6d489ed90fb2f07d67784eb3f53d7891f736356" - integrity sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ== - dependencies: - escalade "^3.1.2" - picocolors "^1.0.1" - uri-js@^4.2.2: version "4.4.1" resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" @@ -6521,106 +2311,38 @@ uri-js@^4.2.2: dependencies: punycode "^2.1.0" -util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: +util-deprecate@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== -utils-merge@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" - integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== - -uvu@^0.5.0: - version "0.5.6" - resolved "https://registry.yarnpkg.com/uvu/-/uvu-0.5.6.tgz#2754ca20bcb0bb59b64e9985e84d2e81058502df" - integrity sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA== - dependencies: - dequal "^2.0.0" - diff "^5.0.0" - kleur "^4.0.3" - sade "^1.7.3" +uuid@3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" + integrity sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA== v8-compile-cache-lib@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== -vary@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" - integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== - -vercel@^28.16.15: - version "28.20.0" - resolved "https://registry.yarnpkg.com/vercel/-/vercel-28.20.0.tgz#cb0ad28c6f07ee7c44e5c6f0ae0c611f6c5467f6" - integrity sha512-U+ZDKVVgxJyUJ26l/B7o53EeocP4PnbCt7D6Qyt/bI/eJ9BXpBtsWtMJf1CvgH3Iv/QRXFYlCvjHQJLs1BC7qw== - dependencies: - "@vercel/build-utils" "6.7.1" - "@vercel/go" "2.5.0" - "@vercel/hydrogen" "0.0.63" - "@vercel/next" "3.7.5" - "@vercel/node" "2.12.0" - "@vercel/python" "3.1.59" - "@vercel/redwood" "1.1.14" - "@vercel/remix-builder" "1.8.5" - "@vercel/ruby" "1.3.75" - "@vercel/static-build" "1.3.25" - -vfile-message@^3.0.0: - version "3.1.4" - resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-3.1.4.tgz#15a50816ae7d7c2d1fa87090a7f9f96612b59dea" - integrity sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw== - dependencies: - "@types/unist" "^2.0.0" - unist-util-stringify-position "^3.0.0" - -vfile@^5.0.0: - version "5.3.7" - resolved "https://registry.yarnpkg.com/vfile/-/vfile-5.3.7.tgz#de0677e6683e3380fafc46544cfe603118826ab7" - integrity sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g== - dependencies: - "@types/unist" "^2.0.0" - is-buffer "^2.0.0" - unist-util-stringify-position "^3.0.0" - vfile-message "^3.0.0" - -vite-node@^1.2.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/vite-node/-/vite-node-1.6.0.tgz#2c7e61129bfecc759478fa592754fd9704aaba7f" - integrity sha512-de6HJgzC+TFzOu0NTC4RAIsyf/DY/ibWDYQUcuEA84EMHhcefTUGkjFHKKEJhQN4A+6I0u++kr3l36ZF2d7XRw== - dependencies: - cac "^6.7.14" - debug "^4.3.4" - pathe "^1.1.1" - picocolors "^1.0.0" - vite "^5.0.0" - -vite@^5.0.0, vite@^5.0.11: - version "5.3.1" - resolved "https://registry.yarnpkg.com/vite/-/vite-5.3.1.tgz#bb2ca6b5fd7483249d3e86b25026e27ba8a663e6" - integrity sha512-XBmSKRLXLxiaPYamLv3/hnP/KXDai1NDexN0FpkTaZXTfycHvkRHoenpgl/fvuK/kPbB6xAgoyiryAhQNxYmAQ== - dependencies: - esbuild "^0.21.3" - postcss "^8.4.38" - rollup "^4.13.0" - optionalDependencies: - fsevents "~2.3.3" - -vm2@^3.9.17: - version "3.9.19" - resolved "https://registry.yarnpkg.com/vm2/-/vm2-3.9.19.tgz#be1e1d7a106122c6c492b4d51c2e8b93d3ed6a4a" - integrity sha512-J637XF0DHDMV57R6JyVsTak7nIL8gy5KH4r1HiwWLf/4GBbb5MKL5y7LpmF4A8E2nR6XmzpmMFQ7V7ppPTmUQg== - dependencies: - acorn "^8.7.0" - acorn-walk "^8.2.0" - -wcwidth@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" - integrity sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg== - dependencies: - defaults "^1.0.3" +vercel@^37.1.2: + version "37.1.2" + resolved "https://registry.yarnpkg.com/vercel/-/vercel-37.1.2.tgz#bb2a8fd3714c50d33b36668f2a39758f45188170" + integrity sha512-GhkaAwOhoy0xk+rkA/43cGSDuIMMzG71Gw1RZGsf5R1r//3BUqIyYqR5enQSw6php8wp2+HwTALyl31p+cJ4jw== + dependencies: + "@vercel/build-utils" "8.3.7" + "@vercel/fun" "1.1.0" + "@vercel/go" "3.1.1" + "@vercel/hydrogen" "1.0.4" + "@vercel/next" "4.3.7" + "@vercel/node" "3.2.9" + "@vercel/python" "4.3.1" + "@vercel/redwood" "2.1.3" + "@vercel/remix-builder" "2.2.6" + "@vercel/ruby" "2.1.0" + "@vercel/static-build" "2.5.19" + chokidar "3.3.1" web-streams-polyfill@^3.0.3: version "3.3.3" @@ -6659,70 +2381,26 @@ wide-align@^1.1.2, wide-align@^1.1.5: dependencies: string-width "^1.0.2 || 2 || 3 || 4" -word-wrap@~1.2.3: - version "1.2.5" - resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34" - integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== - -wrap-ansi@^6.0.1: - version "6.2.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" - integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== -ws@^7.4.5: - version "7.5.10" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.10.tgz#58b5c20dc281633f6c19113f39b349bd8bd558d9" - integrity sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ== - -xdm@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/xdm/-/xdm-2.1.0.tgz#d0060eb0f1230b47247bc6b3208ca3965d0053a4" - integrity sha512-3LxxbxKcRogYY7cQSMy1tUuU1zKNK9YPqMT7/S0r7Cz2QpyF8O9yFySGD7caOZt+LWUOQioOIX+6ZzCoBCpcAA== +xdg-app-paths@5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/xdg-app-paths/-/xdg-app-paths-5.1.0.tgz#f52f724f91e88244148c085c09bcd396443d8cae" + integrity sha512-RAQ3WkPf4KTU1A8RtFx3gWywzVKe00tfOPFfl2NDGqbIFENQO4kqAJp7mhQjNj/33W5x5hiWWUdyfPq/5SU3QA== dependencies: - "@rollup/pluginutils" "^4.0.0" - "@types/estree-jsx" "^0.0.1" - astring "^1.6.0" - estree-util-build-jsx "^2.0.0" - estree-util-is-identifier-name "^2.0.0" - estree-walker "^3.0.0" - got "^11.0.0" - hast-util-to-estree "^2.0.0" - loader-utils "^2.0.0" - markdown-extensions "^1.0.0" - mdast-util-mdx "^1.0.0" - micromark-extension-mdxjs "^1.0.0" - periscopic "^3.0.0" - remark-parse "^10.0.0" - remark-rehype "^9.0.0" - source-map "^0.7.0" - unified "^10.0.0" - unist-util-position-from-estree "^1.0.0" - unist-util-stringify-position "^3.0.0" - unist-util-visit "^4.0.0" - vfile "^5.0.0" - optionalDependencies: - deasync "^0.1.0" - -xregexp@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/xregexp/-/xregexp-2.0.0.tgz#52a63e56ca0b84a7f3a5f3d61872f126ad7a5943" - integrity sha512-xl/50/Cf32VsGq/1R8jJE5ajH1yMCQkpmoS10QbFZWl2Oor4H0Me64Pu2yxvsRWK3m6soJbmGfzSR7BYmDcWAA== + xdg-portable "^7.0.0" -xtend@~4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" - integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== +xdg-portable@^7.0.0: + version "7.3.0" + resolved "https://registry.yarnpkg.com/xdg-portable/-/xdg-portable-7.3.0.tgz#c6b1610de806a2ca1fe65727d5f8402c295d2e96" + integrity sha512-sqMMuL1rc0FmMBOzCpd0yuy9trqF2yTTVe+E9ogwCSWQCdDEtQUwrZPT6AxqtsFGRNxycgncbP/xmOOSPw5ZUw== + dependencies: + os-paths "^4.0.1" -yallist@^3.0.2: +yallist@^3.0.0, yallist@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== @@ -6732,22 +2410,30 @@ yallist@^4.0.0: resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== -yaml@^2.3.4: - version "2.4.5" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.4.5.tgz#60630b206dd6d84df97003d33fc1ddf6296cca5e" - integrity sha512-aBx2bnqDzVOyNKfsysjA2ms5ZlnjSAW2eG3/L5G/CSujfjLJTJsEw1bGw8kCf04KodQWk1pxlGnZ56CRxiawmg== +yauzl-clone@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/yauzl-clone/-/yauzl-clone-1.0.4.tgz#8bc6d293b17cc98802bbbed2e289d18e7697c96c" + integrity sha512-igM2RRCf3k8TvZoxR2oguuw4z1xasOnA31joCqHIyLkeWrvAc2Jgay5ISQ2ZplinkoGaJ6orCz56Ey456c5ESA== + dependencies: + events-intercept "^2.0.0" + +yauzl-promise@2.1.3: + version "2.1.3" + resolved "https://registry.yarnpkg.com/yauzl-promise/-/yauzl-promise-2.1.3.tgz#17467845db89fc6592ca987ca2ecfee8c381ae3d" + integrity sha512-A1pf6fzh6eYkK0L4Qp7g9jzJSDrM6nN0bOn5T0IbY4Yo3w+YkWlHFkJP7mzknMXjqusHFHlKsK2N+4OLsK2MRA== + dependencies: + yauzl "^2.9.1" + yauzl-clone "^1.0.4" + +yauzl@^2.9.1: + version "2.10.0" + resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9" + integrity sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g== + dependencies: + buffer-crc32 "~0.2.3" + fd-slicer "~1.1.0" yn@3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== - -yocto-queue@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" - integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== - -zwitch@^2.0.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/zwitch/-/zwitch-2.0.4.tgz#c827d4b0acb76fc3e685a4c6ec2902d51070e9d7" - integrity sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A== diff --git a/dist/buildinfo.json b/dist/buildinfo.json index 697687f0..0f7f2d07 100644 --- a/dist/buildinfo.json +++ b/dist/buildinfo.json @@ -1 +1 @@ -{"sha":"fe8b5b6","timestamp":1724122033} \ No newline at end of file +{"sha":"f69d157","timestamp":1724814473} \ No newline at end of file diff --git a/dist/index.js b/dist/index.js index c7877eed..32a5bba5 100644 --- a/dist/index.js +++ b/dist/index.js @@ -1,41 +1,92 @@ -class UserConfig { - DEFINE_KEYS = []; - AI_PROVIDER = "auto"; - AI_IMAGE_PROVIDER = "auto"; - SYSTEM_INIT_MESSAGE = null; - SYSTEM_INIT_MESSAGE_ROLE = "system"; - OPENAI_API_KEY = []; - OPENAI_CHAT_MODEL = "gpt-4o-mini"; - OPENAI_API_BASE = "https://api.openai.com/v1"; - OPENAI_API_EXTRA_PARAMS = {}; - DALL_E_MODEL = "dall-e-2"; - DALL_E_IMAGE_SIZE = "512x512"; - DALL_E_IMAGE_QUALITY = "standard"; - DALL_E_IMAGE_STYLE = "vivid"; - AZURE_API_KEY = null; - AZURE_COMPLETIONS_API = null; - AZURE_DALLE_API = null; - CLOUDFLARE_ACCOUNT_ID = null; - CLOUDFLARE_TOKEN = null; - WORKERS_CHAT_MODEL = "@cf/mistral/mistral-7b-instruct-v0.1 "; - WORKERS_IMAGE_MODEL = "@cf/stabilityai/stable-diffusion-xl-base-1.0"; - GOOGLE_API_KEY = null; - GOOGLE_COMPLETIONS_API = "https://generativelanguage.googleapis.com/v1beta/models/"; - GOOGLE_COMPLETIONS_MODEL = "gemini-pro"; - MISTRAL_API_KEY = null; - MISTRAL_API_BASE = "https://api.mistral.ai/v1"; - MISTRAL_CHAT_MODEL = "mistral-tiny"; - COHERE_API_KEY = null; - COHERE_API_BASE = "https://api.cohere.com/v1"; - COHERE_CHAT_MODEL = "command-r-plus"; - ANTHROPIC_API_KEY = null; - ANTHROPIC_API_BASE = "https://api.anthropic.com/v1"; - ANTHROPIC_CHAT_MODEL = "claude-3-haiku-20240307"; +class ConfigMerger { + static parseArray(raw) { + raw = raw.trim(); + if (raw === "") { + return []; + } + if (raw.startsWith("[") && raw.endsWith("]")) { + try { + return JSON.parse(raw); + } catch (e) { + console.error(e); + } + } + return raw.split(","); + } + static merge(target, source, exclude) { + const sourceKeys = new Set(Object.keys(source)); + for (const key of Object.keys(target)) { + if (!sourceKeys.has(key)) { + continue; + } + if (exclude && exclude.includes(key)) { + continue; + } + const t = target[key] ? typeof target[key] : "string"; + if (typeof source[key] !== "string") { + target[key] = source[key]; + continue; + } + switch (t) { + case "number": + target[key] = Number.parseInt(source[key], 10); + break; + case "boolean": + target[key] = (source[key] || "false") === "true"; + break; + case "string": + target[key] = source[key]; + break; + case "object": + if (Array.isArray(target[key])) { + target[key] = ConfigMerger.parseArray(source[key]); + } else { + try { + target[key] = JSON.parse(source[key]); + } catch (e) { + console.error(e); + } + } + break; + default: + target[key] = source[key]; + break; + } + } + } +} + +const zhHans = { "env": { "system_init_message": "你是一个得力的助手" }, "command": { "help": { "summary": "当前支持以下命令:\n", "help": "获取命令帮助", "new": "发起新的对话", "start": "获取你的ID, 并发起新的对话", "img": "生成一张图片, 命令完整格式为 `/img 图片描述`, 例如`/img 月光下的沙滩`", "version": "获取当前版本号, 判断是否需要更新", "setenv": "设置用户配置,命令完整格式为 /setenv KEY=VALUE", "setenvs": '批量设置用户配置, 命令完整格式为 /setenvs {"KEY1": "VALUE1", "KEY2": "VALUE2"}', "delenv": "删除用户配置,命令完整格式为 /delenv KEY", "clearenv": "清除所有用户配置", "system": "查看当前一些系统信息", "redo": "重做上一次的对话, /redo 加修改过的内容 或者 直接 /redo", "echo": "回显消息" }, "new": { "new_chat_start": "新的对话已经开始" } } }; + +const zhHant = { "env": { "system_init_message": "你是一個得力的助手" }, "command": { "help": { "summary": "當前支持的命令如下:\n", "help": "獲取命令幫助", "new": "開始一個新對話", "start": "獲取您的ID並開始一個新對話", "img": "生成圖片,完整命令格式為`/img 圖片描述`,例如`/img 海灘月光`", "version": "獲取當前版本號確認是否需要更新", "setenv": "設置用戶配置,完整命令格式為/setenv KEY=VALUE", "setenvs": '批量設置用户配置, 命令完整格式為 /setenvs {"KEY1": "VALUE1", "KEY2": "VALUE2"}', "delenv": "刪除用戶配置,完整命令格式為/delenv KEY", "clearenv": "清除所有用戶配置", "system": "查看一些系統信息", "redo": "重做上一次的對話 /redo 加修改過的內容 或者 直接 /redo", "echo": "回显消息" }, "new": { "new_chat_start": "開始一個新對話" } } }; + +const pt = { "env": { "system_init_message": "Você é um assistente útil" }, "command": { "help": { "summary": "Os seguintes comandos são suportados atualmente:\n", "help": "Obter ajuda sobre comandos", "new": "Iniciar uma nova conversa", "start": "Obter seu ID e iniciar uma nova conversa", "img": "Gerar uma imagem, o formato completo do comando é `/img descrição da imagem`, por exemplo `/img praia ao luar`", "version": "Obter o número da versão atual para determinar se é necessário atualizar", "setenv": "Definir configuração do usuário, o formato completo do comando é /setenv CHAVE=VALOR", "setenvs": 'Definir configurações do usuário em lote, o formato completo do comando é /setenvs {"CHAVE1": "VALOR1", "CHAVE2": "VALOR2"}', "delenv": "Excluir configuração do usuário, o formato completo do comando é /delenv CHAVE", "clearenv": "Limpar todas as configurações do usuário", "system": "Ver algumas informações do sistema", "redo": "Refazer a última conversa, /redo com conteúdo modificado ou diretamente /redo", "echo": "Repetir a mensagem" }, "new": { "new_chat_start": "Uma nova conversa foi iniciada" } } }; + +const en = { "env": { "system_init_message": "You are a helpful assistant" }, "command": { "help": { "summary": "The following commands are currently supported:\n", "help": "Get command help", "new": "Start a new conversation", "start": "Get your ID and start a new conversation", "img": "Generate an image, the complete command format is `/img image description`, for example `/img beach at moonlight`", "version": "Get the current version number to determine whether to update", "setenv": "Set user configuration, the complete command format is /setenv KEY=VALUE", "setenvs": 'Batch set user configurations, the full format of the command is /setenvs {"KEY1": "VALUE1", "KEY2": "VALUE2"}', "delenv": "Delete user configuration, the complete command format is /delenv KEY", "clearenv": "Clear all user configuration", "system": "View some system information", "redo": "Redo the last conversation, /redo with modified content or directly /redo", "echo": "Echo the message" }, "new": { "new_chat_start": "A new conversation has started" } } }; + +function loadI18n(lang) { + switch (lang?.toLowerCase()) { + case "cn": + case "zh-cn": + case "zh-hans": + return zhHans; + case "zh-tw": + case "zh-hk": + case "zh-mo": + case "zh-hant": + return zhHant; + case "pt": + case "pt-br": + return pt; + case "en": + case "en-us": + return en; + default: + return en; + } } -class Environment { - BUILD_TIMESTAMP = 1724122033 ; - BUILD_VERSION = "fe8b5b6" ; - I18N = null; + +class EnvironmentConfig { LANGUAGE = "zh-cn"; UPDATE_BRANCH = "master"; CHAT_COMPLETE_API_TIMEOUT = 0; @@ -72,2397 +123,2644 @@ class Environment { SAFE_MODE = true; DEBUG_MODE = false; DEV_MODE = false; - USER_CONFIG = new UserConfig(); } -const ENV = new Environment(); -let DATABASE = null; -let API_GUARD = null; -const CUSTOM_COMMAND = {}; -const CUSTOM_COMMAND_DESCRIPTION = {}; -const CONST = { - PASSWORD_KEY: "chat_history_password", - GROUP_TYPES: ["group", "supergroup"] -}; -const ENV_TYPES = { - SYSTEM_INIT_MESSAGE: "string", - AZURE_API_KEY: "string", - AZURE_COMPLETIONS_API: "string", - AZURE_DALLE_API: "string", - CLOUDFLARE_ACCOUNT_ID: "string", - CLOUDFLARE_TOKEN: "string", - GOOGLE_API_KEY: "string", - MISTRAL_API_KEY: "string", - COHERE_API_KEY: "string", - ANTHROPIC_API_KEY: "string", - HISTORY_IMAGE_PLACEHOLDER: "string" -}; +class AgentShareConfig { + AI_PROVIDER = "auto"; + AI_IMAGE_PROVIDER = "auto"; + SYSTEM_INIT_MESSAGE = null; + SYSTEM_INIT_MESSAGE_ROLE = "system"; +} +class OpenAIConfig { + OPENAI_API_KEY = []; + OPENAI_CHAT_MODEL = "gpt-4o-mini"; + OPENAI_API_BASE = "https://api.openai.com/v1"; + OPENAI_API_EXTRA_PARAMS = {}; +} +class DalleAIConfig { + DALL_E_MODEL = "dall-e-2"; + DALL_E_IMAGE_SIZE = "512x512"; + DALL_E_IMAGE_QUALITY = "standard"; + DALL_E_IMAGE_STYLE = "vivid"; +} +class AzureConfig { + AZURE_API_KEY = null; + AZURE_COMPLETIONS_API = null; + AZURE_DALLE_API = null; +} +class WorkersConfig { + CLOUDFLARE_ACCOUNT_ID = null; + CLOUDFLARE_TOKEN = null; + WORKERS_CHAT_MODEL = "@cf/mistral/mistral-7b-instruct-v0.1 "; + WORKERS_IMAGE_MODEL = "@cf/stabilityai/stable-diffusion-xl-base-1.0"; +} +class GeminiConfig { + GOOGLE_API_KEY = null; + GOOGLE_COMPLETIONS_API = "https://generativelanguage.googleapis.com/v1beta/models/"; + GOOGLE_COMPLETIONS_MODEL = "gemini-pro"; +} +class MistralConfig { + MISTRAL_API_KEY = null; + MISTRAL_API_BASE = "https://api.mistral.ai/v1"; + MISTRAL_CHAT_MODEL = "mistral-tiny"; +} +class CohereConfig { + COHERE_API_KEY = null; + COHERE_API_BASE = "https://api.cohere.com/v1"; + COHERE_CHAT_MODEL = "command-r-plus"; +} +class AnthropicConfig { + ANTHROPIC_API_KEY = null; + ANTHROPIC_API_BASE = "https://api.anthropic.com/v1"; + ANTHROPIC_CHAT_MODEL = "claude-3-haiku-20240307"; +} +class DefineKeys { + DEFINE_KEYS = []; + trim = (lock) => { + const config = { ...this }; + const keysSet = new Set(this.DEFINE_KEYS || []); + for (const key of lock) { + keysSet.delete(key); + } + keysSet.add("DEFINE_KEYS"); + for (const key of Object.keys(config)) { + if (!keysSet.has(key)) { + delete config[key]; + } + } + return config; + }; +} + +function createAgentUserConfig() { + return Object.assign( + {}, + new DefineKeys(), + new AgentShareConfig(), + new OpenAIConfig(), + new DalleAIConfig(), + new AzureConfig(), + new WorkersConfig(), + new GeminiConfig(), + new MistralConfig(), + new CohereConfig(), + new AnthropicConfig() + ); +} const ENV_KEY_MAPPER = { CHAT_MODEL: "OPENAI_CHAT_MODEL", API_KEY: "OPENAI_API_KEY", WORKERS_AI_MODEL: "WORKERS_CHAT_MODEL" }; -function parseArray(raw) { - raw = raw.trim(); - if (raw === "") { - return []; +class Environment extends EnvironmentConfig { + BUILD_TIMESTAMP = 1724814473 ; + BUILD_VERSION = "f69d157" ; + I18N = loadI18n(); + PLUGINS_ENV = {}; + USER_CONFIG = createAgentUserConfig(); + CUSTOM_COMMAND = {}; + PLUGINS_COMMAND = {}; + DATABASE = null; + API_GUARD = null; + merge(source) { + this.DATABASE = source.DATABASE; + this.API_GUARD = source.API_GUARD; + this.mergeCommands( + "CUSTOM_COMMAND_", + "COMMAND_DESCRIPTION_", + source, + this.CUSTOM_COMMAND + ); + this.mergeCommands( + "PLUGIN_COMMAND_", + "PLUGIN_DESCRIPTION_", + source, + this.PLUGINS_COMMAND + ); + const pluginEnvPrefix = "PLUGIN_ENV_"; + for (const key of Object.keys(source)) { + if (key.startsWith(pluginEnvPrefix)) { + const plugin = key.substring(pluginEnvPrefix.length); + this.PLUGINS_ENV[plugin] = source[key]; + } + } + ConfigMerger.merge(this, source, [ + "BUILD_TIMESTAMP", + "BUILD_VERSION", + "I18N", + "PLUGINS_ENV", + "USER_CONFIG", + "CUSTOM_COMMAND", + "PLUGINS_COMMAND", + "DATABASE", + "API_GUARD" + ]); + ConfigMerger.merge(this.USER_CONFIG, source); + this.migrateOldEnv(source); + this.USER_CONFIG.DEFINE_KEYS = []; + this.I18N = loadI18n(this.LANGUAGE.toLowerCase()); } - if (raw.startsWith("[") && raw.endsWith("]")) { - try { - return JSON.parse(raw); - } catch (e) { - console.error(e); + mergeCommands(prefix, descriptionPrefix, source, target) { + for (const key of Object.keys(source)) { + if (key.startsWith(prefix)) { + const cmd = key.substring(prefix.length); + target[`/${cmd}`] = { + value: source[key], + description: source[`${descriptionPrefix}${cmd}`] + }; + } } } - return raw.split(","); -} -function mergeEnvironment(target, source) { - const sourceKeys = new Set(Object.keys(source)); - for (const key of Object.keys(target)) { - if (!sourceKeys.has(key)) { - continue; + migrateOldEnv(source) { + if (source.TELEGRAM_TOKEN && !this.TELEGRAM_AVAILABLE_TOKENS.includes(source.TELEGRAM_TOKEN)) { + if (source.BOT_NAME && this.TELEGRAM_AVAILABLE_TOKENS.length === this.TELEGRAM_BOT_NAME.length) { + this.TELEGRAM_BOT_NAME.push(source.BOT_NAME); + } + this.TELEGRAM_AVAILABLE_TOKENS.push(source.TELEGRAM_TOKEN); } - const t = ENV_TYPES[key] || typeof target[key]; - if (typeof source[key] !== "string") { - target[key] = source[key]; - continue; + if (source.OPENAI_API_DOMAIN && !this.USER_CONFIG.OPENAI_API_BASE) { + this.USER_CONFIG.OPENAI_API_BASE = `${source.OPENAI_API_DOMAIN}/v1`; } - switch (t) { - case "number": - target[key] = Number.parseInt(source[key], 10); - break; - case "boolean": - target[key] = (source[key] || "false") === "true"; - break; - case "string": - target[key] = source[key]; - break; - case "array": - target[key] = parseArray(source[key]); - break; - case "object": - if (Array.isArray(target[key])) { - target[key] = parseArray(source[key]); - } else { - try { - target[key] = JSON.parse(source[key]); - } catch (e) { - console.error(e); - } - } - break; - default: - target[key] = source[key]; - break; + if (source.WORKERS_AI_MODEL && !this.USER_CONFIG.WORKERS_CHAT_MODEL) { + this.USER_CONFIG.WORKERS_CHAT_MODEL = source.WORKERS_AI_MODEL; } - } -} -function initEnv(env, i18n) { - DATABASE = env.DATABASE; - API_GUARD = env.API_GUARD; - const customCommandPrefix = "CUSTOM_COMMAND_"; - const customCommandDescriptionPrefix = "COMMAND_DESCRIPTION_"; - for (const key of Object.keys(env)) { - if (key.startsWith(customCommandPrefix)) { - const cmd = key.substring(customCommandPrefix.length); - CUSTOM_COMMAND[`/${cmd}`] = env[key]; - CUSTOM_COMMAND_DESCRIPTION[`/${cmd}`] = env[customCommandDescriptionPrefix + cmd]; + if (source.API_KEY && this.USER_CONFIG.OPENAI_API_KEY.length === 0) { + this.USER_CONFIG.OPENAI_API_KEY = source.API_KEY.split(","); } - } - mergeEnvironment(ENV, env); - mergeEnvironment(ENV.USER_CONFIG, env); - migrateOldEnv(env, i18n); - ENV.USER_CONFIG.DEFINE_KEYS = []; -} -function migrateOldEnv(env, i18n) { - ENV.I18N = i18n((ENV.LANGUAGE || "cn").toLowerCase()); - if (env.TELEGRAM_TOKEN && !ENV.TELEGRAM_AVAILABLE_TOKENS.includes(env.TELEGRAM_TOKEN)) { - if (env.BOT_NAME && ENV.TELEGRAM_AVAILABLE_TOKENS.length === ENV.TELEGRAM_BOT_NAME.length) { - ENV.TELEGRAM_BOT_NAME.push(env.BOT_NAME); + if (source.CHAT_MODEL && !this.USER_CONFIG.OPENAI_CHAT_MODEL) { + this.USER_CONFIG.OPENAI_CHAT_MODEL = source.CHAT_MODEL; + } + if (!this.USER_CONFIG.SYSTEM_INIT_MESSAGE) { + this.USER_CONFIG.SYSTEM_INIT_MESSAGE = this.I18N?.env?.system_init_message || "You are a helpful assistant"; } - ENV.TELEGRAM_AVAILABLE_TOKENS.push(env.TELEGRAM_TOKEN); - } - if (env.OPENAI_API_DOMAIN && !ENV.OPENAI_API_BASE) { - ENV.USER_CONFIG.OPENAI_API_BASE = `${env.OPENAI_API_DOMAIN}/v1`; - } - if (env.WORKERS_AI_MODEL && !ENV.USER_CONFIG.WORKERS_CHAT_MODEL) { - ENV.USER_CONFIG.WORKERS_CHAT_MODEL = env.WORKERS_AI_MODEL; - } - if (env.API_KEY && ENV.USER_CONFIG.OPENAI_API_KEY.length === 0) { - ENV.USER_CONFIG.OPENAI_API_KEY = env.API_KEY.split(","); - } - if (env.CHAT_MODEL && !ENV.USER_CONFIG.OPENAI_CHAT_MODEL) { - ENV.USER_CONFIG.OPENAI_CHAT_MODEL = env.CHAT_MODEL; - } - if (!ENV.USER_CONFIG.SYSTEM_INIT_MESSAGE) { - ENV.USER_CONFIG.SYSTEM_INIT_MESSAGE = ENV.I18N?.env?.system_init_message || "You are a helpful assistant"; } } +const ENV = new Environment(); -function trimUserConfig(userConfig) { - const config = { - ...(userConfig || {}), - }; - const keysSet = new Set(userConfig?.DEFINE_KEYS || []); - for (const key of ENV.LOCK_USER_CONFIG_KEYS) { - keysSet.delete(key); - } - keysSet.add('DEFINE_KEYS'); - for (const key of Object.keys(config)) { - if (!keysSet.has(key)) { - delete config[key]; - } - } - return config; -} class ShareContext { - currentBotId = null; - currentBotToken = null; - currentBotName = null; - chatHistoryKey = null; - chatLastMessageIdKey = null; - configStoreKey = null; - groupAdminKey = null; - usageKey = null; - chatType = null; - chatId = null; - speakerId = null; - extraMessageContext = null; - allMemberAreAdmin = false; -} -class CurrentChatContext { - chat_id = null; - reply_to_message_id = null; - parse_mode = ENV.DEFAULT_PARSE_MODE; - message_id = null; - reply_markup = null; - allow_sending_without_reply = null; - disable_web_page_preview = null; -} -class Context { - USER_CONFIG = new UserConfig(); - CURRENT_CHAT_CONTEXT = new CurrentChatContext(); - SHARE_CONTEXT = new ShareContext(); - _initChatContext(chatId, replyToMessageId) { - this.CURRENT_CHAT_CONTEXT.chat_id = chatId; - this.CURRENT_CHAT_CONTEXT.reply_to_message_id = replyToMessageId; - if (replyToMessageId) { - this.CURRENT_CHAT_CONTEXT.allow_sending_without_reply = true; - } - } - async _initUserConfig(storeKey) { - try { - this.USER_CONFIG = { - ...ENV.USER_CONFIG, - }; - const userConfig = JSON.parse(await DATABASE.get(storeKey)); - mergeEnvironment(this.USER_CONFIG, trimUserConfig(userConfig)); - } catch (e) { - console.error(e); - } + botId; + botToken; + botName = null; + chatHistoryKey; + lastMessageKey; + configStoreKey; + groupAdminsKey; + constructor(token, message) { + const botId = Number.parseInt(token.split(":")[0]); + const telegramIndex = ENV.TELEGRAM_AVAILABLE_TOKENS.indexOf(token); + if (telegramIndex === -1) { + throw new Error("Token not allowed"); + } + if (ENV.TELEGRAM_BOT_NAME.length > telegramIndex) { + this.botName = ENV.TELEGRAM_BOT_NAME[telegramIndex]; + } + this.botToken = token; + this.botId = botId; + const id = message?.chat?.id; + if (id === void 0 || id === null) { + throw new Error("Chat id not found"); + } + let historyKey = `history:${id}`; + let configStoreKey = `user_config:${id}`; + if (botId) { + historyKey += `:${botId}`; + configStoreKey += `:${botId}`; + } + switch (message.chat.type) { + case "group": + case "supergroup": + if (!ENV.GROUP_CHAT_BOT_SHARE_MODE && message.from?.id) { + historyKey += `:${message.from.id}`; + configStoreKey += `:${message.from.id}`; + } + this.groupAdminsKey = `group_admin:${id}`; + break; } - initTelegramContext(token) { - const telegramIndex = ENV.TELEGRAM_AVAILABLE_TOKENS.indexOf(token); - if (telegramIndex === -1) { - throw new Error('Token not allowed'); - } - this.SHARE_CONTEXT.currentBotToken = token; - this.SHARE_CONTEXT.currentBotId = token.split(':')[0]; - if (ENV.TELEGRAM_BOT_NAME.length > telegramIndex) { - this.SHARE_CONTEXT.currentBotName = ENV.TELEGRAM_BOT_NAME[telegramIndex]; - } + if (message?.chat.is_forum && message?.is_topic_message) { + if (message?.message_thread_id) { + historyKey += `:${message.message_thread_id}`; + configStoreKey += `:${message.message_thread_id}`; + } } - async _initShareContext(message) { - this.SHARE_CONTEXT.usageKey = `usage:${this.SHARE_CONTEXT.currentBotId}`; - const id = message?.chat?.id; - if (id === undefined || id === null) { - throw new Error('Chat id not found'); - } - const botId = this.SHARE_CONTEXT.currentBotId; - let historyKey = `history:${id}`; - let configStoreKey = `user_config:${id}`; - let groupAdminKey = null; - if (botId) { - historyKey += `:${botId}`; - configStoreKey += `:${botId}`; - } - if (CONST.GROUP_TYPES.includes(message.chat?.type)) { - if (!ENV.GROUP_CHAT_BOT_SHARE_MODE && message.from.id) { - historyKey += `:${message.from.id}`; - configStoreKey += `:${message.from.id}`; - } - groupAdminKey = `group_admin:${id}`; - } - if (message?.chat?.is_forum && message?.is_topic_message) { - if (message?.message_thread_id) { - historyKey += `:${message.message_thread_id}`; - configStoreKey += `:${message.message_thread_id}`; - } - } - this.SHARE_CONTEXT.chatHistoryKey = historyKey; - this.SHARE_CONTEXT.chatLastMessageIdKey = `last_message_id:${historyKey}`; - this.SHARE_CONTEXT.configStoreKey = configStoreKey; - this.SHARE_CONTEXT.groupAdminKey = groupAdminKey; - this.SHARE_CONTEXT.chatType = message.chat?.type; - this.SHARE_CONTEXT.chatId = message.chat.id; - this.SHARE_CONTEXT.speakerId = message.from.id || message.chat.id; - this.SHARE_CONTEXT.allMemberAreAdmin = message?.chat?.all_members_are_administrators; - } - async initContext(message) { - const chatId = message?.chat?.id; - const replyId = CONST.GROUP_TYPES.includes(message.chat?.type) ? message.message_id : null; - this._initChatContext(chatId, replyId); - await this._initShareContext(message); - await this._initUserConfig(this.SHARE_CONTEXT.configStoreKey); + this.chatHistoryKey = historyKey; + this.lastMessageKey = `last_message_id:${historyKey}`; + this.configStoreKey = configStoreKey; + } +} +class WorkerContext { + USER_CONFIG; + SHARE_CONTEXT; + constructor(USER_CONFIG, SHARE_CONTEXT) { + this.USER_CONFIG = USER_CONFIG; + this.SHARE_CONTEXT = SHARE_CONTEXT; + } + static async from(token, message) { + const SHARE_CONTEXT = new ShareContext(token, message); + const USER_CONFIG = Object.assign({}, ENV.USER_CONFIG); + try { + const userConfig = JSON.parse(await ENV.DATABASE.get(SHARE_CONTEXT.configStoreKey)); + ConfigMerger.merge(USER_CONFIG, userConfig?.trim(ENV.LOCK_USER_CONFIG_KEYS) || {}); + } catch (e) { + console.warn(e); } + return new WorkerContext(USER_CONFIG, SHARE_CONTEXT); + } } class Cache { - constructor() { - this.maxItems = 10; - this.maxAge = 1000 * 60 * 60; - this.cache = {}; - } - set(key, value) { - this.trim(); - this.cache[key] = { - value, - time: Date.now(), - }; - } - get(key) { - this.trim(); - return this.cache[key]?.value; + maxItems; + maxAge; + cache; + constructor() { + this.maxItems = 10; + this.maxAge = 1e3 * 60 * 60; + this.cache = {}; + } + set(key, value) { + this.trim(); + this.cache[key] = { + value, + time: Date.now() + }; + } + get(key) { + this.trim(); + return this.cache[key]?.value; + } + trim() { + let keys = Object.keys(this.cache); + for (const key of keys) { + if (Date.now() - this.cache[key].time > this.maxAge) { + delete this.cache[key]; + } } - trim() { - let keys = Object.keys(this.cache); - for (const key of keys) { - if (Date.now() - this.cache[key].time > this.maxAge) { - delete this.cache[key]; - } - } - keys = Object.keys(this.cache); - if (keys.length > this.maxItems) { - keys.sort((a, b) => this.cache[a].time - this.cache[b].time); - for (let i = 0; i < keys.length - this.maxItems; i++) { - delete this.cache[keys[i]]; - } - } + keys = Object.keys(this.cache); + if (keys.length > this.maxItems) { + keys.sort((a, b) => this.cache[a].time - this.cache[b].time); + for (let i = 0; i < keys.length - this.maxItems; i++) { + delete this.cache[keys[i]]; + } } + } } const IMAGE_CACHE = new Cache(); async function fetchImage(url) { - if (IMAGE_CACHE[url]) { - return IMAGE_CACHE.get(url); - } - return fetch(url) - .then(resp => resp.blob()) - .then((blob) => { - IMAGE_CACHE.set(url, blob); - return blob; - }); + const cache = IMAGE_CACHE.get(url); + if (cache) { + return cache; + } + return fetch(url).then((resp) => resp.blob()).then((blob) => { + IMAGE_CACHE.set(url, blob); + return blob; + }); } async function uploadImageToTelegraph(url) { - if (url.startsWith('https://telegra.ph')) { - return url; - } - const raw = await fetchImage(url); - const formData = new FormData(); - formData.append('file', raw, 'blob'); - const resp = await fetch('https://telegra.ph/upload', { - method: 'POST', - body: formData, - }); - let [{ src }] = await resp.json(); - src = `https://telegra.ph${src}`; - IMAGE_CACHE.set(src, raw); - return src; + if (url.startsWith("https://telegra.ph")) { + return url; + } + const raw = await fetchImage(url); + const formData = new FormData(); + formData.append("file", raw, "blob"); + const resp = await fetch("https://telegra.ph/upload", { + method: "POST", + body: formData + }); + let [{ src }] = await resp.json(); + src = `https://telegra.ph${src}`; + IMAGE_CACHE.set(src, raw); + return src; } async function urlToBase64String(url) { - try { - const { Buffer } = await import('node:buffer'); - return fetchImage(url) - .then(blob => blob.arrayBuffer()) - .then(buffer => Buffer.from(buffer).toString('base64')); - } catch { - return fetchImage(url) - .then(blob => blob.arrayBuffer()) - .then(buffer => btoa(String.fromCharCode.apply(null, new Uint8Array(buffer)))); - } -} -function getImageFormatFromBase64(base64String) { - const firstChar = base64String.charAt(0); - switch (firstChar) { - case '/': - return 'jpeg'; - case 'i': - return 'png'; - case 'R': - return 'gif'; - case 'U': - return 'webp'; - default: - throw new Error('Unsupported image format'); - } -} -async function imageToBase64String(url) { - const base64String = await urlToBase64String(url); - const format = getImageFormatFromBase64(base64String); - return { - data: base64String, - format: `image/${format}`, - }; -} -function renderBase64DataURI(params) { - return `data:${params.format};base64,${params.data}`; -} - -function renderHTML(body) { - return ` - - - ChatGPT-Telegram-Workers - - - - - - - - ${body} - - - `; -} -function errorToString(e) { - return JSON.stringify({ - message: e.message, - stack: e.stack, - }); -} -function makeResponse200(resp) { - if (resp === null) { - return new Response('NOT HANDLED', { status: 200 }); - } - if (resp.status === 200) { - return resp; - } else { - return new Response(resp.body, { - status: 200, - headers: { - 'Original-Status': resp.status, - ...resp.headers, - }, - }); - } -} - -const escapeChars = /([_*[\]()\\~`>#+\-=|{}.!])/g; -function escape(text) { - const lines = text.split('\n'); - const stack = []; - const result = []; - let linetrim = ''; - for (const [i, line] of lines.entries()) { - linetrim = line.trim(); - let startIndex; - if (/^```.+/.test(linetrim)) { - stack.push(i); - } else if (linetrim === '```') { - if (stack.length) { - startIndex = stack.pop(); - if (!stack.length) { - const content = lines.slice(startIndex, i + 1).join('\n'); - result.push(handleEscape(content, 'code')); - continue; - } - } else { - stack.push(i); - } - } - if (!stack.length) { - result.push(handleEscape(line)); - } - } - if (stack.length) { - const last = `${lines.slice(stack[0]).join('\n')}\n\`\`\``; - result.push(handleEscape(last, 'code')); - } - return result.join('\n'); -} -function handleEscape(text, type = 'text') { - if (!text.trim()) { - return text; - } - if (type === 'text') { - text = text - .replace(escapeChars, '\\$1') - .replace(/\\\*\\\*(.*?[^\\])\\\*\\\*/g, '*$1*') - .replace(/\\_\\_(.*?[^\\])\\_\\_/g, '__$1__') - .replace(/\\_(.*?[^\\])\\_/g, '_$1_') - .replace(/\\~(.*?[^\\])\\~/g, '~$1~') - .replace(/\\\|\\\|(.*?[^\\])\\\|\\\|/g, '||$1||') - .replace(/\\\[([^\]]+?)\\\]\\\((.+?)\\\)/g, '[$1]($2)') - .replace(/\\`(.*?[^\\])\\`/g, '`$1`') - .replace(/\\\\\\([_*[\]()\\~`>#+\-=|{}.!])/g, '\\$1') - .replace(/^(\s*)\\(>.+\s*)$/gm, '$1$2') - .replace(/^(\s*)\\-\s*(.+)$/gm, '$1• $2') - .replace(/^((\\#){1,3}\s)(.+)/gm, '$1*$3*'); - } else { - const codeBlank = text.length - text.trimStart().length; - if (codeBlank > 0) { - const blankReg = new RegExp(`^\\s{${codeBlank}}`, 'gm'); - text = text.replace(blankReg, ''); - } - text = text - .trimEnd() - .replace(/([\\`])/g, '\\$1') - .replace(/^\\`\\`\\`([\s\S]+)\\`\\`\\`$/g, '```$1```'); - } - return text; -} - -async function sendTelegramRequest(method, token, body = null) { - const headers = {}; - if (!(body instanceof FormData)) { - headers['Content-Type'] = 'application/json'; - } - return fetch( - `${ENV.TELEGRAM_API_DOMAIN}/bot${token}/${method}`, - { - method: 'POST', - headers, - body: body && ((body instanceof FormData) ? body : JSON.stringify(body)), - }, - ); -} -async function sendMessage(message, token, context) { - const body = { - text: message, - }; - for (const key of Object.keys(context)) { - if (context[key] !== undefined && context[key] !== null) { - body[key] = context[key]; - } - } - let method = 'sendMessage'; - if (context?.message_id) { - method = 'editMessageText'; - } - return sendTelegramRequest(method, token, body); -} -async function sendMessageToTelegram(message, token, context) { - const chatContext = context; - const originMessage = message; - const limit = 4096; - if (chatContext.parse_mode === 'MarkdownV2') { - message = escape(message); - } - if (message.length <= limit) { - const resp = await sendMessage(message, token, chatContext); - if (resp.status === 200) { - return resp; - } else { - message = originMessage; - chatContext.parse_mode = null; - return await sendMessage(message, token, chatContext); - } - } - message = originMessage; - chatContext.parse_mode = null; - let lastMessageResponse = null; - for (let i = 0; i < message.length; i += limit) { - const msg = message.slice(i, Math.min(i + limit, message.length)); - if (i > 0) { - chatContext.message_id = null; - } - lastMessageResponse = await sendMessage(msg, token, chatContext); - if (lastMessageResponse.status !== 200) { - break; - } - } - return lastMessageResponse; -} -async function sendPhotoToTelegram(photo, token, context) { - if (typeof photo === 'string') { - const body = { - photo, - }; - for (const key of Object.keys(context)) { - if (context[key] !== undefined && context[key] !== null) { - body[key] = context[key]; - } - } - return sendTelegramRequest('sendPhoto', token, body); - } else { - const body = new FormData(); - body.append('photo', photo, 'photo.png'); - for (const key of Object.keys(context)) { - if (context[key] !== undefined && context[key] !== null) { - body.append(key, `${context[key]}`); - } - } - return sendTelegramRequest('sendPhoto', token, body); - } -} -async function sendChatActionToTelegram(action, token, chatId) { - return sendTelegramRequest('sendChatAction', token, { - chat_id: chatId, - action, - }); -} -async function bindTelegramWebHook(token, url) { - return sendTelegramRequest('setWebhook', token, { url }); -} -async function getChatAdministrators(chatId, token) { - return sendTelegramRequest('getChatAdministrators', token, { chat_id: chatId }) - .then(res => res.json()).catch(() => null); -} -async function getBotName(token) { - const { result: { username } } = await sendTelegramRequest('getMe', token) - .then(res => res.json()); - return username; -} -async function getFileLink(fileId, token) { - try { - const { result: { file_path } } = await sendTelegramRequest('getFile', token, { file_id: fileId }) - .then(res => res.json()); - return `https://api.telegram.org/file/bot${token}/${file_path}`; - } catch (e) { - console.error(e); - } - return ''; + try { + const { Buffer } = await import('node:buffer'); + return fetchImage(url).then((blob) => blob.arrayBuffer()).then((buffer) => Buffer.from(buffer).toString("base64")); + } catch { + return fetchImage(url).then((blob) => blob.arrayBuffer()).then((buffer) => btoa(String.fromCharCode.apply(null, new Uint8Array(buffer)))); + } } -function sendMessageToTelegramWithContext(context) { - return async (message) => { - return sendMessageToTelegram(message, context.SHARE_CONTEXT.currentBotToken, context.CURRENT_CHAT_CONTEXT); - }; +function getImageFormatFromBase64(base64String) { + const firstChar = base64String.charAt(0); + switch (firstChar) { + case "/": + return "jpeg"; + case "i": + return "png"; + case "R": + return "gif"; + case "U": + return "webp"; + default: + throw new Error("Unsupported image format"); + } } -function sendPhotoToTelegramWithContext(context) { - return (url) => { - return sendPhotoToTelegram(url, context.SHARE_CONTEXT.currentBotToken, context.CURRENT_CHAT_CONTEXT); - }; +async function imageToBase64String(url) { + const base64String = await urlToBase64String(url); + const format = getImageFormatFromBase64(base64String); + return { + data: base64String, + format: `image/${format}` + }; } -function sendChatActionToTelegramWithContext(context) { - return (action) => { - return sendChatActionToTelegram(action, context.SHARE_CONTEXT.currentBotToken, context.CURRENT_CHAT_CONTEXT.chat_id); - }; +function renderBase64DataURI(params) { + return `data:${params.format};base64,${params.data}`; } class Stream { - constructor(response, controller, decoder = null, parser = null) { - this.response = response; - this.controller = controller; - this.decoder = decoder || new SSEDecoder(); - this.parser = parser || openaiSseJsonParser; - } - async* iterMessages() { - if (!this.response.body) { - this.controller.abort(); - throw new Error('Attempted to iterate over a response with no body'); - } - const lineDecoder = new LineDecoder(); - const iter = this.response.body; - for await (const chunk of iter) { - for (const line of lineDecoder.decode(chunk)) { - const sse = this.decoder.decode(line); - if (sse) { - yield sse; - } - } - } - for (const line of lineDecoder.flush()) { - const sse = this.decoder.decode(line); - if (sse) { - yield sse; - } + response; + controller; + decoder; + parser; + constructor(response, controller, parser = null) { + this.response = response; + this.controller = controller; + this.decoder = new SSEDecoder(); + this.parser = parser || defaultSSEJsonParser; + } + async *iterMessages() { + if (!this.response.body) { + this.controller.abort(); + throw new Error("Attempted to iterate over a response with no body"); + } + const lineDecoder = new LineDecoder(); + const iter = this.response.body; + for await (const chunk of iter) { + for (const line of lineDecoder.decode(chunk)) { + const sse = this.decoder.decode(line); + if (sse) { + yield sse; } + } } - async* [Symbol.asyncIterator]() { - let done = false; - try { - for await (const sse of this.iterMessages()) { - if (done) { - continue; - } - if (!sse) { - continue; - } - const { finish, data } = this.parser(sse); - if (finish) { - done = finish; - continue; - } - if (data) { - yield data; - } - } - done = true; - } catch (e) { - if (e instanceof Error && e.name === 'AbortError') { - return; - } - throw e; - } finally { - if (!done) { - this.controller.abort(); - } - } + for (const line of lineDecoder.flush()) { + const sse = this.decoder.decode(line); + if (sse) { + yield sse; + } } -} -class SSEDecoder { - constructor() { - this.event = null; - this.data = []; - this.chunks = []; - } - decode(line) { - if (line.endsWith('\r')) { - line = line.substring(0, line.length - 1); - } - if (!line) { - if (!this.event && !this.data.length) { - return null; - } - const sse = { - event: this.event, - data: this.data.join('\n'), - }; - this.event = null; - this.data = []; - this.chunks = []; - return sse; - } - this.chunks.push(line); - if (line.startsWith(':')) { - return null; + } + async *[Symbol.asyncIterator]() { + let done = false; + try { + for await (const sse of this.iterMessages()) { + if (done) { + continue; } - let [fieldName, _, value] = this.partition(line, ':'); - if (value.startsWith(' ')) { - value = value.substring(1); + if (!sse) { + continue; } - if (fieldName === 'event') { - this.event = value; - } else if (fieldName === 'data') { - this.data.push(value); + const { finish, data } = this.parser(sse); + if (finish) { + done = finish; + continue; } - return null; - } - partition(str, delimiter) { - const index = str.indexOf(delimiter); - if (index !== -1) { - return [str.substring(0, index), delimiter, str.substring(index + delimiter.length)]; + if (data) { + yield data; } - return [str, '', '']; + } + done = true; + } catch (e) { + if (e instanceof Error && e.name === "AbortError") { + return; + } + throw e; + } finally { + if (!done) { + this.controller.abort(); + } } + } } -function openaiSseJsonParser(sse) { - if (sse.data.startsWith('[DONE]')) { - return { finish: true }; +class SSEDecoder { + event; + data; + constructor() { + this.event = null; + this.data = []; + } + decode(line) { + if (line.endsWith("\r")) { + line = line.substring(0, line.length - 1); } - if (sse.event === null) { - try { - return { data: JSON.parse(sse.data) }; - } catch (e) { - console.error(e, sse); - } + if (!line) { + if (!this.event && !this.data.length) { + return null; + } + const sse = { + event: this.event, + data: this.data.join("\n") + }; + this.event = null; + this.data = []; + return sse; + } + if (line.startsWith(":")) { + return null; + } + let [fieldName, _, value] = this.partition(line, ":"); + if (value.startsWith(" ")) { + value = value.substring(1); + } + if (fieldName === "event") { + this.event = value; + } else if (fieldName === "data") { + this.data.push(value); } - return {}; -} -function cohereSseJsonParser(sse) { - switch (sse.event) { - case 'text-generation': - try { - return { data: JSON.parse(sse.data) }; - } catch (e) { - console.error(e, sse.data); - return {}; - } - case 'stream-start': - return {}; - case 'stream-end': - return { finish: true }; - default: - return {}; + return null; + } + partition(str, delimiter) { + const index = str.indexOf(delimiter); + if (index !== -1) { + return [str.substring(0, index), delimiter, str.substring(index + delimiter.length)]; } + return [str, "", ""]; + } } -function anthropicSseJsonParser(sse) { - switch (sse.event) { - case 'content_block_delta': - try { - return { data: JSON.parse(sse.data) }; - } catch (e) { - console.error(e, sse.data); - return {}; - } - case 'message_start': - case 'content_block_start': - case 'content_block_stop': - return {}; - case 'message_stop': - return { finish: true }; - default: - return {}; +function defaultSSEJsonParser(sse) { + if (sse.data?.startsWith("[DONE]")) { + return { finish: true }; + } + if (sse.event === null && sse.data) { + try { + return { data: JSON.parse(sse.data) }; + } catch (e) { + console.error(e, sse); } + } + return {}; } class LineDecoder { - constructor() { - this.buffer = []; - this.trailingCR = false; - } - decode(chunk) { - let text = this.decodeText(chunk); - if (this.trailingCR) { - text = `\r${text}`; - this.trailingCR = false; - } - if (text.endsWith('\r')) { - this.trailingCR = true; - text = text.slice(0, -1); - } - if (!text) { - return []; - } - const trailingNewline = LineDecoder.NEWLINE_CHARS.has(text[text.length - 1] || ''); - let lines = text.split(LineDecoder.NEWLINE_REGEXP); - if (lines.length === 1 && !trailingNewline) { - this.buffer.push(lines[0]); - return []; - } - if (this.buffer.length > 0) { - lines = [this.buffer.join('') + lines[0], ...lines.slice(1)]; - this.buffer = []; - } - if (!trailingNewline) { - this.buffer = [lines.pop() || '']; - } - return lines; + buffer; + trailingCR; + textDecoder; + static NEWLINE_CHARS = new Set(["\n", "\r"]); + static NEWLINE_REGEXP = /\r\n|[\n\r]/g; + constructor() { + this.buffer = []; + this.trailingCR = false; + } + decode(chunk) { + let text = this.decodeText(chunk); + if (this.trailingCR) { + text = `\r${text}`; + this.trailingCR = false; } - decodeText(bytes) { - if (bytes == null) { - return ''; - } - if (typeof bytes === 'string') { - return bytes; - } - if (typeof Buffer !== 'undefined') { - if (bytes instanceof Buffer) { - return bytes.toString(); - } - if (bytes instanceof Uint8Array) { - return Buffer.from(bytes).toString(); - } - throw new Error(`Unexpected: received non-Uint8Array (${bytes.constructor.name}) stream chunk in an environment with a global "Buffer" defined, which this library assumes to be Node. Please report this error.`); - } - if (typeof TextDecoder !== 'undefined') { - if (bytes instanceof Uint8Array || bytes instanceof ArrayBuffer) { - if (!this.textDecoder) { - this.textDecoder = new TextDecoder('utf8'); - } - return this.textDecoder.decode(bytes, { stream: true }); - } - throw new Error(`Unexpected: received non-Uint8Array/ArrayBuffer (${bytes.constructor.name}) in a web platform. Please report this error.`); - } - throw new Error('Unexpected: neither Buffer nor TextDecoder are available as globals. Please report this error.'); + if (text.endsWith("\r")) { + this.trailingCR = true; + text = text.slice(0, -1); + } + if (!text) { + return []; + } + const trailingNewline = LineDecoder.NEWLINE_CHARS.has(text[text.length - 1] || ""); + let lines = text.split(LineDecoder.NEWLINE_REGEXP); + if (lines.length === 1 && !trailingNewline) { + this.buffer.push(lines[0]); + return []; + } + if (this.buffer.length > 0) { + lines = [this.buffer.join("") + lines[0], ...lines.slice(1)]; + this.buffer = []; + } + if (!trailingNewline) { + this.buffer = [lines.pop() || ""]; + } + return lines; + } + decodeText(bytes) { + if (bytes == null) { + return ""; } - flush() { - if (!this.buffer.length && !this.trailingCR) { - return []; + if (typeof bytes === "string") { + return bytes; + } + if (typeof Buffer !== "undefined") { + if (bytes instanceof Buffer) { + return bytes.toString(); + } + if (bytes instanceof Uint8Array) { + return Buffer.from(bytes).toString(); + } + throw new Error(`Unexpected: received non-Uint8Array (${bytes.constructor.name}) stream chunk in an environment with a global "Buffer" defined, which this library assumes to be Node. Please report this error.`); + } + if (typeof TextDecoder !== "undefined") { + if (bytes instanceof Uint8Array || bytes instanceof ArrayBuffer) { + if (!this.textDecoder) { + this.textDecoder = new TextDecoder("utf8"); } - const lines = [this.buffer.join('')]; - this.buffer = []; - this.trailingCR = false; - return lines; + return this.textDecoder.decode(bytes, { stream: true }); + } + throw new Error(`Unexpected: received non-Uint8Array/ArrayBuffer in a web platform. Please report this error.`); } + throw new Error("Unexpected: neither Buffer nor TextDecoder are available as globals. Please report this error."); + } + flush() { + if (!this.buffer.length && !this.trailingCR) { + return []; + } + const lines = [this.buffer.join("")]; + this.buffer = []; + this.trailingCR = false; + return lines; + } } -LineDecoder.NEWLINE_CHARS = new Set(['\n', '\r']); -LineDecoder.NEWLINE_REGEXP = /\r\n|[\n\r]/g; function fixOpenAICompatibleOptions(options) { - options = options || {}; - options.streamBuilder = options.streamBuilder || function (r, c) { - return new Stream(r, c); - }; - options.contentExtractor = options.contentExtractor || function (d) { - return d?.choices?.[0]?.delta?.content; - }; - options.fullContentExtractor = options.fullContentExtractor || function (d) { - return d.choices?.[0]?.message.content; - }; - options.errorExtractor = options.errorExtractor || function (d) { - return d.error?.message; - }; - return options; + options = options || {}; + options.streamBuilder = options.streamBuilder || function(r, c) { + return new Stream(r, c); + }; + options.contentExtractor = options.contentExtractor || function(d) { + return d?.choices?.[0]?.delta?.content; + }; + options.fullContentExtractor = options.fullContentExtractor || function(d) { + return d.choices?.[0]?.message.content; + }; + options.errorExtractor = options.errorExtractor || function(d) { + return d.error?.message; + }; + return options; } function isJsonResponse(resp) { - return resp.headers.get('content-type').includes('json'); + return resp.headers.get("content-type")?.includes("json") || false; } function isEventStreamResponse(resp) { - const types = ['application/stream+json', 'text/event-stream']; - const content = resp.headers.get('content-type'); - for (const type of types) { - if (content.includes(type)) { - return true; + const types = ["application/stream+json", "text/event-stream"]; + const content = resp.headers.get("content-type") || ""; + for (const type of types) { + if (content.includes(type)) { + return true; + } + } + return false; +} +async function requestChatCompletions(url, header, body, onStream, onResult = null, options = null) { + const controller = new AbortController(); + const { signal } = controller; + let timeoutID = null; + let lastUpdateTime = Date.now(); + if (ENV.CHAT_COMPLETE_API_TIMEOUT > 0) { + timeoutID = setTimeout(() => controller.abort(), ENV.CHAT_COMPLETE_API_TIMEOUT); + } + const resp = await fetch(url, { + method: "POST", + headers: header, + body: JSON.stringify(body), + signal + }); + if (timeoutID) { + clearTimeout(timeoutID); + } + options = fixOpenAICompatibleOptions(options); + if (onStream && resp.ok && isEventStreamResponse(resp)) { + const stream = options.streamBuilder?.(resp, controller); + if (!stream) { + throw new Error("Stream builder error"); + } + let contentFull = ""; + let lengthDelta = 0; + let updateStep = 50; + try { + for await (const data of stream) { + const c = options.contentExtractor?.(data) || ""; + if (c === "") { + continue; + } + lengthDelta += c.length; + contentFull = contentFull + c; + if (lengthDelta > updateStep) { + if (ENV.TELEGRAM_MIN_STREAM_INTERVAL > 0) { + const delta = Date.now() - lastUpdateTime; + if (delta < ENV.TELEGRAM_MIN_STREAM_INTERVAL) { + continue; + } + lastUpdateTime = Date.now(); + } + lengthDelta = 0; + updateStep += 20; + await onStream(`${contentFull} +...`); } + } + } catch (e) { + contentFull += ` +ERROR: ${e.message}`; } - return false; + return contentFull; + } + if (!isJsonResponse(resp)) { + throw new Error(resp.statusText); + } + const result = await resp.json(); + if (!result) { + throw new Error("Empty response"); + } + if (options.errorExtractor?.(result)) { + throw new Error(options.errorExtractor?.(result) || "Unknown error"); + } + try { + await onResult?.(result); + return options.fullContentExtractor?.(result) || ""; + } catch (e) { + console.error(e); + throw new Error(JSON.stringify(result)); + } } -async function requestChatCompletions(url, header, body, context, onStream, onResult = null, options = null) { - const controller = new AbortController(); - const { signal } = controller; - let timeoutID = null; - let lastUpdateTime = Date.now(); - if (ENV.CHAT_COMPLETE_API_TIMEOUT > 0) { - timeoutID = setTimeout(() => controller.abort(), ENV.CHAT_COMPLETE_API_TIMEOUT); + +class Anthropic { + name = "anthropic"; + modelKey = "ANTHROPIC_CHAT_MODEL"; + enable = (context) => { + return !!context.ANTHROPIC_API_KEY; + }; + render = async (item) => { + const res = { + role: item.role, + content: item.content + }; + if (item.images && item.images.length > 0) { + res.content = []; + if (item.content) { + res.content.push({ type: "text", text: item.content }); + } + for (const image of item.images) { + res.content.push(await imageToBase64String(image).then(({ format, data }) => { + return { type: "image", source: { type: "base64", media_type: format, data } }; + })); + } } - const resp = await fetch(url, { - method: 'POST', - headers: header, - body: JSON.stringify(body), - signal, - }); - if (timeoutID) { - clearTimeout(timeoutID); - } - options = fixOpenAICompatibleOptions(options); - if (onStream && resp.ok && isEventStreamResponse(resp)) { - const stream = options.streamBuilder(resp, controller); - let contentFull = ''; - let lengthDelta = 0; - let updateStep = 50; + return res; + }; + model = (ctx) => { + return ctx.ANTHROPIC_CHAT_MODEL; + }; + static parser(sse) { + switch (sse.event) { + case "content_block_delta": try { - for await (const data of stream) { - const c = options.contentExtractor(data) || ''; - if (c === '') { - continue; - } - lengthDelta += c.length; - contentFull = contentFull + c; - if (lengthDelta > updateStep) { - if (ENV.TELEGRAM_MIN_STREAM_INTERVAL > 0) { - const delta = Date.now() - lastUpdateTime; - if (delta < ENV.TELEGRAM_MIN_STREAM_INTERVAL) { - continue; - } - lastUpdateTime = Date.now(); - } - lengthDelta = 0; - updateStep += 20; - await onStream(`${contentFull}\n...`); - } - } + return { data: JSON.parse(sse.data || "") }; } catch (e) { - contentFull += `\nERROR: ${e.message}`; - } - return contentFull; - } - if (!isJsonResponse(resp)) { - throw new Error(resp.statusText); - } - const result = await resp.json(); - if (!result) { - throw new Error('Empty response'); + console.error(e, sse.data); + return {}; + } + case "message_start": + case "content_block_start": + case "content_block_stop": + return {}; + case "message_stop": + return { finish: true }; + default: + return {}; } - if (options.errorExtractor(result)) { - throw new Error(options.errorExtractor(result)); + } + request = async (params, context, onStream) => { + const { message, images, prompt, history } = params; + const url = `${context.ANTHROPIC_API_BASE}/messages`; + const header = { + "x-api-key": context.ANTHROPIC_API_KEY || "", + "anthropic-version": "2023-06-01", + "content-type": "application/json" + }; + const messages = (history || []).concat({ role: "user", content: message, images }); + if (messages.length > 0 && messages[0].role === "assistant") { + messages.shift(); } - try { - await onResult?.(result); - return options.fullContentExtractor(result); - } catch (e) { - console.error(e); - throw new Error(JSON.stringify(result)); + const body = { + system: prompt, + model: context.ANTHROPIC_CHAT_MODEL, + messages: await Promise.all(messages.map((item) => this.render(item))), + stream: onStream != null, + max_tokens: ENV.MAX_TOKEN_LENGTH > 0 ? ENV.MAX_TOKEN_LENGTH : 2048 + }; + if (!body.system) { + delete body.system; } + const options = {}; + options.streamBuilder = function(r, c) { + return new Stream(r, c, Anthropic.parser); + }; + options.contentExtractor = function(data) { + return data?.delta?.text; + }; + options.fullContentExtractor = function(data) { + return data?.content?.[0].text; + }; + options.errorExtractor = function(data) { + return data?.error?.message; + }; + return requestChatCompletions(url, header, body, onStream, null, options); + }; } -function openAIKeyFromContext(context) { - const length = context.USER_CONFIG.OPENAI_API_KEY.length; - return context.USER_CONFIG.OPENAI_API_KEY[Math.floor(Math.random() * length)]; -} -function isOpenAIEnable(context) { - return context.USER_CONFIG.OPENAI_API_KEY.length > 0; -} async function renderOpenAIMessage(item) { - const res = { - role: item.role, - content: item.content, + const res = { + role: item.role, + content: item.content + }; + if (item.images && item.images.length > 0) { + res.content = []; + if (item.content) { + res.content.push({ type: "text", text: item.content }); + } + for (const image of item.images) { + switch (ENV.TELEGRAM_IMAGE_TRANSFER_MODE) { + case "base64": + res.content.push({ type: "image_url", image_url: { + url: renderBase64DataURI(await imageToBase64String(image)) + } }); + break; + case "url": + default: + res.content.push({ type: "image_url", image_url: { url: image } }); + break; + } + } + } + return res; +} +class OpenAIBase { + name = "openai"; + apikey = (context) => { + const length = context.OPENAI_API_KEY.length; + return context.OPENAI_API_KEY[Math.floor(Math.random() * length)]; + }; +} +class OpenAI extends OpenAIBase { + modelKey = "OPENAI_API_KEY"; + enable = (context) => { + return context.OPENAI_API_KEY.length > 0; + }; + model = (ctx) => { + return ctx.OPENAI_CHAT_MODEL; + }; + render = async (item) => { + return renderOpenAIMessage(item); + }; + request = async (params, context, onStream) => { + const { message, images, prompt, history } = params; + const url = `${context.OPENAI_API_BASE}/chat/completions`; + const header = { + "Content-Type": "application/json", + "Authorization": `Bearer ${this.apikey(context)}` }; - if (item.images && item.images.length > 0) { - res.content = []; - if (item.content) { - res.content.push({ type: 'text', text: item.content }); - } - for (const image of item.images) { - switch (ENV.TELEGRAM_IMAGE_TRANSFER_MODE) { - case 'base64': - res.content.push({ type: 'image_url', image_url: { - url: renderBase64DataURI(await imageToBase64String(image)), - } }); - break; - case 'url': - default: - res.content.push({ type: 'image_url', image_url: { url: image } }); - break; - } - } + const messages = [...history || [], { role: "user", content: message, images }]; + if (prompt) { + messages.unshift({ role: context.SYSTEM_INIT_MESSAGE_ROLE, content: prompt }); } - return res; + const body = { + model: context.OPENAI_CHAT_MODEL, + ...context.OPENAI_API_EXTRA_PARAMS, + messages: await Promise.all(messages.map(this.render)), + stream: onStream != null + }; + return requestChatCompletions(url, header, body, onStream); + }; +} +class Dalle extends OpenAIBase { + modelKey = "OPENAI_DALLE_API"; + enable = (context) => { + return context.OPENAI_API_KEY.length > 0; + }; + model = (ctx) => { + return ctx.DALL_E_MODEL; + }; + request = async (prompt, context) => { + const url = `${context.OPENAI_API_BASE}/images/generations`; + const header = { + "Content-Type": "application/json", + "Authorization": `Bearer ${this.apikey(context)}` + }; + const body = { + prompt, + n: 1, + size: context.DALL_E_IMAGE_SIZE, + model: context.DALL_E_MODEL + }; + if (body.model === "dall-e-3") { + body.quality = context.DALL_E_IMAGE_QUALITY; + body.style = context.DALL_E_IMAGE_STYLE; + } + const resp = await fetch(url, { + method: "POST", + headers: header, + body: JSON.stringify(body) + }).then((res) => res.json()); + if (resp.error?.message) { + throw new Error(resp.error.message); + } + return resp?.data?.[0]?.url; + }; } -async function requestCompletionsFromOpenAI(params, context, onStream) { + +class AzureBase { + name = "azure"; + modelFromURI = (uri) => { + if (!uri) { + return ""; + } + try { + const url = new URL(uri); + return url.pathname.split("/")[3]; + } catch { + return uri; + } + }; +} +class AzureChatAI extends AzureBase { + modelKey = "AZURE_COMPLETIONS_API"; + enable = (context) => { + return !!(context.AZURE_API_KEY && context.AZURE_COMPLETIONS_API); + }; + model = (ctx) => { + return this.modelFromURI(ctx.AZURE_COMPLETIONS_API); + }; + request = async (params, context, onStream) => { const { message, images, prompt, history } = params; - const url = `${context.USER_CONFIG.OPENAI_API_BASE}/chat/completions`; + const url = context.AZURE_COMPLETIONS_API; + if (!url || !context.AZURE_API_KEY) { + throw new Error("Azure Completions API is not set"); + } const header = { - 'Content-Type': 'application/json', - 'Authorization': `Bearer ${openAIKeyFromContext(context)}`, + "Content-Type": "application/json", + "api-key": context.AZURE_API_KEY }; - const messages = [...(history || []), { role: 'user', content: message, images }]; + const messages = [...history || [], { role: "user", content: message, images }]; if (prompt) { - messages.unshift({ role: context.USER_CONFIG.SYSTEM_INIT_MESSAGE_ROLE, content: prompt }); + messages.unshift({ role: context.SYSTEM_INIT_MESSAGE_ROLE, content: prompt }); } const body = { - model: context.USER_CONFIG.OPENAI_CHAT_MODEL, - ...context.USER_CONFIG.OPENAI_API_EXTRA_PARAMS, - messages: await Promise.all(messages.map(renderOpenAIMessage)), - stream: onStream != null, + ...context.OPENAI_API_EXTRA_PARAMS, + messages: await Promise.all(messages.map(renderOpenAIMessage)), + stream: onStream != null }; - return requestChatCompletions(url, header, body, context, onStream); -} -async function requestImageFromOpenAI(prompt, context) { - const url = `${context.USER_CONFIG.OPENAI_API_BASE}/images/generations`; + return requestChatCompletions(url, header, body, onStream); + }; +} +class AzureImageAI extends AzureBase { + modelKey = "AZURE_DALLE_API"; + enable = (context) => { + return !!(context.AZURE_API_KEY && context.AZURE_DALLE_API); + }; + model = (ctx) => { + return this.modelFromURI(ctx.AZURE_DALLE_API); + }; + request = async (prompt, context) => { + const url = context.AZURE_DALLE_API; + if (!url || !context.AZURE_API_KEY) { + throw new Error("Azure DALL-E API is not set"); + } const header = { - 'Content-Type': 'application/json', - 'Authorization': `Bearer ${openAIKeyFromContext(context)}`, + "Content-Type": "application/json", + "api-key": context.AZURE_API_KEY }; const body = { - prompt, - n: 1, - size: context.USER_CONFIG.DALL_E_IMAGE_SIZE, - model: context.USER_CONFIG.DALL_E_MODEL, + prompt, + n: 1, + size: context.DALL_E_IMAGE_SIZE, + style: context.DALL_E_IMAGE_STYLE, + quality: context.DALL_E_IMAGE_QUALITY }; - if (body.model === 'dall-e-3') { - body.quality = context.USER_CONFIG.DALL_E_IMAGE_QUALITY; - body.style = context.USER_CONFIG.DALL_E_IMAGE_STYLE; + const validSize = ["1792x1024", "1024x1024", "1024x1792"]; + if (!validSize.includes(body.size)) { + body.size = "1024x1024"; } const resp = await fetch(url, { - method: 'POST', - headers: header, - body: JSON.stringify(body), - }).then(res => res.json()); + method: "POST", + headers: header, + body: JSON.stringify(body) + }).then((res) => res.json()); if (resp.error?.message) { - throw new Error(resp.error.message); + throw new Error(resp.error.message); } return resp?.data?.[0]?.url; + }; } -async function run(model, body, id, token) { - return await fetch( - `https://api.cloudflare.com/client/v4/accounts/${id}/ai/run/${model}`, - { - headers: { Authorization: `Bearer ${token}` }, - method: 'POST', - body: JSON.stringify(body), - }, - ); -} -function isWorkersAIEnable(context) { - return !!(context.USER_CONFIG.CLOUDFLARE_ACCOUNT_ID && context.USER_CONFIG.CLOUDFLARE_TOKEN); -} -function renderWorkerAIMessage(item) { +class Cohere { + name = "cohere"; + modelKey = "COHERE_CHAT_MODEL"; + static COHERE_ROLE_MAP = { + assistant: "CHATBOT", + user: "USER" + }; + enable = (context) => { + return !!context.COHERE_API_KEY; + }; + model = (ctx) => { + return ctx.COHERE_CHAT_MODEL; + }; + render = (item) => { return { - role: item.role, - content: item.content, + role: Cohere.COHERE_ROLE_MAP[item.role] || "USER", + content: item.content }; -} -async function requestCompletionsFromWorkersAI(params, context, onStream) { + }; + static parser(sse) { + switch (sse.event) { + case "text-generation": + try { + return { data: JSON.parse(sse.data || "") }; + } catch (e) { + console.error(e, sse.data); + return {}; + } + case "stream-start": + return {}; + case "stream-end": + return { finish: true }; + default: + return {}; + } + } + request = async (params, context, onStream) => { const { message, prompt, history } = params; - const id = context.USER_CONFIG.CLOUDFLARE_ACCOUNT_ID; - const token = context.USER_CONFIG.CLOUDFLARE_TOKEN; - const model = context.USER_CONFIG.WORKERS_CHAT_MODEL; - const url = `https://api.cloudflare.com/client/v4/accounts/${id}/ai/run/${model}`; + const url = `${context.COHERE_API_BASE}/chat`; const header = { - Authorization: `Bearer ${token}`, + "Authorization": `Bearer ${context.COHERE_API_KEY}`, + "Content-Type": "application/json", + "Accept": onStream !== null ? "text/event-stream" : "application/json" }; - const messages = [...(history || []), { role: 'user', content: message }]; - if (prompt) { - messages.unshift({ role: context.USER_CONFIG.SYSTEM_INIT_MESSAGE_ROLE, content: prompt }); - } const body = { - messages: messages.map(renderWorkerAIMessage), - stream: onStream !== null, + message, + model: context.COHERE_CHAT_MODEL, + stream: onStream != null, + preamble: prompt, + chat_history: history?.map(this.render) }; + if (!body.preamble) { + delete body.preamble; + } const options = {}; - options.contentExtractor = function (data) { - return data?.response; + options.streamBuilder = function(r, c) { + return new Stream(r, c, Cohere.parser); }; - options.fullContentExtractor = function (data) { - return data?.result?.response; + options.contentExtractor = function(data) { + return data?.text; }; - options.errorExtractor = function (data) { - return data?.errors?.[0]?.message; + options.fullContentExtractor = function(data) { + return data?.text; }; - return requestChatCompletions(url, header, body, context, onStream, null, options); -} -async function requestImageFromWorkersAI(prompt, context) { - const id = context.USER_CONFIG.CLOUDFLARE_ACCOUNT_ID; - const token = context.USER_CONFIG.CLOUDFLARE_TOKEN; - const raw = await run(context.USER_CONFIG.WORKERS_IMAGE_MODEL, { prompt }, id, token); - return await raw.blob(); + options.errorExtractor = function(data) { + return data?.message; + }; + return requestChatCompletions(url, header, body, onStream, null, options); + }; } -function isGeminiAIEnable(context) { - return !!(context.USER_CONFIG.GOOGLE_API_KEY); -} -const GEMINI_ROLE_MAP = { - assistant: 'model', - system: 'user', - user: 'user', -}; -function renderGeminiMessage(item) { +class Gemini { + name = "gemini"; + modelKey = "GOOGLE_COMPLETIONS_MODEL"; + static GEMINI_ROLE_MAP = { + assistant: "model", + system: "user", + user: "user" + }; + enable = (context) => { + return !!context.GOOGLE_API_KEY; + }; + model = (ctx) => { + return ctx.GOOGLE_COMPLETIONS_MODEL; + }; + render = (item) => { return { - role: GEMINI_ROLE_MAP[item.role], - parts: [ - { - text: item.content || '', - }, - ], + role: Gemini.GEMINI_ROLE_MAP[item.role], + parts: [ + { + text: item.content || "" + } + ] }; -} -async function requestCompletionsFromGeminiAI(params, context, onStream) { + }; + request = async (params, context, onStream) => { const { message, prompt, history } = params; - onStream = null; - const url = `${context.USER_CONFIG.GOOGLE_COMPLETIONS_API}${context.USER_CONFIG.GOOGLE_COMPLETIONS_MODEL}:${ - onStream ? 'streamGenerateContent' : 'generateContent' - }?key=${context.USER_CONFIG.GOOGLE_API_KEY}`; - const contentsTemp = [...history || [], { role: 'user', content: message }]; + if (onStream !== null) { + console.warn("Stream mode is not supported"); + } + const url = `${context.GOOGLE_COMPLETIONS_API}${context.GOOGLE_COMPLETIONS_MODEL}:${ + "generateContent"}?key=${context.GOOGLE_API_KEY}`; + const contentsTemp = [...history || [], { role: "user", content: message }]; if (prompt) { - contentsTemp.unshift({ role: 'assistant', content: prompt }); + contentsTemp.unshift({ role: "assistant", content: prompt }); } const contents = []; for (const msg of contentsTemp) { - msg.role = GEMINI_ROLE_MAP[msg.role]; - if (contents.length === 0 || contents[contents.length - 1].role !== msg.role) { - contents.push(renderGeminiMessage(msg)); - } else { - contents[contents.length - 1].parts[0].text += msg.content; - } + msg.role = Gemini.GEMINI_ROLE_MAP[msg.role]; + if (contents.length === 0 || contents[contents.length - 1].role !== msg.role) { + contents.push(this.render(msg)); + } else { + contents[contents.length - 1].parts[0].text += msg.content; + } } const resp = await fetch(url, { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - }, - body: JSON.stringify({ contents }), + method: "POST", + headers: { + "Content-Type": "application/json" + }, + body: JSON.stringify({ contents }) }); const data = await resp.json(); try { - return data.candidates[0].content.parts[0].text; + return data.candidates[0].content.parts[0].text; } catch (e) { - console.error(e); - if (!data) { - throw new Error('Empty response'); - } - throw new Error(data?.error?.message || JSON.stringify(data)); + console.error(e); + if (!data) { + throw new Error("Empty response"); + } + throw new Error(data?.error?.message || JSON.stringify(data)); } + }; } -function isMistralAIEnable(context) { - return !!(context.USER_CONFIG.MISTRAL_API_KEY); -} -function renderMistralMessage(item) { +class Mistral { + name = "mistral"; + modelKey = "MISTRAL_API_KEY"; + enable = (context) => { + return !!context.MISTRAL_API_KEY; + }; + model = (ctx) => { + return ctx.MISTRAL_CHAT_MODEL; + }; + render = (item) => { return { - role: item.role, - content: item.content, + role: item.role, + content: item.content }; -} -async function requestCompletionsFromMistralAI(params, context, onStream) { + }; + request = async (params, context, onStream) => { const { message, prompt, history } = params; - const url = `${context.USER_CONFIG.MISTRAL_API_BASE}/chat/completions`; + const url = `${context.MISTRAL_API_BASE}/chat/completions`; const header = { - 'Content-Type': 'application/json', - 'Authorization': `Bearer ${context.USER_CONFIG.MISTRAL_API_KEY}`, + "Content-Type": "application/json", + "Authorization": `Bearer ${context.MISTRAL_API_KEY}` }; - const messages = [...(history || []), { role: 'user', content: message }]; + const messages = [...history || [], { role: "user", content: message }]; if (prompt) { - messages.unshift({ role: context.USER_CONFIG.SYSTEM_INIT_MESSAGE_ROLE, content: prompt }); + messages.unshift({ role: context.SYSTEM_INIT_MESSAGE_ROLE, content: prompt }); } const body = { - model: context.USER_CONFIG.MISTRAL_CHAT_MODEL, - messages: messages.map(renderMistralMessage), - stream: onStream != null, + model: context.MISTRAL_CHAT_MODEL, + messages: messages.map(this.render), + stream: onStream != null }; - return requestChatCompletions(url, header, body, context, onStream); + return requestChatCompletions(url, header, body, onStream); + }; } -function isCohereAIEnable(context) { - return !!(context.USER_CONFIG.COHERE_API_KEY); -} -const COHERE_ROLE_MAP = { - assistant: 'CHATBOT', - user: 'USER', -}; -function renderCohereMessage(item) { +class WorkerBase { + name = "workers"; + run = async (model, body, id, token) => { + return await fetch( + `https://api.cloudflare.com/client/v4/accounts/${id}/ai/run/${model}`, + { + headers: { Authorization: `Bearer ${token}` }, + method: "POST", + body: JSON.stringify(body) + } + ); + }; + enable = (context) => { + return !!(context.CLOUDFLARE_ACCOUNT_ID && context.CLOUDFLARE_TOKEN); + }; +} +class WorkersChat extends WorkerBase { + modelKey = "WORKERS_CHAT_MODEL"; + model = (ctx) => { + return ctx.WORKERS_CHAT_MODEL; + }; + render = (item) => { return { - role: COHERE_ROLE_MAP[item.role], - content: item.content, - }; -} -async function requestCompletionsFromCohereAI(params, context, onStream) { - const { message, prompt, history } = params; - const url = `${context.USER_CONFIG.COHERE_API_BASE}/chat`; - const header = { - 'Authorization': `Bearer ${context.USER_CONFIG.COHERE_API_KEY}`, - 'Content-Type': 'application/json', - 'Accept': onStream !== null ? 'text/event-stream' : 'application/json', - }; - const body = { - message, - model: context.USER_CONFIG.COHERE_CHAT_MODEL, - stream: onStream != null, - preamble: prompt, - chat_history: history.map(renderCohereMessage), - }; - if (!body.preamble) { - delete body.preamble; - } - const options = {}; - options.streamBuilder = function (r, c) { - return new Stream(r, c, null, cohereSseJsonParser); - }; - options.contentExtractor = function (data) { - return data?.text; - }; - options.fullContentExtractor = function (data) { - return data?.text; - }; - options.errorExtractor = function (data) { - return data?.message; - }; - return requestChatCompletions(url, header, body, context, onStream, null, options); -} - -function isAnthropicAIEnable(context) { - return !!(context.USER_CONFIG.ANTHROPIC_API_KEY); -} -async function renderAnthropicMessage(item) { - const res = { - role: item.role, - content: item.content, - }; - if (item.images && item.images.length > 0) { - res.content = []; - if (item.content) { - res.content.push({ type: 'text', text: item.content }); - } - for (const image of item.images) { - res.content.push(await imageToBase64String(image).then(({ format, data }) => { - return { type: 'image', source: { type: 'base64', media_type: format, data } }; - })); - } - } - return res; -} -async function requestCompletionsFromAnthropicAI(params, context, onStream) { - const { message, images, prompt, history } = params; - const url = `${context.USER_CONFIG.ANTHROPIC_API_BASE}/messages`; - const header = { - 'x-api-key': context.USER_CONFIG.ANTHROPIC_API_KEY, - 'anthropic-version': '2023-06-01', - 'content-type': 'application/json', - }; - const messages = ([...(history || []), { role: 'user', content: message, images }]); - if (messages.length > 0 && messages[0].role === 'assistant') { - messages.shift(); - } - const body = { - system: prompt, - model: context.USER_CONFIG.ANTHROPIC_CHAT_MODEL, - messages: await Promise.all(messages.map(renderAnthropicMessage)), - stream: onStream != null, - max_tokens: ENV.MAX_TOKEN_LENGTH > 0 ? ENV.MAX_TOKEN_LENGTH : 2048, - }; - if (!body.system) { - delete body.system; - } - const options = {}; - options.streamBuilder = function (r, c) { - return new Stream(r, c, null, anthropicSseJsonParser); - }; - options.contentExtractor = function (data) { - return data?.delta?.text; - }; - options.fullContentExtractor = function (data) { - return data?.content?.[0].text; - }; - options.errorExtractor = function (data) { - return data?.error?.message; - }; - return requestChatCompletions(url, header, body, context, onStream, null, options); -} - -function azureKeyFromContext(context) { - return context.USER_CONFIG.AZURE_API_KEY; -} -function isAzureEnable(context) { - return !!(context.USER_CONFIG.AZURE_API_KEY && context.USER_CONFIG.AZURE_COMPLETIONS_API); -} -function isAzureImageEnable(context) { - return !!(context.USER_CONFIG.AZURE_API_KEY && context.USER_CONFIG.AZURE_DALLE_API); -} -async function requestCompletionsFromAzureOpenAI(params, context, onStream) { - const { message, images, prompt, history } = params; - const url = context.USER_CONFIG.AZURE_COMPLETIONS_API; + role: item.role, + content: item.content + }; + }; + request = async (params, context, onStream) => { + const { message, prompt, history } = params; + const id = context.CLOUDFLARE_ACCOUNT_ID; + const token = context.CLOUDFLARE_TOKEN; + const model = context.WORKERS_CHAT_MODEL; + const url = `https://api.cloudflare.com/client/v4/accounts/${id}/ai/run/${model}`; const header = { - 'Content-Type': 'application/json', - 'api-key': azureKeyFromContext(context), + Authorization: `Bearer ${token}` }; - const messages = [...(history || []), { role: 'user', content: message, images }]; + const messages = [...history || [], { role: "user", content: message }]; if (prompt) { - messages.unshift({ role: context.USER_CONFIG.SYSTEM_INIT_MESSAGE_ROLE, content: prompt }); + messages.unshift({ role: context.SYSTEM_INIT_MESSAGE_ROLE, content: prompt }); } const body = { - ...context.USER_CONFIG.OPENAI_API_EXTRA_PARAMS, - messages: await Promise.all(messages.map(renderOpenAIMessage)), - stream: onStream != null, + messages: messages.map(this.render), + stream: onStream !== null }; - return requestChatCompletions(url, header, body, context, onStream); -} -async function requestImageFromAzureOpenAI(prompt, context) { - const url = context.USER_CONFIG.AZURE_DALLE_API; - const header = { - 'Content-Type': 'application/json', - 'api-key': azureKeyFromContext(context), + const options = {}; + options.contentExtractor = function(data) { + return data?.response; }; - const body = { - prompt, - n: 1, - size: context.USER_CONFIG.DALL_E_IMAGE_SIZE, - style: context.USER_CONFIG.DALL_E_IMAGE_STYLE, - quality: context.USER_CONFIG.DALL_E_IMAGE_QUALITY, + options.fullContentExtractor = function(data) { + return data?.result?.response; }; - const validSize = ['1792x1024', '1024x1024', '1024x1792']; - if (!validSize.includes(body.size)) { - body.size = '1024x1024'; - } - const resp = await fetch(url, { - method: 'POST', - headers: header, - body: JSON.stringify(body), - }).then(res => res.json()); - if (resp.error?.message) { - throw new Error(resp.error.message); - } - return resp?.data?.[0]?.url; + options.errorExtractor = function(data) { + return data?.errors?.[0]?.message; + }; + return requestChatCompletions(url, header, body, onStream, null, options); + }; +} +class WorkersImage extends WorkerBase { + modelKey = "WORKERS_IMAGE_MODEL"; + model = (ctx) => { + return ctx.WORKERS_IMAGE_MODEL; + }; + request = async (prompt, context) => { + const id = context.CLOUDFLARE_ACCOUNT_ID; + const token = context.CLOUDFLARE_TOKEN; + if (!id || !token) { + throw new Error("Cloudflare account ID or token is not set"); + } + const raw = await this.run(context.WORKERS_IMAGE_MODEL, { prompt }, id, token); + return await raw.blob(); + }; } -const chatLlmAgents = [ - { - name: 'azure', - enable: isAzureEnable, - request: requestCompletionsFromAzureOpenAI, - }, - { - name: 'openai', - enable: isOpenAIEnable, - request: requestCompletionsFromOpenAI, - }, - { - name: 'workers', - enable: isWorkersAIEnable, - request: requestCompletionsFromWorkersAI, - }, - { - name: 'gemini', - enable: isGeminiAIEnable, - request: requestCompletionsFromGeminiAI, - }, - { - name: 'mistral', - enable: isMistralAIEnable, - request: requestCompletionsFromMistralAI, - }, - { - name: 'cohere', - enable: isCohereAIEnable, - request: requestCompletionsFromCohereAI, - }, - { - name: 'anthropic', - enable: isAnthropicAIEnable, - request: requestCompletionsFromAnthropicAI, - }, +const CHAT_AGENTS = [ + new Anthropic(), + new AzureChatAI(), + new Cohere(), + new Gemini(), + new Mistral(), + new OpenAI(), + new WorkersChat() ]; -function currentChatModel(agentName, context) { - switch (agentName) { - case 'azure': - try { - const url = new URL(context.USER_CONFIG.AZURE_COMPLETIONS_API); - return url.pathname.split('/')[3]; - } catch { - return context.USER_CONFIG.AZURE_COMPLETIONS_API; - } - case 'openai': - return context.USER_CONFIG.OPENAI_CHAT_MODEL; - case 'workers': - return context.USER_CONFIG.WORKERS_CHAT_MODEL; - case 'gemini': - return context.USER_CONFIG.GOOGLE_COMPLETIONS_MODEL; - case 'mistral': - return context.USER_CONFIG.MISTRAL_CHAT_MODEL; - case 'cohere': - return context.USER_CONFIG.COHERE_CHAT_MODEL; - case 'anthropic': - return context.USER_CONFIG.ANTHROPIC_CHAT_MODEL; - default: - return null; - } -} -function chatModelKey(agentName) { - switch (agentName) { - case 'azure': - return 'AZURE_COMPLETIONS_API'; - case 'openai': - return 'OPENAI_CHAT_MODEL'; - case 'workers': - return 'WORKERS_CHAT_MODEL'; - case 'gemini': - return 'GOOGLE_COMPLETIONS_MODEL'; - case 'mistral': - return 'MISTRAL_CHAT_MODEL'; - case 'cohere': - return 'COHERE_CHAT_MODEL'; - case 'anthropic': - return 'ANTHROPIC_CHAT_MODEL'; - default: - return null; - } -} function loadChatLLM(context) { - for (const llm of chatLlmAgents) { - if (llm.name === context.USER_CONFIG.AI_PROVIDER) { - return llm; - } + for (const llm of CHAT_AGENTS) { + if (llm.name === context.AI_PROVIDER) { + return llm; } - for (const llm of chatLlmAgents) { - if (llm.enable(context)) { - return llm; - } + } + for (const llm of CHAT_AGENTS) { + if (llm.enable(context)) { + return llm; } - return null; + } + return null; } -const imageGenAgents = [ - { - name: 'azure', - enable: isAzureImageEnable, - request: requestImageFromAzureOpenAI, - }, - { - name: 'openai', - enable: isOpenAIEnable, - request: requestImageFromOpenAI, - }, - { - name: 'workers', - enable: isWorkersAIEnable, - request: requestImageFromWorkersAI, - }, +const IMAGE_AGENTS = [ + new AzureImageAI(), + new Dalle(), + new WorkersImage() ]; function loadImageGen(context) { - for (const imgGen of imageGenAgents) { - if (imgGen.name === context.USER_CONFIG.AI_IMAGE_PROVIDER) { - return imgGen; - } + for (const imgGen of IMAGE_AGENTS) { + if (imgGen.name === context.AI_IMAGE_PROVIDER) { + return imgGen; + } + } + for (const imgGen of IMAGE_AGENTS) { + if (imgGen.enable(context)) { + return imgGen; } - for (const imgGen of imageGenAgents) { - if (imgGen.enable(context)) { - return imgGen; + } + return null; +} + +function tokensCounter() { + return (text) => { + return text.length; + }; +} +async function loadHistory(key) { + let history = []; + try { + history = JSON.parse(await ENV.DATABASE.get(key)); + } catch (e) { + console.error(e); + } + if (!history || !Array.isArray(history)) { + history = []; + } + const counter = tokensCounter(); + const trimHistory = (list, initLength, maxLength, maxToken) => { + if (maxLength >= 0 && list.length > maxLength) { + list = list.splice(list.length - maxLength); + } + if (maxToken > 0) { + let tokenLength = initLength; + for (let i = list.length - 1; i >= 0; i--) { + const historyItem = list[i]; + let length = 0; + if (historyItem.content) { + length = counter(historyItem.content); + } else { + historyItem.content = ""; } + tokenLength += length; + if (tokenLength > maxToken) { + list = list.splice(i + 1); + break; + } + } } - return null; + return list; + }; + if (ENV.AUTO_TRIM_HISTORY && ENV.MAX_HISTORY_LENGTH > 0) { + history = trimHistory(history, 0, ENV.MAX_HISTORY_LENGTH, ENV.MAX_TOKEN_LENGTH); + } + return history; } -function currentImageModel(agentName, context) { - switch (agentName) { - case 'azure': - try { - const url = new URL(context.USER_CONFIG.AZURE_DALLE_API); - return url.pathname.split('/')[3]; - } catch { - return context.USER_CONFIG.AZURE_DALLE_API; - } - case 'openai': - return context.USER_CONFIG.DALL_E_MODEL; - case 'workers': - return context.USER_CONFIG.WORKERS_IMAGE_MODEL; - default: - return null; +async function requestCompletionsFromLLM(params, context, agent, modifier, onStream) { + const historyDisable = ENV.AUTO_TRIM_HISTORY && ENV.MAX_HISTORY_LENGTH <= 0; + const historyKey = context.SHARE_CONTEXT.chatHistoryKey; + if (!historyKey) { + throw new Error("History key not found"); + } + let history = await loadHistory(historyKey); + if (modifier) { + const modifierData = modifier(history, params.message || null); + history = modifierData.history; + params.message = modifierData.message; + } + const llmParams = { + ...params, + history, + prompt: context.USER_CONFIG.SYSTEM_INIT_MESSAGE + }; + const answer = await agent.request(llmParams, context.USER_CONFIG, onStream); + if (!historyDisable) { + const userMessage = { role: "user", content: params.message || "", images: params.images }; + if (ENV.HISTORY_IMAGE_PLACEHOLDER && userMessage.images && userMessage.images.length > 0) { + delete userMessage.images; + userMessage.content = `${ENV.HISTORY_IMAGE_PLACEHOLDER} +${userMessage.content}`; + } + history.push(userMessage); + history.push({ role: "assistant", content: answer }); + await ENV.DATABASE.put(historyKey, JSON.stringify(history)).catch(console.error); + } + return answer; +} + +class APIClientBase { + token; + baseURL = ENV.TELEGRAM_API_DOMAIN; + constructor(token, baseURL) { + this.token = token; + if (baseURL) { + this.baseURL = baseURL; + } + } + jsonRequest(method, params) { + return fetch(`${this.baseURL}/bot${this.token}/${method}`, { + method: "POST", + headers: { + "Content-Type": "application/json" + }, + body: JSON.stringify(params) + }); + } + formDataRequest(method, params) { + const formData = new FormData(); + for (const key in params) { + const value = params[key]; + if (value instanceof File) { + formData.append(key, value, value.name); + } else if (value instanceof Blob) { + formData.append(key, value, "blob"); + } else if (typeof value === "string") { + formData.append(key, value); + } else { + formData.append(key, JSON.stringify(value)); + } } + return fetch(`${this.baseURL}bot${this.token}/${method}`, { + method: "POST", + body: formData + }); + } + request(method, params) { + for (const key in params) { + if (params[key] instanceof File || params[key] instanceof Blob) { + return this.formDataRequest(method, params); + } + } + return this.jsonRequest(method, params); + } + async requestJSON(method, params) { + return this.request(method, params).then((res) => res.json()); + } } -function imageModelKey(agentName) { - switch (agentName) { - case 'azure': - return 'AZURE_DALLE_API'; - case 'openai': - return 'DALL_E_MODEL'; - case 'workers': - return 'WORKERS_IMAGE_MODEL'; - default: - return null; +function createTelegramBotAPI(token) { + const client = new APIClientBase(token); + return new Proxy(client, { + get(target, prop, receiver) { + if (prop in target) { + return Reflect.get(target, prop, receiver); + } + return (...args) => { + if (typeof prop === "string" && prop.endsWith("WithReturns")) { + const method = prop.slice(0, -11); + return Reflect.apply(target.requestJSON, target, [method, ...args]); + } + return Reflect.apply(target.request, target, [prop, ...args]); + }; } + }); } -function tokensCounter() { - return (text) => { - return text.length; +class MessageContext { + chat_id; + message_id = null; + reply_to_message_id; + parse_mode = null; + allow_sending_without_reply = null; + disable_web_page_preview = null; + constructor(message) { + this.chat_id = message.chat.id; + if (message.chat.type === "group" || message.chat.type === "supergroup") { + this.reply_to_message_id = message.message_id; + this.allow_sending_without_reply = true; + } else { + this.reply_to_message_id = null; + } + } +} +class MessageSender { + api; + context; + constructor(token, context) { + this.api = createTelegramBotAPI(token); + this.context = context; + } + static from(token, message) { + return new MessageSender(token, new MessageContext(message)); + } + with(message) { + this.context = new MessageContext(message); + return this; + } + update(context) { + if (!this.context) { + this.context = context; + return this; + } + for (const key in context) { + this.context[key] = context[key]; + } + return this; + } + async sendMessage(message, context) { + if (context?.message_id) { + const params = { + chat_id: context.chat_id, + message_id: context.message_id, + parse_mode: context.parse_mode || void 0, + text: message + }; + if (context.disable_web_page_preview) { + params.link_preview_options = { + is_disabled: true + }; + } + return this.api.editMessageText(params); + } else { + const params = { + chat_id: context.chat_id, + parse_mode: context.parse_mode || void 0, + text: message + }; + if (context.reply_to_message_id) { + params.reply_parameters = { + message_id: context.reply_to_message_id, + chat_id: context.chat_id, + allow_sending_without_reply: context.allow_sending_without_reply || void 0 + }; + } + if (context.disable_web_page_preview) { + params.link_preview_options = { + is_disabled: true + }; + } + return this.api.sendMessage(params); + } + } + async sendLongMessage(message, context) { + const chatContext = { ...context }; + const originMessage = message; + const limit = 4096; + if (message.length <= limit) { + const resp = await this.sendMessage(message, chatContext); + if (resp.status === 200) { + return resp; + } else { + message = originMessage; + chatContext.parse_mode = null; + return await this.sendMessage(message, chatContext); + } + } + message = originMessage; + chatContext.parse_mode = null; + let lastMessageResponse = null; + for (let i = 0; i < message.length; i += limit) { + const msg = message.slice(i, Math.min(i + limit, message.length)); + if (i > 0) { + chatContext.message_id = null; + } + lastMessageResponse = await this.sendMessage(msg, chatContext); + if (lastMessageResponse.status !== 200) { + break; + } + } + if (lastMessageResponse === null) { + throw new Error("Send message failed"); + } + return lastMessageResponse; + } + sendRichText(message, parseMode = ENV.DEFAULT_PARSE_MODE) { + if (!this.context) { + throw new Error("Message context not set"); + } + return this.sendLongMessage(message, { + ...this.context, + parse_mode: parseMode + }); + } + sendPlainText(message) { + if (!this.context) { + throw new Error("Message context not set"); + } + return this.sendLongMessage(message, { + ...this.context, + parse_mode: null + }); + } + sendPhoto(photo) { + if (!this.context) { + throw new Error("Message context not set"); + } + const params = { + chat_id: this.context.chat_id, + photo }; + if (this.context.reply_to_message_id) { + params.reply_parameters = { + message_id: this.context.reply_to_message_id, + chat_id: this.context.chat_id, + allow_sending_without_reply: this.context.allow_sending_without_reply || void 0 + }; + } + return this.api.sendPhoto(params); + } } -async function loadHistory(key) { - let history = []; + +async function chatWithLLM(message, params, context, modifier) { + const sender = MessageSender.from(context.SHARE_CONTEXT.botToken, message); + try { try { - history = JSON.parse(await DATABASE.get(key)); + const msg = await sender.sendPlainText("...").then((r) => r.json()); + sender.update({ + message_id: msg.result.message_id + }); } catch (e) { - console.error(e); - } - if (!history || !Array.isArray(history)) { - history = []; + console.error(e); } - const counter = tokensCounter(); - const trimHistory = (list, initLength, maxLength, maxToken) => { - if (maxLength >= 0 && list.length > maxLength) { - list = list.splice(list.length - maxLength); - } - if (maxToken > 0) { - let tokenLength = initLength; - for (let i = list.length - 1; i >= 0; i--) { - const historyItem = list[i]; - let length = 0; - if (historyItem.content) { - length = counter(historyItem.content); - } else { - historyItem.content = ''; - } - tokenLength += length; - if (tokenLength > maxToken) { - list = list.splice(i + 1); - break; - } + const api = createTelegramBotAPI(context.SHARE_CONTEXT.botToken); + setTimeout(() => api.sendChatAction({ + chat_id: message.chat.id, + action: "typing" + }).catch(console.error), 0); + let onStream = null; + let nextEnableTime = null; + if (ENV.STREAM_MODE) { + onStream = async (text) => { + try { + if (nextEnableTime && nextEnableTime > Date.now()) { + return; + } + const resp = await sender.sendPlainText(text); + if (resp.status === 429) { + const retryAfter = Number.parseInt(resp.headers.get("Retry-After") || ""); + if (retryAfter) { + nextEnableTime = Date.now() + retryAfter * 1e3; + return; } + } + nextEnableTime = null; + if (resp.ok) { + const respJson = await resp.json(); + sender.update({ + message_id: respJson.result.message_id + }); + } + } catch (e) { + console.error(e); } - return list; - }; - if (ENV.AUTO_TRIM_HISTORY && ENV.MAX_HISTORY_LENGTH > 0) { - history = trimHistory(history, 0, ENV.MAX_HISTORY_LENGTH, ENV.MAX_TOKEN_LENGTH); - } - return history; -} -async function requestCompletionsFromLLM(params, context, llm, modifier, onStream) { - const historyDisable = ENV.AUTO_TRIM_HISTORY && ENV.MAX_HISTORY_LENGTH <= 0; - const historyKey = context.SHARE_CONTEXT.chatHistoryKey; - let history = await loadHistory(historyKey); - if (modifier) { - const modifierData = modifier(history, params.message); - history = modifierData.history; - params.message = modifierData.message; - } - const llmParams = { - ...params, - history, - prompt: context.USER_CONFIG.SYSTEM_INIT_MESSAGE, + }; + } + const agent = loadChatLLM(context.USER_CONFIG); + if (agent === null) { + return sender.sendPlainText("LLM is not enable"); + } + const answer = await requestCompletionsFromLLM(params, context, agent, modifier, onStream); + if (nextEnableTime !== null && nextEnableTime > Date.now()) { + await new Promise((resolve) => setTimeout(resolve, (nextEnableTime ?? 0) - Date.now())); + } + return sender.sendRichText(answer); + } catch (e) { + let errMsg = `Error: ${e.message}`; + if (errMsg.length > 2048) { + errMsg = errMsg.substring(0, 2048); + } + return sender.sendPlainText(errMsg); + } +} +function findPhotoFileID(photos, offset) { + let sizeIndex = 0; + if (offset >= 0) { + sizeIndex = offset; + } else if (offset < 0) { + sizeIndex = photos.length + offset; + } + sizeIndex = Math.max(0, Math.min(sizeIndex, photos.length - 1)); + return photos[sizeIndex].file_id; +} +class ChatHandler { + handle = async (message, context) => { + const params = { + message: message.text || message.caption || "" }; - const answer = await llm(llmParams, context, onStream); - if (!historyDisable) { - const userMessage = { role: 'user', content: params.message || '', images: params.images }; - if (ENV.HISTORY_IMAGE_PLACEHOLDER && userMessage.images && userMessage.images.length > 0) { - delete userMessage.images; - userMessage.content = `${ENV.HISTORY_IMAGE_PLACEHOLDER}\n${userMessage.content}`; + if (message.photo && message.photo.length > 0) { + const id = findPhotoFileID(message.photo, ENV.TELEGRAM_PHOTO_SIZE_OFFSET); + const api = createTelegramBotAPI(context.SHARE_CONTEXT.botToken); + const file = await api.getFileWithReturns({ file_id: id }); + let url = file.result.file_path; + if (url) { + if (ENV.TELEGRAPH_ENABLE) { + url = await uploadImageToTelegraph(url); } - history.push(userMessage); - history.push({ role: 'assistant', content: answer }); - await DATABASE.put(historyKey, JSON.stringify(history)).catch(console.error); + params.images = [url]; + } } - return answer; + return chatWithLLM(message, params, context, null); + }; } -async function chatWithLLM(params, context, modifier) { - try { - try { - const msg = await sendMessageToTelegramWithContext(context)('...').then(r => r.json()); - context.CURRENT_CHAT_CONTEXT.message_id = msg.result.message_id; - context.CURRENT_CHAT_CONTEXT.reply_markup = null; - } catch (e) { - console.error(e); - } - setTimeout(() => sendChatActionToTelegramWithContext(context)('typing').catch(console.error), 0); - let onStream = null; - const parseMode = context.CURRENT_CHAT_CONTEXT.parse_mode; - let nextEnableTime = null; - if (ENV.STREAM_MODE) { - context.CURRENT_CHAT_CONTEXT.parse_mode = null; - onStream = async (text) => { - try { - if (nextEnableTime && nextEnableTime > Date.now()) { - return; - } - const resp = await sendMessageToTelegramWithContext(context)(text); - if (resp.status === 429) { - const retryAfter = Number.parseInt(resp.headers.get('Retry-After')); - if (retryAfter) { - nextEnableTime = Date.now() + retryAfter * 1000; - return; - } - } - nextEnableTime = null; - if (resp.ok) { - context.CURRENT_CHAT_CONTEXT.message_id = (await resp.json()).result.message_id; - } - } catch (e) { - console.error(e); - } - }; - } - const llm = loadChatLLM(context)?.request; - if (llm === null) { - return sendMessageToTelegramWithContext(context)('LLM is not enable'); +function isTelegramChatTypeGroup(type) { + return type === "group" || type === "supergroup"; +} + +function checkMention(content, entities, botName, botId) { + let isMention = false; + for (const entity of entities) { + const entityStr = content.slice(entity.offset, entity.offset + entity.length); + switch (entity.type) { + case "mention": + if (entityStr === `@${botName}`) { + isMention = true; + content = content.slice(0, entity.offset) + content.slice(entity.offset + entity.length); } - const answer = await requestCompletionsFromLLM(params, context, llm, modifier, onStream); - context.CURRENT_CHAT_CONTEXT.parse_mode = parseMode; - if (nextEnableTime && nextEnableTime > Date.now()) { - await new Promise(resolve => setTimeout(resolve, nextEnableTime - Date.now())); + break; + case "text_mention": + if (`${entity.user?.id}` === `${botId}`) { + isMention = true; + content = content.slice(0, entity.offset) + content.slice(entity.offset + entity.length); } - return sendMessageToTelegramWithContext(context)(answer); - } catch (e) { - let errMsg = `Error: ${e.message}`; - if (errMsg.length > 2048) { - errMsg = errMsg.substring(0, 2048); + break; + case "bot_command": + if (entityStr.endsWith(`@${botName}`)) { + isMention = true; + const newEntityStr = entityStr.replace(`@${botName}`, ""); + content = content.slice(0, entity.offset) + newEntityStr + content.slice(entity.offset + entity.length); } - context.CURRENT_CHAT_CONTEXT.disable_web_page_preview = true; - return sendMessageToTelegramWithContext(context)(errMsg); + break; } + } + return { + isMention, + content + }; } - -function checkMention(content, entities, botName, botId) { +class GroupMention { + handle = async (message, context) => { + if (!isTelegramChatTypeGroup(message.chat.type)) { + return null; + } + const replyMe = `${message.reply_to_message?.from?.id}` === `${context.SHARE_CONTEXT.botId}`; + if (replyMe) { + return null; + } + let botName = context.SHARE_CONTEXT.botName; + if (!botName) { + const res = await createTelegramBotAPI(context.SHARE_CONTEXT.botToken).getMeWithReturns(); + botName = res.result.username || null; + context.SHARE_CONTEXT.botName = botName; + } + if (!botName) { + throw new Error("Not set bot name"); + } let isMention = false; - for (const entity of entities) { - const entityStr = content.slice(entity.offset, entity.offset + entity.length); - switch (entity.type) { - case 'mention': - if (entityStr === `@${botName}`) { - isMention = true; - content = content.slice(0, entity.offset) + content.slice(entity.offset + entity.length); - } - break; - case 'text_mention': - if (`${entity.user.id}` === `${botId}`) { - isMention = true; - content = content.slice(0, entity.offset) + content.slice(entity.offset + entity.length); - } - break; - case 'bot_command': - if (entityStr.endsWith(`@${botName}`)) { - isMention = true; - const newEntityStr = entityStr.replace(`@${botName}`, ''); - content = content.slice(0, entity.offset) + newEntityStr + content.slice(entity.offset + entity.length); - } - break; - } + if (message.text && message.entities) { + const res = checkMention(message.text, message.entities, botName, context.SHARE_CONTEXT.botId); + isMention = res.isMention; + message.text = res.content.trim(); } - return { - isMention, - content, - }; + if (message.caption && message.caption_entities) { + const res = checkMention(message.caption, message.caption_entities, botName, context.SHARE_CONTEXT.botId); + isMention = res.isMention || isMention; + message.caption = res.content.trim(); + } + if (!isMention) { + throw new Error("Not mention"); + } + if (ENV.EXTRA_MESSAGE_CONTEXT && !replyMe && message.reply_to_message && message.reply_to_message.text) { + if (message.text) { + message.text = `${message.reply_to_message.text} +${message.text}`; + } + } + return null; + }; } -function findPhotoFileID(photos, offset) { - let sizeIndex = 0; - if (offset >= 0) { - sizeIndex = offset; - } else if (offset < 0) { - sizeIndex = photos.length + offset; - } - sizeIndex = Math.max(0, Math.min(sizeIndex, photos.length - 1)); - return photos[sizeIndex].file_id; -}async function getChatRoleWithContext(context) { - const { - chatId, - speakerId, - groupAdminKey, - currentBotToken: token, - allMemberAreAdmin, - } = context.SHARE_CONTEXT; - if (allMemberAreAdmin) { - return 'administrator'; - } - let groupAdmin; - try { - groupAdmin = JSON.parse(await DATABASE.get(groupAdminKey)); - } catch (e) { - console.error(e); + +const INTERPOLATE_LOOP_REGEXP = /\{\{#each(?::(\w+))?\s+(\w+)\s+in\s+([\w.[\]]+)\}\}([\s\S]*?)\{\{\/each(?::\1)?\}\}/g; +const INTERPOLATE_CONDITION_REGEXP = /\{\{#if(?::(\w+))?\s+([\w.[\]]+)\}\}([\s\S]*?)(?:\{\{#else(?::\1)?\}\}([\s\S]*?))?\{\{\/if(?::\1)?\}\}/g; +const INTERPOLATE_VARIABLE_REGEXP = /\{\{([\w.[\]]+)\}\}/g; +function evaluateExpression(expr, localData) { + if (expr === ".") { + return localData["."] ?? localData; + } + try { + return expr.split(".").reduce((value, key) => { + if (key.includes("[") && key.includes("]")) { + const [arrayKey, indexStr] = key.split("["); + const indexExpr = indexStr.slice(0, -1); + let index = Number.parseInt(indexExpr, 10); + if (Number.isNaN(index)) { + index = evaluateExpression(indexExpr, localData); + } + return value?.[arrayKey]?.[index]; + } + return value?.[key]; + }, localData); + } catch (error) { + console.error(`Error evaluating expression: ${expr}`, error); + return void 0; + } +} +function interpolate(template, data, formatter = null) { + const processConditional = (condition, trueBlock, falseBlock, localData) => { + const result = evaluateExpression(condition, localData); + return result ? trueBlock : falseBlock || ""; + }; + const processLoop = (itemName, arrayExpr, loopContent, localData) => { + const array = evaluateExpression(arrayExpr, localData); + if (!Array.isArray(array)) { + console.warn(`Expression "${arrayExpr}" did not evaluate to an array`); + return ""; + } + return array.map((item) => { + const itemData = { ...localData, [itemName]: item, ".": item }; + return interpolate(loopContent, itemData); + }).join(""); + }; + const processTemplate = (tmpl, localData) => { + tmpl = tmpl.replace(INTERPOLATE_LOOP_REGEXP, (_, alias, itemName, arrayExpr, loopContent) => processLoop(itemName, arrayExpr, loopContent, localData)); + tmpl = tmpl.replace(INTERPOLATE_CONDITION_REGEXP, (_, alias, condition, trueBlock, falseBlock) => processConditional(condition, trueBlock, falseBlock, localData)); + return tmpl.replace(INTERPOLATE_VARIABLE_REGEXP, (_, expr) => { + const value = evaluateExpression(expr, localData); + if (value === void 0) { + return `{{${expr}}}`; + } + if (formatter) { + return formatter(value); + } + return String(value); + }); + }; + return processTemplate(template, data); +} + +function interpolateObject(obj, data) { + if (obj === null || obj === void 0) { + return null; + } + if (typeof obj === "string") { + return interpolate(obj, data); + } + if (Array.isArray(obj)) { + return obj.map((item) => interpolateObject(item, data)); + } + if (typeof obj === "object") { + const result = {}; + for (const [key, value] of Object.entries(obj)) { + result[key] = interpolateObject(value, data); } - if (!groupAdmin || !Array.isArray(groupAdmin) || groupAdmin.length === 0) { - const { result } = await getChatAdministrators(chatId, token); - if (result == null) { - return null; - } - groupAdmin = result; - await DATABASE.put( - groupAdminKey, - JSON.stringify(groupAdmin), - { expiration: (Date.now() / 1000) + 120 }, - ); - } - for (let i = 0; i < groupAdmin.length; i++) { - const user = groupAdmin[i]; - if (`${user.user.id}` === `${speakerId}`) { - return user.status; - } + return result; + } + return obj; +} +async function executeRequest(template, data) { + const urlRaw = interpolate(template.url, data, encodeURIComponent); + const url = new URL(urlRaw); + if (template.query) { + for (const [key, value] of Object.entries(template.query)) { + url.searchParams.append(key, interpolate(value, data)); + } + } + const method = template.method; + const headers = Object.fromEntries( + Object.entries(template.headers || {}).map(([key, value]) => { + return [key, interpolate(value, data)]; + }) + ); + for (const key of Object.keys(headers)) { + if (headers[key] === null) { + delete headers[key]; + } + } + let body = null; + if (template.body) { + if (template.body.type === "json") { + body = JSON.stringify(interpolateObject(template.body.content, data)); + } else if (template.body.type === "form") { + body = new URLSearchParams(); + for (const [key, value] of Object.entries(template.body.content)) { + body.append(key, interpolate(value, data)); + } + } else { + body = interpolate(template.body.content, data); } - return 'member'; + } + const response = await fetch(url, { + method, + headers, + body + }); + const renderOutput = async (type, temple, response2) => { + switch (type) { + case "text": + return interpolate(temple, await response2.text()); + case "json": + default: + return interpolate(temple, await response2.json()); + } + }; + if (!response.ok) { + const content2 = await renderOutput(template.response?.error?.input_type, template.response.error?.output, response); + return { + type: template.response.error.output_type, + content: content2 + }; + } + const content = await renderOutput(template.response.content?.input_type, template.response.content?.output, response); + return { + type: template.response.content.output_type, + content + }; +} +function formatInput(input, type) { + if (type === "json") { + return JSON.parse(input); + } else if (type === "space-separated") { + return input.split(/\s+/); + } else if (type === "comma-separated") { + return input.split(/\s*,\s*/); + } else { + return input; + } } -const commandAuthCheck = { - default(chatType) { - if (CONST.GROUP_TYPES.includes(chatType)) { - return ['administrator', 'creator']; - } - return null; - }, - shareModeGroup(chatType) { - if (CONST.GROUP_TYPES.includes(chatType)) { - if (!ENV.GROUP_CHAT_BOT_SHARE_MODE) { - return false; - } - return ['administrator', 'creator']; - } +const COMMAND_AUTH_CHECKER = { + default(chatType) { + if (isTelegramChatTypeGroup(chatType)) { + return ["administrator", "creator"]; + } + return null; + }, + shareModeGroup(chatType) { + if (isTelegramChatTypeGroup(chatType)) { + if (!ENV.GROUP_CHAT_BOT_SHARE_MODE) { return null; - }, -}; -const commandSortList = [ - '/new', - '/redo', - '/img', - '/setenv', - '/delenv', - '/version', - '/system', - '/help', -]; -const commandHandlers = { - '/help': { - scopes: ['all_private_chats', 'all_chat_administrators'], - fn: commandGetHelp, - }, - '/new': { - scopes: ['all_private_chats', 'all_group_chats', 'all_chat_administrators'], - fn: commandCreateNewChatContext, - }, - '/start': { - scopes: [], - fn: commandCreateNewChatContext, - }, - '/img': { - scopes: ['all_private_chats', 'all_chat_administrators'], - fn: commandGenerateImg, - }, - '/version': { - scopes: ['all_private_chats', 'all_chat_administrators'], - fn: commandFetchUpdate, - }, - '/setenv': { - scopes: [], - fn: commandUpdateUserConfig, - needAuth: commandAuthCheck.shareModeGroup, - }, - '/setenvs': { - scopes: [], - fn: commandUpdateUserConfigs, - needAuth: commandAuthCheck.shareModeGroup, - }, - '/delenv': { - scopes: [], - fn: commandDeleteUserConfig, - needAuth: commandAuthCheck.shareModeGroup, - }, - '/clearenv': { - scopes: [], - fn: commandClearUserConfig, - needAuth: commandAuthCheck.shareModeGroup, - }, - '/system': { - scopes: ['all_private_chats', 'all_chat_administrators'], - fn: commandSystem, - needAuth: commandAuthCheck.default, - }, - '/redo': { - scopes: ['all_private_chats', 'all_group_chats', 'all_chat_administrators'], - fn: commandRegenerate, - }, + } + return ["administrator", "creator"]; + } + return null; + } }; -async function commandGenerateImg(message, command, subcommand, context) { - if (subcommand === '') { - return sendMessageToTelegramWithContext(context)(ENV.I18N.command.help.img); +class ImgCommandHandler { + command = "/img"; + scopes = ["all_private_chats", "all_chat_administrators"]; + handle = async (message, subcommand, context) => { + const sender = MessageSender.from(context.SHARE_CONTEXT.botToken, message); + if (subcommand === "") { + return sender.sendPlainText(ENV.I18N.command.help.img); } try { - const gen = loadImageGen(context)?.request; - if (!gen) { - return sendMessageToTelegramWithContext(context)('ERROR: Image generator not found'); - } - setTimeout(() => sendChatActionToTelegramWithContext(context)('upload_photo').catch(console.error), 0); - const img = await gen(subcommand, context); - const resp = await sendPhotoToTelegramWithContext(context)(img); - if (!resp.ok) { - return sendMessageToTelegramWithContext(context)(`ERROR: ${resp.statusText} ${await resp.text()}`); - } - return resp; + const api = createTelegramBotAPI(context.SHARE_CONTEXT.botToken); + const agent = loadImageGen(context.USER_CONFIG); + if (!agent) { + return sender.sendPlainText("ERROR: Image generator not found"); + } + setTimeout(() => api.sendChatAction({ + chat_id: message.chat.id, + action: "upload_photo" + }).catch(console.error), 0); + const img = await agent.request(subcommand, context.USER_CONFIG); + const resp = await sender.sendPhoto(img); + if (!resp.ok) { + return sender.sendPlainText(`ERROR: ${resp.statusText} ${await resp.text()}`); + } + return resp; } catch (e) { - return sendMessageToTelegramWithContext(context)(`ERROR: ${e.message}`); + return sender.sendPlainText(`ERROR: ${e.message}`); } + }; } -async function commandGetHelp(message, command, subcommand, context) { - let helpMsg = `${ENV.I18N.command.help.summary}\n`; - helpMsg += Object.keys(commandHandlers) - .map(key => `${key}:${ENV.I18N.command.help[key.substring(1)]}`) - .join('\n'); - helpMsg += Object.keys(CUSTOM_COMMAND) - .filter(key => !!CUSTOM_COMMAND_DESCRIPTION[key]) - .map(key => `${key}:${CUSTOM_COMMAND_DESCRIPTION[key]}`) - .join('\n'); - return sendMessageToTelegramWithContext(context)(helpMsg); +class HelpCommandHandler { + command = "/help"; + scopes = ["all_private_chats", "all_chat_administrators"]; + handle = async (message, subcommand, context) => { + const sender = MessageSender.from(context.SHARE_CONTEXT.botToken, message); + let helpMsg = `${ENV.I18N.command.help.summary} +`; + for (const [k, v] of Object.entries(ENV.I18N.command.help)) { + if (k === "summary") { + continue; + } + helpMsg += `/${k}:${v} +`; + } + for (const [k, v] of Object.entries(ENV.CUSTOM_COMMAND)) { + if (v.description) { + helpMsg += `${k}:${v.description} +`; + } + } + for (const [k, v] of Object.entries(ENV.PLUGINS_COMMAND)) { + if (v.description) { + helpMsg += `${k}:${v.description} +`; + } + } + return sender.sendPlainText(helpMsg); + }; } -async function commandCreateNewChatContext(message, command, subcommand, context) { - try { - await DATABASE.delete(context.SHARE_CONTEXT.chatHistoryKey); - const isNewCommand = command.startsWith('/new'); - const text = ENV.I18N.command.new.new_chat_start + (isNewCommand ? '' : `(${context.CURRENT_CHAT_CONTEXT.chat_id})`); - if (ENV.SHOW_REPLY_BUTTON && !CONST.GROUP_TYPES.includes(context.SHARE_CONTEXT.chatType)) { - context.CURRENT_CHAT_CONTEXT.reply_markup = { - keyboard: [[{ text: '/new' }, { text: '/redo' }]], - selective: true, - resize_keyboard: true, - one_time_keyboard: false, - }; - } else { - context.CURRENT_CHAT_CONTEXT.reply_markup = { - remove_keyboard: true, - selective: true, - }; - } - return sendMessageToTelegramWithContext(context)(text); - } catch (e) { - return sendMessageToTelegramWithContext(context)(`ERROR: ${e.message}`); +class BaseNewCommandHandler { + static async handle(showID, message, subcommand, context) { + await ENV.DATABASE.delete(context.SHARE_CONTEXT.chatHistoryKey); + const text = ENV.I18N.command.new.new_chat_start + (showID ? `(${message.chat.id})` : ""); + const params = { + chat_id: message.chat.id, + text + }; + if (ENV.SHOW_REPLY_BUTTON && !isTelegramChatTypeGroup(message.chat.type)) { + params.reply_markup = { + keyboard: [[{ text: "/new" }, { text: "/redo" }]], + selective: true, + resize_keyboard: true, + one_time_keyboard: false + }; + } else { + params.reply_markup = { + remove_keyboard: true, + selective: true + }; } + return createTelegramBotAPI(context.SHARE_CONTEXT.botToken).sendMessage(params); + } } -async function commandUpdateUserConfig(message, command, subcommand, context) { - const kv = subcommand.indexOf('='); +class NewCommandHandler extends BaseNewCommandHandler { + command = "/new"; + scopes = ["all_private_chats", "all_group_chats", "all_chat_administrators"]; + handle = async (message, subcommand, context) => { + return BaseNewCommandHandler.handle(false, message, subcommand, context); + }; +} +class StartCommandHandler extends BaseNewCommandHandler { + command = "/start"; + handle = async (message, subcommand, context) => { + return BaseNewCommandHandler.handle(true, message, subcommand, context); + }; +} +class SetEnvCommandHandler { + command = "/setenv"; + needAuth = COMMAND_AUTH_CHECKER.shareModeGroup; + handle = async (message, subcommand, context) => { + const sender = MessageSender.from(context.SHARE_CONTEXT.botToken, message); + const kv = subcommand.indexOf("="); if (kv === -1) { - return sendMessageToTelegramWithContext(context)(ENV.I18N.command.help.setenv); + return sender.sendPlainText(ENV.I18N.command.help.setenv); } let key = subcommand.slice(0, kv); const value = subcommand.slice(kv + 1); key = ENV_KEY_MAPPER[key] || key; if (ENV.LOCK_USER_CONFIG_KEYS.includes(key)) { - return sendMessageToTelegramWithContext(context)(`Key ${key} is locked`); + return sender.sendPlainText(`Key ${key} is locked`); } if (!Object.keys(context.USER_CONFIG).includes(key)) { - return sendMessageToTelegramWithContext(context)(`Key ${key} not found`); + return sender.sendPlainText(`Key ${key} not found`); } try { - context.USER_CONFIG.DEFINE_KEYS.push(key); - context.USER_CONFIG.DEFINE_KEYS = Array.from(new Set(context.USER_CONFIG.DEFINE_KEYS)); - mergeEnvironment(context.USER_CONFIG, { - [key]: value, - }); - console.log('Update user config: ', key, context.USER_CONFIG[key]); - await DATABASE.put( - context.SHARE_CONTEXT.configStoreKey, - JSON.stringify(trimUserConfig(context.USER_CONFIG)), - ); - return sendMessageToTelegramWithContext(context)('Update user config success'); + context.USER_CONFIG.DEFINE_KEYS.push(key); + context.USER_CONFIG.DEFINE_KEYS = Array.from(new Set(context.USER_CONFIG.DEFINE_KEYS)); + ConfigMerger.merge(context.USER_CONFIG, { + [key]: value + }); + console.log("Update user config: ", key, context.USER_CONFIG[key]); + await ENV.DATABASE.put( + context.SHARE_CONTEXT.configStoreKey, + JSON.stringify(context.USER_CONFIG.trim(ENV.LOCK_USER_CONFIG_KEYS)) + ); + return sender.sendPlainText("Update user config success"); } catch (e) { - return sendMessageToTelegramWithContext(context)(`ERROR: ${e.message}`); + return sender.sendPlainText(`ERROR: ${e.message}`); } + }; } -async function commandUpdateUserConfigs(message, command, subcommand, context) { +class SetEnvsCommandHandler { + command = "/setenvs"; + needAuth = COMMAND_AUTH_CHECKER.shareModeGroup; + handle = async (message, subcommand, context) => { + const sender = MessageSender.from(context.SHARE_CONTEXT.botToken, message); try { - const values = JSON.parse(subcommand); - const configKeys = Object.keys(context.USER_CONFIG); - for (const ent of Object.entries(values)) { - let [key, value] = ent; - key = ENV_KEY_MAPPER[key] || key; - if (ENV.LOCK_USER_CONFIG_KEYS.includes(key)) { - return sendMessageToTelegramWithContext(context)(`Key ${key} is locked`); - } - if (!configKeys.includes(key)) { - return sendMessageToTelegramWithContext(context)(`Key ${key} not found`); - } - context.USER_CONFIG.DEFINE_KEYS.push(key); - mergeEnvironment(context.USER_CONFIG, { - [key]: value, - }); - console.log('Update user config: ', key, context.USER_CONFIG[key]); + const values = JSON.parse(subcommand); + const configKeys = Object.keys(context.USER_CONFIG); + for (const ent of Object.entries(values)) { + let [key, value] = ent; + key = ENV_KEY_MAPPER[key] || key; + if (ENV.LOCK_USER_CONFIG_KEYS.includes(key)) { + return sender.sendPlainText(`Key ${key} is locked`); + } + if (!configKeys.includes(key)) { + return sender.sendPlainText(`Key ${key} not found`); } - context.USER_CONFIG.DEFINE_KEYS = Array.from(new Set(context.USER_CONFIG.DEFINE_KEYS)); - await DATABASE.put( - context.SHARE_CONTEXT.configStoreKey, - JSON.stringify(trimUserConfig(trimUserConfig(context.USER_CONFIG))), - ); - return sendMessageToTelegramWithContext(context)('Update user config success'); + context.USER_CONFIG.DEFINE_KEYS.push(key); + ConfigMerger.merge(context.USER_CONFIG, { + [key]: value + }); + console.log("Update user config: ", key, context.USER_CONFIG[key]); + } + context.USER_CONFIG.DEFINE_KEYS = Array.from(new Set(context.USER_CONFIG.DEFINE_KEYS)); + await ENV.DATABASE.put( + context.SHARE_CONTEXT.configStoreKey, + JSON.stringify(context.USER_CONFIG.trim(ENV.LOCK_USER_CONFIG_KEYS)) + ); + return sender.sendPlainText("Update user config success"); } catch (e) { - return sendMessageToTelegramWithContext(context)(`ERROR: ${e.message}`); + return sender.sendPlainText(`ERROR: ${e.message}`); } + }; } -async function commandDeleteUserConfig(message, command, subcommand, context) { +class DelEnvCommandHandler { + command = "/delenv"; + needAuth = COMMAND_AUTH_CHECKER.shareModeGroup; + handle = async (message, subcommand, context) => { + const sender = MessageSender.from(context.SHARE_CONTEXT.botToken, message); if (ENV.LOCK_USER_CONFIG_KEYS.includes(subcommand)) { - const msg = `Key ${subcommand} is locked`; - return sendMessageToTelegramWithContext(context)(msg); + const msg = `Key ${subcommand} is locked`; + return sender.sendPlainText(msg); } try { - context.USER_CONFIG[subcommand] = null; - context.USER_CONFIG.DEFINE_KEYS = context.USER_CONFIG.DEFINE_KEYS.filter(key => key !== subcommand); - await DATABASE.put( - context.SHARE_CONTEXT.configStoreKey, - JSON.stringify(trimUserConfig(context.USER_CONFIG)), - ); - return sendMessageToTelegramWithContext(context)('Delete user config success'); + context.USER_CONFIG[subcommand] = null; + context.USER_CONFIG.DEFINE_KEYS = context.USER_CONFIG.DEFINE_KEYS.filter((key) => key !== subcommand); + await ENV.DATABASE.put( + context.SHARE_CONTEXT.configStoreKey, + JSON.stringify(context.USER_CONFIG.trim(ENV.LOCK_USER_CONFIG_KEYS)) + ); + return sender.sendPlainText("Delete user config success"); } catch (e) { - return sendMessageToTelegramWithContext(context)(`ERROR: ${e.message}`); + return sender.sendPlainText(`ERROR: ${e.message}`); } + }; } -async function commandClearUserConfig(message, command, subcommand, context) { +class ClearEnvCommandHandler { + command = "/clearenv"; + needAuth = COMMAND_AUTH_CHECKER.shareModeGroup; + handle = async (message, subcommand, context) => { + const sender = MessageSender.from(context.SHARE_CONTEXT.botToken, message); try { - await DATABASE.put( - context.SHARE_CONTEXT.configStoreKey, - JSON.stringify({}), - ); - return sendMessageToTelegramWithContext(context)('Clear user config success'); + await ENV.DATABASE.put( + context.SHARE_CONTEXT.configStoreKey, + JSON.stringify({}) + ); + return sender.sendPlainText("Clear user config success"); } catch (e) { - return sendMessageToTelegramWithContext(context)(`ERROR: ${e.message}`); + return sender.sendPlainText(`ERROR: ${e.message}`); } + }; } -async function commandFetchUpdate(message, command, subcommand, context) { +class VersionCommandHandler { + command = "/version"; + scopes = ["all_private_chats", "all_chat_administrators"]; + handle = async (message, subcommand, context) => { + const sender = MessageSender.from(context.SHARE_CONTEXT.botToken, message); const current = { - ts: ENV.BUILD_TIMESTAMP, - sha: ENV.BUILD_VERSION, - }; - try { - const info = `https://raw.githubusercontent.com/TBXark/ChatGPT-Telegram-Workers/${ENV.UPDATE_BRANCH}/dist/buildinfo.json`; - const online = await fetch(info).then(r => r.json()); - const timeFormat = (ts) => { - return new Date(ts * 1000).toLocaleString('en-US', {}); - }; - if (current.ts < online.ts) { - return sendMessageToTelegramWithContext(context)(`New version detected: ${online.sha}(${timeFormat(online.ts)})\nCurrent version: ${current.sha}(${timeFormat(current.ts)})`); - } else { - return sendMessageToTelegramWithContext(context)(`Current version: ${current.sha}(${timeFormat(current.ts)}) is up to date`); - } + ts: ENV.BUILD_TIMESTAMP, + sha: ENV.BUILD_VERSION + }; + try { + const info = `https://raw.githubusercontent.com/TBXark/ChatGPT-Telegram-Workers/${ENV.UPDATE_BRANCH}/dist/buildinfo.json`; + const online = await fetch(info).then((r) => r.json()); + const timeFormat = (ts) => { + return new Date(ts * 1e3).toLocaleString("en-US", {}); + }; + if (current.ts < online.ts) { + const text = `New version detected: ${online.sha}(${timeFormat(online.ts)}) +Current version: ${current.sha}(${timeFormat(current.ts)})`; + return sender.sendPlainText(text); + } else { + const text = `Current version: ${current.sha}(${timeFormat(current.ts)}) is up to date`; + return sender.sendPlainText(text); + } } catch (e) { - return sendMessageToTelegramWithContext(context)(`ERROR: ${e.message}`); + return sender.sendPlainText(`ERROR: ${e.message}`); } + }; } -async function commandSystem(message, command, subcommand, context) { - const chatAgent = loadChatLLM(context)?.name; - const imageAgent = loadImageGen(context)?.name; +class SystemCommandHandler { + command = "/system"; + scopes = ["all_private_chats", "all_chat_administrators"]; + handle = async (message, subcommand, context) => { + const sender = MessageSender.from(context.SHARE_CONTEXT.botToken, message); + const chatAgent = loadChatLLM(context.USER_CONFIG); + const imageAgent = loadImageGen(context.USER_CONFIG); const agent = { - AI_PROVIDER: chatAgent, - AI_IMAGE_PROVIDER: imageAgent, + AI_PROVIDER: chatAgent?.name, + [chatAgent?.modelKey || "AI_PROVIDER_NOT_FOUND"]: chatAgent?.model(context.USER_CONFIG), + AI_IMAGE_PROVIDER: imageAgent?.name, + [imageAgent?.modelKey || "AI_IMAGE_PROVIDER_NOT_FOUND"]: imageAgent?.model(context.USER_CONFIG) }; - if (chatModelKey(chatAgent)) { - agent[chatModelKey(chatAgent)] = currentChatModel(chatAgent, context); - } - if (imageModelKey(imageAgent)) { - agent[imageModelKey(imageAgent)] = currentImageModel(imageAgent, context); - } - let msg = `AGENT: ${JSON.stringify(agent, null, 2)}\n`; + let msg = `AGENT: ${JSON.stringify(agent, null, 2)} +`; if (ENV.DEV_MODE) { - const shareCtx = { ...context.SHARE_CONTEXT }; - shareCtx.currentBotToken = '******'; - context.USER_CONFIG.OPENAI_API_KEY = ['******']; - context.USER_CONFIG.AZURE_API_KEY = '******'; - context.USER_CONFIG.AZURE_COMPLETIONS_API = '******'; - context.USER_CONFIG.AZURE_DALLE_API = '******'; - context.USER_CONFIG.CLOUDFLARE_ACCOUNT_ID = '******'; - context.USER_CONFIG.CLOUDFLARE_TOKEN = '******'; - context.USER_CONFIG.GOOGLE_API_KEY = '******'; - context.USER_CONFIG.MISTRAL_API_KEY = '******'; - context.USER_CONFIG.COHERE_API_KEY = '******'; - context.USER_CONFIG.ANTHROPIC_API_KEY = '******'; - const config = trimUserConfig(context.USER_CONFIG); - msg = `
\n${msg}`;
-        msg += `USER_CONFIG: ${JSON.stringify(config, null, 2)}\n`;
-        msg += `CHAT_CONTEXT: ${JSON.stringify(context.CURRENT_CHAT_CONTEXT, null, 2)}\n`;
-        msg += `SHARE_CONTEXT: ${JSON.stringify(shareCtx, null, 2)}\n`;
-        msg += '
'; - } - context.CURRENT_CHAT_CONTEXT.parse_mode = 'HTML'; - return sendMessageToTelegramWithContext(context)(msg); -} -async function commandRegenerate(message, command, subcommand, context) { + const shareCtx = { ...context.SHARE_CONTEXT }; + shareCtx.botToken = "******"; + context.USER_CONFIG.OPENAI_API_KEY = ["******"]; + context.USER_CONFIG.AZURE_API_KEY = "******"; + context.USER_CONFIG.AZURE_COMPLETIONS_API = "******"; + context.USER_CONFIG.AZURE_DALLE_API = "******"; + context.USER_CONFIG.CLOUDFLARE_ACCOUNT_ID = "******"; + context.USER_CONFIG.CLOUDFLARE_TOKEN = "******"; + context.USER_CONFIG.GOOGLE_API_KEY = "******"; + context.USER_CONFIG.MISTRAL_API_KEY = "******"; + context.USER_CONFIG.COHERE_API_KEY = "******"; + context.USER_CONFIG.ANTHROPIC_API_KEY = "******"; + const config = context.USER_CONFIG.trim(ENV.LOCK_USER_CONFIG_KEYS); + msg = `
+${msg}`;
+      msg += `USER_CONFIG: ${JSON.stringify(config, null, 2)}
+`;
+      msg += `CHAT_CONTEXT: ${JSON.stringify(sender.context || {}, null, 2)}
+`;
+      msg += `SHARE_CONTEXT: ${JSON.stringify(shareCtx, null, 2)}
+`;
+      msg += "
"; + } + return sender.sendRichText(msg, "HTML"); + }; +} +class RedoCommandHandler { + command = "/redo"; + scopes = ["all_private_chats", "all_group_chats", "all_chat_administrators"]; + handle = async (message, subcommand, context) => { const mf = (history, text) => { - let nextText = text; - if (!(history && Array.isArray(history) && history.length > 0)) { - throw new Error('History not found'); - } - const historyCopy = structuredClone(history); - while (true) { - const data = historyCopy.pop(); - if (data === undefined || data === null) { - break; - } else if (data.role === 'user') { - if (text === '' || text === undefined || text === null) { - nextText = data.content; - } - break; - } - } - if (subcommand) { - nextText = subcommand; + let nextText = text; + if (!(history && Array.isArray(history) && history.length > 0)) { + throw new Error("History not found"); + } + const historyCopy = structuredClone(history); + while (true) { + const data = historyCopy.pop(); + if (data === void 0 || data === null) { + break; + } else if (data.role === "user") { + if (text === "" || text === void 0 || text === null) { + nextText = data.content || null; + } + break; } - return { history: historyCopy, message: nextText }; + } + if (subcommand) { + nextText = subcommand; + } + return { history: historyCopy, message: nextText }; }; - return chatWithLLM({ message: null }, context, mf); + return chatWithLLM(message, { message: null }, context, mf); + }; } -async function commandEcho(message, command, subcommand, context) { - let msg = '
';
+class EchoCommandHandler {
+  command = "/echo";
+  handle = (message, subcommand, context) => {
+    let msg = "
";
     msg += JSON.stringify({ message }, null, 2);
-    msg += '
'; - context.CURRENT_CHAT_CONTEXT.parse_mode = 'HTML'; - return sendMessageToTelegramWithContext(context)(msg); + msg += "
"; + return MessageSender.from(context.SHARE_CONTEXT.botToken, message).sendRichText(msg, "HTML"); + }; } -async function handleCommandMessage(message, context) { - if (ENV.DEV_MODE) { - commandHandlers['/echo'] = { - help: '[DEBUG ONLY] echo message', - scopes: ['all_private_chats', 'all_chat_administrators'], - fn: commandEcho, - needAuth: commandAuthCheck.default, - }; - } - if (CUSTOM_COMMAND[message.text]) { - message.text = CUSTOM_COMMAND[message.text]; + +async function loadChatRoleWithContext(message, context) { + const { groupAdminsKey } = context.SHARE_CONTEXT; + const chatId = message.chat.id; + const speakerId = message.from?.id || chatId; + if (!groupAdminsKey) { + return null; + } + let groupAdmin = null; + try { + groupAdmin = JSON.parse(await ENV.DATABASE.get(groupAdminsKey)); + } catch (e) { + console.error(e); + } + if (groupAdmin === null || !Array.isArray(groupAdmin) || groupAdmin.length === 0) { + const api = createTelegramBotAPI(context.SHARE_CONTEXT.botToken); + const result = await api.getChatAdministratorsWithReturns({ chat_id: chatId }); + if (result == null) { + return null; + } + groupAdmin = result.result; + await ENV.DATABASE.put( + groupAdminsKey, + JSON.stringify(groupAdmin), + { expiration: Date.now() / 1e3 + 120 } + ); + } + for (let i = 0; i < groupAdmin.length; i++) { + const user = groupAdmin[i]; + if (`${user.user?.id}` === `${speakerId}`) { + return user.status; } - for (const key in commandHandlers) { - if (message.text === key || message.text.startsWith(`${key} `)) { - const command = commandHandlers[key]; - try { - if (command.needAuth) { - const roleList = command.needAuth(context.SHARE_CONTEXT.chatType); - if (roleList) { - const chatRole = await getChatRoleWithContext(context); - if (chatRole === null) { - return sendMessageToTelegramWithContext(context)('ERROR: Get chat role failed'); - } - if (!roleList.includes(chatRole)) { - return sendMessageToTelegramWithContext(context)(`ERROR: Permission denied, need ${roleList.join(' or ')}`); - } - } - } - } catch (e) { - return sendMessageToTelegramWithContext(context)(`ERROR: ${e.message}`); - } - const subcommand = message.text.substring(key.length).trim(); - try { - return await command.fn(message, key, subcommand, context); - } catch (e) { - return sendMessageToTelegramWithContext(context)(`ERROR: ${e.message}`); - } + } + return "member"; +} + +const SYSTEM_COMMANDS = [ + new StartCommandHandler(), + new NewCommandHandler(), + new RedoCommandHandler(), + new ImgCommandHandler(), + new SetEnvCommandHandler(), + new SetEnvsCommandHandler(), + new DelEnvCommandHandler(), + new ClearEnvCommandHandler(), + new VersionCommandHandler(), + new SystemCommandHandler(), + new HelpCommandHandler() +]; +async function handleSystemCommand(message, raw, command, context) { + const sender = MessageSender.from(context.SHARE_CONTEXT.botToken, message); + try { + if (command.needAuth) { + const roleList = command.needAuth(message.chat.type); + if (roleList) { + const chatRole = await loadChatRoleWithContext(message, context); + if (chatRole === null) { + return sender.sendPlainText("ERROR: Get chat role failed"); + } + if (!roleList.includes(chatRole)) { + return sender.sendPlainText(`ERROR: Permission denied, need ${roleList.join(" or ")}`); } + } } - return null; + } catch (e) { + return sender.sendPlainText(`ERROR: ${e.message}`); + } + const subcommand = raw.substring(command.command.length).trim(); + try { + return await command.handle(message, subcommand, context); + } catch (e) { + return sender.sendPlainText(`ERROR: ${e.message}`); + } } -async function bindCommandForTelegram(token) { - const scopeCommandMap = { - all_private_chats: [], - all_group_chats: [], - all_chat_administrators: [], - }; - for (const key of commandSortList) { - if (ENV.HIDE_COMMAND_BUTTONS.includes(key)) { - continue; - } - if (Object.prototype.hasOwnProperty.call(commandHandlers, key) && commandHandlers[key].scopes) { - for (const scope of commandHandlers[key].scopes) { - if (!scopeCommandMap[scope]) { - scopeCommandMap[scope] = []; - } - scopeCommandMap[scope].push(key); - } +async function handlePluginCommand(message, command, raw, template, context) { + const sender = MessageSender.from(context.SHARE_CONTEXT.botToken, message); + try { + const subcommand = raw.substring(command.length).trim(); + const DATA = formatInput(subcommand, template.input?.type); + const { type, content } = await executeRequest(template, { + DATA, + ENV: ENV.PLUGINS_ENV + }); + if (type === "image") { + return sender.sendPhoto(content); + } + switch (type) { + case "html": + return sender.sendRichText(content, "HTML"); + case "markdown": + return sender.sendRichText(content, "Markdown"); + case "text": + default: + return sender.sendPlainText(content); + } + } catch (e) { + const help = ENV.PLUGINS_COMMAND[command].description; + return sender.sendPlainText(`ERROR: ${e.message}${help ? ` +${help}` : ""}`); + } +} +async function handleCommandMessage(message, context) { + let text = (message.text || message.caption || "").trim(); + if (ENV.CUSTOM_COMMAND[text]) { + text = ENV.CUSTOM_COMMAND[text].value; + } + if (ENV.DEV_MODE) { + SYSTEM_COMMANDS.push(new EchoCommandHandler()); + } + for (const key in ENV.PLUGINS_COMMAND) { + if (text === key || text.startsWith(`${key} `)) { + let template = ENV.PLUGINS_COMMAND[key].value.trim(); + if (template.startsWith("http")) { + template = await fetch(template).then((r) => r.text()); + } + return await handlePluginCommand(message, key, text, JSON.parse(template), context); + } + } + for (const cmd of SYSTEM_COMMANDS) { + if (text === cmd.command || text.startsWith(`${cmd.command} `)) { + return await handleSystemCommand(message, text, cmd, context); + } + } + return null; +} +function commandsBindScope() { + const scopeCommandMap = { + all_private_chats: [], + all_group_chats: [], + all_chat_administrators: [] + }; + for (const cmd of SYSTEM_COMMANDS) { + if (ENV.HIDE_COMMAND_BUTTONS.includes(cmd.command)) { + continue; + } + if (cmd.scopes) { + for (const scope of cmd.scopes) { + if (!scopeCommandMap[scope]) { + scopeCommandMap[scope] = []; } + scopeCommandMap[scope].push(cmd); + } } - const result = {}; - for (const scope in scopeCommandMap) { - result[scope] = await fetch( - `https://api.telegram.org/bot${token}/setMyCommands`, - { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - }, - body: JSON.stringify({ - commands: scopeCommandMap[scope].map(command => ({ - command, - description: ENV.I18N.command.help[command.substring(1)] || '', - })), - scope: { - type: scope, - }, - }), - }, - ).then(res => res.json()); - } - return { ok: true, result }; + } + const result = {}; + for (const scope in scopeCommandMap) { + result[scope] = { + commands: scopeCommandMap[scope].map((command) => ({ + command: command.command, + description: ENV.I18N.command.help[command.command.substring(1)] || "" + })).filter((item) => item.description !== ""), + scope: { + type: scope + } + }; + } + return result; } function commandsDocument() { - return Object.keys(commandHandlers).map((key) => { - return { - command: key, - description: ENV.I18N.command.help[key.substring(1)], - }; - }); + return SYSTEM_COMMANDS.map((command) => { + return { + command: command.command, + description: ENV.I18N.command.help[command.command.substring(1)] || "" + }; + }).filter((item) => item.description !== ""); } -async function msgInitChatContext(message, context) { - await context.initContext(message); - return null; -} -async function msgSaveLastMessage(message, context) { - if (ENV.DEBUG_MODE) { - const lastMessageKey = `last_message:${context.SHARE_CONTEXT.chatHistoryKey}`; - await DATABASE.put(lastMessageKey, JSON.stringify(message), { expirationTtl: 3600 }); +class SaveLastMessage { + handle = async (message, context) => { + if (!ENV.DEBUG_MODE) { + return null; } + const lastMessageKey = `last_message:${context.SHARE_CONTEXT.chatHistoryKey}`; + await ENV.DATABASE.put(lastMessageKey, JSON.stringify(message), { expirationTtl: 3600 }); return null; + }; } -async function msgIgnoreOldMessage(message, context) { - if (ENV.SAFE_MODE) { - let idList = []; - try { - idList = JSON.parse(await DATABASE.get(context.SHARE_CONTEXT.chatLastMessageIdKey).catch(() => '[]')) || []; - } catch (e) { - console.error(e); - } - if (idList.includes(message.message_id)) { - throw new Error('Ignore old message'); - } else { - idList.push(message.message_id); - if (idList.length > 100) { - idList.shift(); - } - await DATABASE.put(context.SHARE_CONTEXT.chatLastMessageIdKey, JSON.stringify(idList)); - } +class OldMessageFilter { + handle = async (message, context) => { + if (!ENV.SAFE_MODE) { + return null; + } + let idList = []; + try { + idList = JSON.parse(await ENV.DATABASE.get(context.SHARE_CONTEXT.lastMessageKey).catch(() => "[]")) || []; + } catch (e) { + console.error(e); + } + if (idList.includes(message.message_id)) { + throw new Error("Ignore old message"); + } else { + idList.push(message.message_id); + if (idList.length > 100) { + idList.shift(); + } + await ENV.DATABASE.put(context.SHARE_CONTEXT.lastMessageKey, JSON.stringify(idList)); } return null; + }; } -async function msgCheckEnvIsReady(message, context) { - if (!DATABASE) { - return sendMessageToTelegramWithContext(context)('DATABASE Not Set'); +class EnvChecker { + handle = async (message, context) => { + if (!ENV.DATABASE) { + return MessageSender.from(context.SHARE_CONTEXT.botToken, message).sendPlainText("DATABASE Not Set"); } return null; + }; } -async function msgFilterWhiteList(message, context) { +class WhiteListFilter { + handle = async (message, context) => { if (ENV.I_AM_A_GENEROUS_PERSON) { - return null; + return null; } - if (context.SHARE_CONTEXT.chatType === 'private') { - if (!ENV.CHAT_WHITE_LIST.includes(`${context.CURRENT_CHAT_CONTEXT.chat_id}`)) { - return sendMessageToTelegramWithContext(context)( - `You are not in the white list, please contact the administrator to add you to the white list. Your chat_id: ${context.CURRENT_CHAT_CONTEXT.chat_id}`, - ); - } - return null; + const sender = MessageSender.from(context.SHARE_CONTEXT.botToken, message); + const text = `You are not in the white list, please contact the administrator to add you to the white list. Your chat_id: ${message.chat.id}`; + if (message.chat.type === "private") { + if (!ENV.CHAT_WHITE_LIST.includes(`${message.chat.id}`)) { + return sender.sendPlainText(text); + } + return null; } - if (CONST.GROUP_TYPES.includes(context.SHARE_CONTEXT.chatType)) { - if (!ENV.GROUP_CHAT_BOT_ENABLE) { - throw new Error('Not support'); - } - if (!ENV.CHAT_GROUP_WHITE_LIST.includes(`${context.CURRENT_CHAT_CONTEXT.chat_id}`)) { - return sendMessageToTelegramWithContext(context)( - `Your group are not in the white list, please contact the administrator to add you to the white list. Your chat_id: ${context.CURRENT_CHAT_CONTEXT.chat_id}`, - ); - } - return null; + if (isTelegramChatTypeGroup(message.chat.type)) { + if (!ENV.GROUP_CHAT_BOT_ENABLE) { + throw new Error("Not support"); + } + if (!ENV.CHAT_GROUP_WHITE_LIST.includes(`${message.chat.id}`)) { + return sender.sendPlainText(text); + } + return null; } - return sendMessageToTelegramWithContext(context)( - `Not support chat type: ${context.SHARE_CONTEXT.chatType}`, + return sender.sendPlainText( + `Not support chat type: ${message.chat.type}` ); + }; } -async function msgFilterUnsupportedMessage(message, context) { +class MessageFilter { + handle = async (message, context) => { if (message.text) { - return null; + return null; } if (message.caption) { - return null; + return null; } if (message.photo) { - return null; + return null; } - throw new Error('Not supported message type'); + throw new Error("Not supported message type"); + }; } -async function msgHandleGroupMessage(message, context) { - if (!CONST.GROUP_TYPES.includes(context.SHARE_CONTEXT.chatType)) { - return null; - } - if (message.reply_to_message) { - if (`${message.reply_to_message.from.id}` === context.SHARE_CONTEXT.currentBotId) { - return null; - } else if (ENV.EXTRA_MESSAGE_CONTEXT) { - context.SHARE_CONTEXT.extraMessageContext = message.reply_to_message; - } - } - let botName = context.SHARE_CONTEXT.currentBotName; - if (!botName) { - botName = await getBotName(context.SHARE_CONTEXT.currentBotToken); - context.SHARE_CONTEXT.currentBotName = botName; - } - if (!botName) { - throw new Error('Not set bot name'); - } - let isMention = false; - if (message.text && message.entities) { - const res = checkMention(message.text, message.entities, botName, context.SHARE_CONTEXT.currentBotId); - isMention = res.isMention; - message.text = res.content.trim(); - } - if (message.caption && message.caption_entities) { - const res = checkMention(message.caption, message.caption_entities, botName, context.SHARE_CONTEXT.currentBotId); - isMention = res.isMention || isMention; - message.caption = res.content.trim(); - } - if (!isMention) { - throw new Error('Not mention'); +class CommandHandler { + handle = async (message, context) => { + if (message.text || message.caption) { + return await handleCommandMessage(message, context); } return null; + }; } -async function msgHandleCommand(message, context) { - if (!message.text) { - return null; - } - return await handleCommandMessage(message, context); + +function loadMessage(body) { + if (body.edited_message) { + throw new Error("Ignore edited message"); + } + if (body.message) { + return body?.message; + } else { + throw new Error("Invalid message"); + } } -async function msgChatWithLLM(message, context) { - const params = { - message: message.text || message.caption || '', - }; - if (ENV.EXTRA_MESSAGE_CONTEXT && context.SHARE_CONTEXT.extraMessageContext) { - const extra = context.SHARE_CONTEXT.extraMessageContext.text || context.SHARE_CONTEXT.extraMessageContext.caption || ''; - if (extra) { - params.message = `${extra}\n${params.message}`; - } - } - if (message.photo && message.photo.length > 0) { - const id = findPhotoFileID(message.photo, ENV.TELEGRAM_PHOTO_SIZE_OFFSET); - let url = await getFileLink(id, context.SHARE_CONTEXT.currentBotToken); - if (ENV.TELEGRAPH_ENABLE) { - url = await uploadImageToTelegraph(url); - } - params.images = [url]; +const SHARE_HANDLER = [ + new EnvChecker(), + new WhiteListFilter(), + new MessageFilter(), + new GroupMention(), + new OldMessageFilter(), + new SaveLastMessage(), + new CommandHandler(), + new ChatHandler() +]; +async function handleUpdate(token, update) { + const message = loadMessage(update); + const context = await WorkerContext.from(token, message); + for (const handler of SHARE_HANDLER) { + try { + const result = await handler.handle(message, context); + if (result) { + return result; + } + } catch (e) { + return new Response(JSON.stringify({ + message: e.message, + stack: e.stack + }), { status: 500 }); } - return chatWithLLM(params, context, null); + } + return null; } -function loadMessage(body) { - if (body?.edited_message) { - throw new Error('Ignore edited message'); - } - if (body?.message) { - return body?.message; - } else { - throw new Error('Invalid message'); - } -} -async function handleMessage(token, body) { - const context = new Context(); - context.initTelegramContext(token); - const message = loadMessage(body); - const handlers = [ - msgInitChatContext, - msgCheckEnvIsReady, - msgFilterWhiteList, - msgFilterUnsupportedMessage, - msgHandleGroupMessage, - msgIgnoreOldMessage, - msgSaveLastMessage, - msgHandleCommand, - msgChatWithLLM, - ]; - for (const handler of handlers) { - try { - const result = await handler(message, context); - if (result) { - return result; - } - } catch (e) { - console.error(e); - return new Response(errorToString(e), { status: 500 }); - } - } - return null; + +function renderHTML(body) { + return ` + + + ChatGPT-Telegram-Workers + + + + + + + + ${body} + + + `; +} +function errorToString(e) { + return JSON.stringify({ + message: e.message, + stack: e.stack + }); +} +function makeResponse200(resp) { + if (resp === null) { + return new Response("NOT HANDLED", { status: 200 }); + } + if (resp.status === 200) { + return resp; + } else { + return new Response(resp.body, { + status: 200, + headers: { + "Original-Status": `${resp.status}`, + ...resp.headers + } + }); + } } class Router { - constructor({ base = '', routes = [], ...other } = {}) { - this.routes = routes; - this.base = base; - Object.assign(this, other); - } - parseQueryParams(searchParams) { - const query = Object.create(null); - for (const [k, v] of searchParams) { - query[k] = k in query ? [].concat(query[k], v) : v; - } - return query; - } - normalizePath(path) { - return path.replace(/\/+(\/|$)/g, '$1'); - } - createRouteRegex(path) { - return RegExp(`^${path - .replace(/(\/?\.?):(\w+)\+/g, '($1(?<$2>*))') - .replace(/(\/?\.?):(\w+)/g, '($1(?<$2>[^$1/]+?))') - .replace(/\./g, '\\.') - .replace(/(\/?)\*/g, '($1.*)?') - }/*$`); - } - async fetch(request, ...args) { - const url = new URL(request.url); - const reqMethod = request.method.toUpperCase(); - request.query = this.parseQueryParams(url.searchParams); - for (const [method, regex, handlers, path] of this.routes) { - let match = null; - if ((method === reqMethod || method === 'ALL') && (match = url.pathname.match(regex))) { - request.params = match?.groups || {}; - request.route = path; - for (const handler of handlers) { - const response = await handler(request.proxy ?? request, ...args); - if (response != null) - return response; - } + routes; + base; + errorHandler = async (req, error) => new Response(errorToString(error), { status: 500 }); + constructor({ base = "", routes = [], ...other } = {}) { + this.routes = routes; + this.base = base; + Object.assign(this, other); + } + parseQueryParams(searchParams) { + const query = {}; + searchParams.forEach((v, k) => { + query[k] = k in query ? [...Array.isArray(query[k]) ? query[k] : [query[k]], v] : v; + }); + return query; + } + normalizePath(path) { + return path.replace(/\/+(\/|$)/g, "$1"); + } + createRouteRegex(path) { + return RegExp(`^${path.replace(/(\/?\.?):(\w+)\+/g, "($1(?<$2>*))").replace(/(\/?\.?):(\w+)/g, "($1(?<$2>[^$1/]+?))").replace(/\./g, "\\.").replace(/(\/?)\*/g, "($1.*)?")}/*$`); + } + async fetch(request, ...args) { + try { + const url = new URL(request.url); + const reqMethod = request.method.toUpperCase(); + request.query = this.parseQueryParams(url.searchParams); + for (const [method, regex, handlers, path] of this.routes) { + let match = null; + if ((method === reqMethod || method === "ALL") && (match = url.pathname.match(regex))) { + request.params = match?.groups || {}; + request.route = path; + for (const handler of handlers) { + const response = await handler(request, ...args); + if (response != null) { + return response; } + } } + } + return new Response("Not Found", { status: 404 }); + } catch (e) { + return this.errorHandler(request, e); } - route(method, path, ...handlers) { - const route = this.normalizePath(this.base + path); - const regex = this.createRouteRegex(route); - this.routes.push([method.toUpperCase(), regex, handlers, route]); - return this; - } - get(path, ...handlers) { - return this.route('GET', path, ...handlers); - } - post(path, ...handlers) { - return this.route('POST', path, ...handlers); - } - put(path, ...handlers) { - return this.route('PUT', path, ...handlers); - } - delete(path, ...handlers) { - return this.route('DELETE', path, ...handlers); - } - patch(path, ...handlers) { - return this.route('PATCH', path, ...handlers); - } - head(path, ...handlers) { - return this.route('HEAD', path, ...handlers); - } - options(path, ...handlers) { - return this.route('OPTIONS', path, ...handlers); - } - all(path, ...handlers) { - return this.route('ALL', path, ...handlers); - } + } + route(method, path, ...handlers) { + const route = this.normalizePath(this.base + path); + const regex = this.createRouteRegex(route); + this.routes.push([method.toUpperCase(), regex, handlers, route]); + return this; + } + get(path, ...handlers) { + return this.route("GET", path, ...handlers); + } + post(path, ...handlers) { + return this.route("POST", path, ...handlers); + } + put(path, ...handlers) { + return this.route("PUT", path, ...handlers); + } + delete(path, ...handlers) { + return this.route("DELETE", path, ...handlers); + } + patch(path, ...handlers) { + return this.route("PATCH", path, ...handlers); + } + head(path, ...handlers) { + return this.route("HEAD", path, ...handlers); + } + options(path, ...handlers) { + return this.route("OPTIONS", path, ...handlers); + } + all(path, ...handlers) { + return this.route("ALL", path, ...handlers); + } } -const helpLink = 'https://github.com/TBXark/ChatGPT-Telegram-Workers/blob/master/doc/en/DEPLOY.md'; -const issueLink = 'https://github.com/TBXark/ChatGPT-Telegram-Workers/issues'; -const initLink = './init'; +const helpLink = "https://github.com/TBXark/ChatGPT-Telegram-Workers/blob/master/doc/en/DEPLOY.md"; +const issueLink = "https://github.com/TBXark/ChatGPT-Telegram-Workers/issues"; +const initLink = "./init"; const footer = `

For more information, please visit ${helpLink}

If you have any questions, please visit ${issueLink}

`; -function buildKeyNotFoundHTML(key) { - return `

Please set the ${key} environment variable in Cloudflare Workers.

`; -} async function bindWebHookAction(request) { - const result = []; - const domain = new URL(request.url).host; - const hookMode = API_GUARD ? 'safehook' : 'webhook'; - for (const token of ENV.TELEGRAM_AVAILABLE_TOKENS) { - const url = `https://${domain}/telegram/${token.trim()}/${hookMode}`; - const id = token.split(':')[0]; - result[id] = { - webhook: await bindTelegramWebHook(token, url).then(res => res.json()).catch(e => errorToString(e)), - command: await bindCommandForTelegram(token).catch(e => errorToString(e)), - }; + const result = {}; + const domain = new URL(request.url).host; + const hookMode = ENV.API_GUARD ? "safehook" : "webhook"; + const scope = commandsBindScope(); + for (const token of ENV.TELEGRAM_AVAILABLE_TOKENS) { + const api = createTelegramBotAPI(token); + const url = `https://${domain}/telegram/${token.trim()}/${hookMode}`; + const id = token.split(":")[0]; + result[id] = {}; + result[id].webhook = await api.setWebhook({ url }).then((res) => res.json()).catch((e) => errorToString(e)); + for (const [s, data] of Object.entries(scope)) { + result[id][s] = await api.setMyCommands(data).then((res) => res.json()).catch((e) => errorToString(e)); } - const HTML = renderHTML(` -

ChatGPT-Telegram-Workers

-

${domain}

- ${ - ENV.TELEGRAM_AVAILABLE_TOKENS.length === 0 ? buildKeyNotFoundHTML('TELEGRAM_AVAILABLE_TOKENS') : '' -} - ${ - Object.keys(result).map(id => ` -
-

Bot ID: ${id}

-

Webhook: ${JSON.stringify(result[id].webhook)}

-

Command: ${JSON.stringify(result[id].command)}

- `).join('') -} - ${footer} - `); - return new Response(HTML, { status: 200, headers: { 'Content-Type': 'text/html' } }); + } + let html = `

ChatGPT-Telegram-Workers

`; + html += `

${domain}

`; + if (ENV.TELEGRAM_AVAILABLE_TOKENS.length === 0) { + html += `

Please set the TELEGRAM_AVAILABLE_TOKENS environment variable in Cloudflare Workers.

`; + } else { + for (const [key, res] of Object.entries(result)) { + html += `

Bot: ${key}

`; + for (const [s, data] of Object.entries(res)) { + html += `

${s}: ${JSON.stringify(data)}

`; + } + } + } + html += footer; + const HTML = renderHTML(html); + return new Response(HTML, { status: 200, headers: { "Content-Type": "text/html" } }); } async function telegramWebhook(request) { - try { - const { token } = request.params; - const body = await request.json(); - return makeResponse200(await handleMessage(token, body)); - } catch (e) { - console.error(e); - return new Response(errorToString(e), { status: 200 }); - } + try { + const { token } = request.params; + const body = await request.json(); + return makeResponse200(await handleUpdate(token, body)); + } catch (e) { + console.error(e); + return new Response(errorToString(e), { status: 200 }); + } } async function telegramSafeHook(request) { - try { - if (API_GUARD === undefined || API_GUARD === null) { - return telegramWebhook(request); - } - console.log('API_GUARD is enabled'); - const url = new URL(request.url); - url.pathname = url.pathname.replace('/safehook', '/webhook'); - request = new Request(url, request); - return makeResponse200(await API_GUARD.fetch(request)); - } catch (e) { - console.error(e); - return new Response(errorToString(e), { status: 200 }); - } + try { + if (ENV.API_GUARD === void 0 || ENV.API_GUARD === null) { + return telegramWebhook(request); + } + console.log("API_GUARD is enabled"); + const url = new URL(request.url); + url.pathname = url.pathname.replace("/safehook", "/webhook"); + const newRequest = new Request(url, request); + return makeResponse200(await ENV.API_GUARD.fetch(newRequest)); + } catch (e) { + console.error(e); + return new Response(errorToString(e), { status: 200 }); + } } async function defaultIndexAction() { - const HTML = renderHTML(` + const HTML = renderHTML(`

ChatGPT-Telegram-Workers


Deployed Successfully!

@@ -2471,66 +2769,37 @@ async function defaultIndexAction() {

You must >>>>> click here <<<<< to bind the webhook.


After binding the webhook, you can use the following commands to control the bot:

- ${ - commandsDocument().map(item => `

${item.command} - ${item.description}

`).join('') -} + ${commandsDocument().map((item) => `

${item.command} - ${item.description}

`).join("")}

You can get bot information by visiting the following URL:

/telegram/:token/bot - Get bot information

${footer} `); - return new Response(HTML, { status: 200, headers: { 'Content-Type': 'text/html' } }); + return new Response(HTML, { status: 200, headers: { "Content-Type": "text/html" } }); } -async function handleRequest(request) { - const router = new Router(); - router.get('/', defaultIndexAction); - router.get('/init', bindWebHookAction); - router.post('/telegram/:token/webhook', telegramWebhook); - router.post('/telegram/:token/safehook', telegramSafeHook); - router.all('*', () => new Response('Not Found', { status: 404 })); - return router.fetch(request); +function createRouter() { + const router = new Router(); + router.get("/", defaultIndexAction); + router.get("/init", bindWebHookAction); + router.post("/telegram/:token/webhook", telegramWebhook); + router.post("/telegram/:token/safehook", telegramSafeHook); + router.all("*", () => new Response("Not Found", { status: 404 })); + return router; } -const zhHans = {"env":{"system_init_message":"你是一个得力的助手"},"command":{"help":{"summary":"当前支持以下命令:\n","help":"获取命令帮助","new":"发起新的对话","start":"获取你的ID, 并发起新的对话","img":"生成一张图片, 命令完整格式为 `/img 图片描述`, 例如`/img 月光下的沙滩`","version":"获取当前版本号, 判断是否需要更新","setenv":"设置用户配置,命令完整格式为 /setenv KEY=VALUE","setenvs":"批量设置用户配置, 命令完整格式为 /setenvs {\"KEY1\": \"VALUE1\", \"KEY2\": \"VALUE2\"}","delenv":"删除用户配置,命令完整格式为 /delenv KEY","clearenv":"清除所有用户配置","system":"查看当前一些系统信息","redo":"重做上一次的对话, /redo 加修改过的内容 或者 直接 /redo","echo":"回显消息"},"new":{"new_chat_start":"新的对话已经开始"}}}; - -const zhHant = {"env":{"system_init_message":"你是一個得力的助手"},"command":{"help":{"summary":"當前支持的命令如下:\n","help":"獲取命令幫助","new":"開始一個新對話","start":"獲取您的ID並開始一個新對話","img":"生成圖片,完整命令格式為`/img 圖片描述`,例如`/img 海灘月光`","version":"獲取當前版本號確認是否需要更新","setenv":"設置用戶配置,完整命令格式為/setenv KEY=VALUE","setenvs":"批量設置用户配置, 命令完整格式為 /setenvs {\"KEY1\": \"VALUE1\", \"KEY2\": \"VALUE2\"}","delenv":"刪除用戶配置,完整命令格式為/delenv KEY","clearenv":"清除所有用戶配置","system":"查看一些系統信息","redo":"重做上一次的對話 /redo 加修改過的內容 或者 直接 /redo","echo":"回显消息"},"new":{"new_chat_start":"開始一個新對話"}}}; - -const pt = {"env":{"system_init_message":"Você é um assistente útil"},"command":{"help":{"summary":"Os seguintes comandos são suportados atualmente:\n","help":"Obter ajuda sobre comandos","new":"Iniciar uma nova conversa","start":"Obter seu ID e iniciar uma nova conversa","img":"Gerar uma imagem, o formato completo do comando é `/img descrição da imagem`, por exemplo `/img praia ao luar`","version":"Obter o número da versão atual para determinar se é necessário atualizar","setenv":"Definir configuração do usuário, o formato completo do comando é /setenv CHAVE=VALOR","setenvs":"Definir configurações do usuário em lote, o formato completo do comando é /setenvs {\"CHAVE1\": \"VALOR1\", \"CHAVE2\": \"VALOR2\"}","delenv":"Excluir configuração do usuário, o formato completo do comando é /delenv CHAVE","clearenv":"Limpar todas as configurações do usuário","system":"Ver algumas informações do sistema","redo":"Refazer a última conversa, /redo com conteúdo modificado ou diretamente /redo","echo":"Repetir a mensagem"},"new":{"new_chat_start":"Uma nova conversa foi iniciada"}}}; - -const en = {"env":{"system_init_message":"You are a helpful assistant"},"command":{"help":{"summary":"The following commands are currently supported:\n","help":"Get command help","new":"Start a new conversation","start":"Get your ID and start a new conversation","img":"Generate an image, the complete command format is `/img image description`, for example `/img beach at moonlight`","version":"Get the current version number to determine whether to update","setenv":"Set user configuration, the complete command format is /setenv KEY=VALUE","setenvs":"Batch set user configurations, the full format of the command is /setenvs {\"KEY1\": \"VALUE1\", \"KEY2\": \"VALUE2\"}","delenv":"Delete user configuration, the complete command format is /delenv KEY","clearenv":"Clear all user configuration","system":"View some system information","redo":"Redo the last conversation, /redo with modified content or directly /redo","echo":"Echo the message"},"new":{"new_chat_start":"A new conversation has started"}}}; - -function i18n(lang) { - switch (lang.toLowerCase()) { - case 'cn': - case 'zh-cn': - case 'zh-hans': - return zhHans; - case 'zh-tw': - case 'zh-hk': - case 'zh-mo': - case 'zh-hant': - return zhHant; - case 'pt': - case 'pt-br': - return pt; - case 'en': - case 'en-us': - return en; - default: - return en; +const index = { + async fetch(request, env) { + try { + ENV.merge(env); + return createRouter().fetch(request); + } catch (e) { + console.error(e); + return new Response(JSON.stringify({ + message: e.message, + stack: e.stack + }), { status: 500 }); } -} - -const main = { - async fetch(request, env, ctx) { - try { - initEnv(env, i18n); - return await handleRequest(request); - } catch (e) { - console.error(e); - return new Response(errorToString(e), { status: 500 }); - } - }, + } }; -export { main as default }; +export { index as default }; diff --git a/dist/timestamp b/dist/timestamp index 8c38245d..84f21b08 100644 --- a/dist/timestamp +++ b/dist/timestamp @@ -1 +1 @@ -1724122033 \ No newline at end of file +1724814473 \ No newline at end of file diff --git a/doc/cn/ACTION.md b/doc/cn/ACTION.md index 5301c9c0..5ccddffa 100644 --- a/doc/cn/ACTION.md +++ b/doc/cn/ACTION.md @@ -5,7 +5,6 @@ ## 2. Fork 本仓库 - ## 3. 创建Cloudflare API TOKEN 要创建一个具有 Workers 权限的 Cloudflare API Token,请按照以下步骤操作: @@ -20,6 +19,7 @@ 7. 点击“Create Token”按钮。 > 现在您已创建一个具有 Workers 权限的 Cloudflare API Token。请记住,API Token 的安全性非常重要,请不要在不必要的情况下共享它,并定期更改 API Token。 + ## 4. 设置 Action 的 Secrets image @@ -50,7 +50,7 @@ uses: repo-sync/github-sync@v2 with: source_repo: 'https://github.com/TBXark/ChatGPT-Telegram-Workers' - target_repo: '填写你的仓库地址' + target_repo: 'https://github.com/YOUR_NAME/ChatGPT-Telegram-Workers' github_token: ${{ secrets.GITHUB_TOKEN }} source_branch: 'master' ``` diff --git a/doc/cn/CHANGELOG.md b/doc/cn/CHANGELOG.md index 66c0601f..321332ff 100644 --- a/doc/cn/CHANGELOG.md +++ b/doc/cn/CHANGELOG.md @@ -1,5 +1,8 @@ # 更新日志 +- v1.9.0 + - 添加插件系统 + - v1.8.0 - 支持Cohere,Anthropic Ai - 支持图片输入 diff --git a/doc/cn/DEPLOY.md b/doc/cn/DEPLOY.md index 60aa1a65..0b189d92 100644 --- a/doc/cn/DEPLOY.md +++ b/doc/cn/DEPLOY.md @@ -1,4 +1,8 @@ -# 部署流程 +# Cloudflare Workers 部署流程 + +> 如果你需要本地部署或者docker部署,请查看[本地部署](LOCAL.md)文档 +> +> 如果你需要部署到Vercel,请查看[Vercel部署示例](../../adapter/vercel/README.md)文档 ## 视频教程 @@ -7,29 +11,28 @@ 感谢 [**科技小白堂**](https://www.youtube.com/@lipeng0820) 提供此视频教程 - - ## 手动部署 -### 一. 新建Telegram机器人, 获得Token +### 1. 新建Telegram机器人, 获得Token image 1. 打开Telegram并向 BotFather 发送 `/start` 命令 2. 发送 `/newbot` 命令,并给你的机器人起一个名字 3. 给你的机器人取一个唯一的用户名以`_bot`结尾 4. BotFather 会生成一个 Token,复制下来保存好,这个 Token 是和你的机器人绑定的密钥,不要泄露给他人! -5. 稍后再Cloudflare Workers 的设置里 将这个 Token 填入 `TELEGRAM_TOKEN` 变量中 +5. 稍后再Cloudflare Workers 的设置里 将这个 Token 填入 `TELEGRAM_AVAILABLE_TOKENS` 变量中 +6. 如果你需要支持群聊或者设置其他Telegram Bot API,请查看[配置文档](CONFIG.md)设置对应变量 - -### 二. 注册OpenAI账号并创建API Key +### 2. 注册OpenAI账号并创建API Key image 1. 打开 [OpenAI](https://platform.openai.com) 注册账号 2. 点击右上角的头像,进入个人设置页面 3. 点击 API Keys,创建一个新的 API Key -4. 稍后再Cloudflare Workers 的设置里 将这个 Token 填入 `API_KEY` 变量中 +4. 稍后再Cloudflare Workers 的设置里 将这个 Token 填入 `OPENAI_API_KEY` 变量中 +5. 如果你使用第三方AI服务,请查看[配置文档](CONFIG.md)设置对应变量 -### 三. 部署Workers +### 3. 部署Workers image 1. 打开 [Cloudflare Workers](https://dash.cloudflare.com/?to=/:account/workers) 注册账号 @@ -37,17 +40,13 @@ 3. 进入新建的workers, 选择`Quick Edit`, 将[`../dist/index.js`](../../dist/index.js)代码复制到编辑器中,保存 -### 四. 配置环境变量 +### 4. 配置环境变量 image 1. 打开 [Cloudflare Workers](https://dash.cloudflare.com/?to=/:account/workers) 点击你的Workers,点击右上角的 Setting -> Variables -2. `API_KEY`:设置成 OpenAI API Key -3. `TELEGRAM_AVAILABLE_TOKENS`:设置成 Telegram Bot Token -4. `CHAT_WHITE_LIST`:设置成允许访问的用户的ID,例如`123456789,987654321`,不知道自己ID可以在和你创建的的机器人聊天中使用`/new`指令获取 -5. `I_AM_A_GENEROUS_PERSON`: 如果还是没有弄懂怎么获取ID,可以设置这个值为`true`,这样就关闭白名单功能,允许所有人访问。 - +2. 查看[配置文档](CONFIG.md)设置必须填写的环境变量 -### 五. 绑定KV数据 +### 5. 绑定KV数据 1. 在`首页-Workers-KV`, 点击右上角的 `Create a Namespace`, 名字随便取, 但是绑定的时候必须设定为`DATABASE`
image 2. 打开 [Cloudflare Workers](https://dash.cloudflare.com/?to=/:account/workers) 点击你的Workers 3. 点击右上角的 Setting -> Variables
image @@ -55,7 +54,7 @@ 5. 点击 `Add variable` 6. 设置名字为`DATABASE` 并选择刚刚创建的KV数据 -### 六. 初始化 +### 6. 初始化 1. 运行 `https://workers_name.username.workers.dev/init` 自动绑定telegram的webhook和设定所有指令 @@ -63,13 +62,11 @@ image 1. 开始新对话,使用`/new`指令开始,之后每次都会将聊天上下文发送到ChatGPT -2. 使用`/setenv KEY=VALUE`指令修改用户配置,例如`SETENV SYSTEM_INIT_MESSAGE=现在开始是喵娘,每句话已喵结尾` -3. 因为每次对话都会把所有历史记录带上,容易达到4096的token限制,所以没事的时候`/new`一下,清理一下历史记录 - +2. 如果想了解其他指令的使用办法,请查看[配置文档](CONFIG.md) -## 自动部署 -1. 手动部署的一, 二, 三 步骤 +## 命令行部署 +1. 准备部署所需的 Telegram Bot Token 和 OpenAI API Key 2. `mv wrangler-example.toml wrangler.toml`, 然后修改相应配置 -3. `npm install` -4. `npm run deploy:build` +3. `yarn install` +4. `yarn run deploy:build` diff --git a/doc/cn/LOCAL.md b/doc/cn/LOCAL.md new file mode 100644 index 00000000..c9151c48 --- /dev/null +++ b/doc/cn/LOCAL.md @@ -0,0 +1,78 @@ +# 本地部署 + + +## 配置 + +### 1. 服务器配置`CONFIG_PATH` + +```json5 +{ + "database": { + "type": "local",// memory, local, sqlite, redis + "path": "/app/data.json" // your database path + }, + "server": { // server configuration for webhook mode + "hostname": "0.0.0.0", + "port": 3000, // must 8787 when using docker + "baseURL": "https://example.com" + }, + 'proxy': 'http://127.0.0.1:7890', // proxy for telegram api + "mode": "webhook", // webhook, polling +} +``` + +### 2. toml 配置`TOML_PATH` +toml 内容与cloudflare workers配置文件兼容 + + +## 本地运行 + +```shell +npm install +npm run start:local +``` +or + +```shell +npm install +npm run build:local +CONFIG_PATH=./config.json TOML_PATH=./wrangler.toml npm run start:dist +``` + + +## Docker 运行 + +### 1. 编译image + +```bash +docker build -t chatgpt-telegram-workers:latest . +``` +or +```shell +npm run build:docker # 更快(直接使用本地构建的结果创建镜像) +``` + +### 2. 运行容器 + +```bash +docker run -d -p 8787:8787 -v $(pwd)/config.json:/app/config.json:ro -v $(pwd)/wrangler.toml:/app/config.toml:ro chatgpt-telegram-workers:latest +``` + + +## docker-compose 运行 + +自行修改docker-compose.yml中的配置文件路径 + +```bash +docker-compose up # edit the docker-compose.yml to change the config file path +``` + + +## 使用Docker hub镜像 + +https://hub.docker.com/r/tbxark/chatgpt-telegram-workers + +```shell +docker pull tbxark/chatgpt-telegram-workers +docker run -d -p 8787:8787 -v $(pwd)/config.json:/app/config.json:ro -v $(pwd)/wrangler.toml:/app/config.toml:ro chatgpt-telegram-workers:latest +``` diff --git a/doc/cn/PLATFORM.md b/doc/cn/PLATFORM.md index 447d0d09..35b627f5 100644 --- a/doc/cn/PLATFORM.md +++ b/doc/cn/PLATFORM.md @@ -3,16 +3,13 @@ ### 1. [Cloudflare Workers](https://workers.cloudflare.com/) 最简单的方法,本项目默认支持的部署方式,详情看[部署流程](DEPLOY.md)。免费,无需域名,无需服务器,无需配置本地开发环境。KV存储,无需数据库,但是有一定的存储限制, -> KV每天写入限制为1000次,不过对于聊天机器人来说,应该够用了。(调试模式`DEBUG_MODE`会保存最新一条消息到KV,token统计每次对话成功都会更新统计数据,所以会有一定的写入次数。如果你经常使用次数超过1000次,可以考虑关闭调试模式和者使用统计) + ### 2. [Vercel](https://vercel.com/) 详情看[Vercel](../../adapter/vercel/README.md)。免费,无需域名,无需服务器。需要配置本地开发环境部署,不能通过复制粘贴部署。无存储服务,需要自己配置数据库。可以使用[Redis Cloud](https://redis.com)的免费redis。可以连接github自动部署,但是需要了解vercel的配置。 -### 3. [Render](https://render.com/) - -详情看[Render](../../adapter/render)。免费,无需域名,无需服务器。需要有一定的开发能力。 -### 4. Local +### 3. Local -详情看[Local](../../adapter/local/README.md)。本地的部署方式,需要配置本地开发环境,需要有一定的开发能力。 +详情看[Local](LOCAL.md)。本地的部署方式,需要配置本地开发环境,需要有一定的开发能力。支持docker部署。 diff --git a/doc/en/ACTION.md b/doc/en/ACTION.md index 2d4554c8..d3310222 100644 --- a/doc/en/ACTION.md +++ b/doc/en/ACTION.md @@ -14,12 +14,13 @@ To create a Cloudflare API Token with Workers permissions, follow these steps: 3. Click the "Create Token" button. 4. Choose "Edit Cloudflare Workers" from the API token templates. image -6. In the "Zone Resources" dropdown menu, select the zone you want to authorize. -7. In the "Account Resources" dropdown menu, select the account you want to authorize. +5. In the "Zone Resources" dropdown menu, select the zone you want to authorize. +6. In the "Account Resources" dropdown menu, select the account you want to authorize. image -8. Click the "Create Token" button. +7. Click the "Create Token" button. > You have now created a Cloudflare API Token with Workers permissions. Remember, API Token security is very important. Do not share it unnecessarily and change your API Token regularly. + ## 4. Set up Secrets for Actions image @@ -53,4 +54,4 @@ To create a Cloudflare API Token with Workers permissions, follow these steps: target_repo: 'Fill in your repository address' github_token: ${{ secrets.GITHUB_TOKEN }} source_branch: 'master' - ``` \ No newline at end of file + ``` diff --git a/doc/en/CHANGELOG.md b/doc/en/CHANGELOG.md index 2da893a6..d3d72e98 100644 --- a/doc/en/CHANGELOG.md +++ b/doc/en/CHANGELOG.md @@ -1,5 +1,8 @@ # Changelog +- v1.9.0 + - Add plugin system + - v1.8.0 - Support Cohere, Anthropic Ai - Support image input. diff --git a/doc/en/DEPLOY.md b/doc/en/DEPLOY.md index 7ae7b964..9f5b916e 100644 --- a/doc/en/DEPLOY.md +++ b/doc/en/DEPLOY.md @@ -1,71 +1,79 @@ -# Deployment Process +# Cloudflare Workers Deployment Guide -## Video Tutorial +> If you need local deployment or Docker deployment, please refer to the [Local Deployment](LOCAL.md) documentation. +> +> If you need to deploy to Vercel, please check the [Vercel deployment example](../../adapter/vercel/README.md) documentation. + + +## Video tutorial image -Thanks to [**lipeng0820**](https://www.youtube.com/@lipeng0820) for providing this video tutorial. +Thank [**科技小白堂**](https://www.youtube.com/@lipeng0820) for providing this video tutorial. -## Manual Deployment -### Step 1. Create a Telegram Bot and Obtain a Token +## Manual deployment + +### 1. Create a new Telegram bot, obtain the Token. image 1. Open Telegram and send the `/start` command to BotFather. -2. Send the `/newbot` command to BotFather and give your bot a name. -3. Give your bot a unique username that ends with `_bot`. -4. BotFather will generate a Token. Copy and save this Token. This Token is the secret key that is bound to your bot. Do not disclose it to others! -5. Later, in the settings of Cloudflare Workers, fill in this Token in the `TELEGRAM_TOKEN` variable. +2. Send the `/newbot` command and give your bot a name. +3. Give your bot a unique username ending with `_bot`. +4. BotFather will generate a Token; copy it and save it. This Token is the key linked to your bot, do not disclose it to others! +5. Later, in the Cloudflare Workers settings, fill this Token into the `TELEGRAM_AVAILABLE_TOKENS` variable. +6. If you need to support group chats or set up other Telegram Bot APIs, please refer to the [configuration documentation](CONFIG.md) to set the corresponding variables. -### Step 2. Register an OpenAI Account and Create an API Key +### 2. Register an OpenAI account and create an API Key. image -1. Open [OpenAI](https://platform.openai.com) and register an account. +1. Open [OpenAI](https://platform.openai.com) to register an account. 2. Click on the avatar in the upper right corner to enter the personal settings page. -3. Click on API Keys and create a new API Key. -4. Later, in the settings of Cloudflare Workers, fill in this API Key in the `API_KEY` variable. +3. Click on API Keys to create a new API Key. +4. Later, in the Cloudflare Workers settings, fill this Token into the `OPENAI_API_KEY` variable. +5. If you are using third-party AI services, please refer to the [configuration document](CONFIG.md) to set the corresponding variables. -### Step 3. Deploy Workers +### 3. Deploy Workers image 1. Open [Cloudflare Workers](https://dash.cloudflare.com/?to=/:account/workers) and register an account. 2. Click on `Create a Service` in the upper right corner. -3. Enter the newly created Workers, select `Quick Edit`, copy the [`../dist/index.js`](../../dist/index.js) code into the editor, and save. +3. Enter the newly created workers, select `Quick Edit`, copy the code from [`../dist/index.js`](../../dist/index.js) into the editor, and save. -### Step 4. Configure Environment Variables +### 4. Configure environment variables image -1. Open [Cloudflare Workers](https://dash.cloudflare.com/?to=/:account/workers), click on your Workers, and click on Setting -> Variables in the upper right corner. -2. `API_KEY`: Set it to your OpenAI API Key. -3. `TELEGRAM_AVAILABLE_TOKENS`: Set it to your Telegram Bot Token. -4. `CHAT_WHITE_LIST`: Set it to the IDs of users who are allowed to access, for example, `123456789,987654321`. If you don't know your ID, use the `/new` command to obtain it in conversation with the bot you created. -5. `I_AM_A_GENEROUS_PERSON`: If you still don't understand how to obtain the ID, you can set this value to `true` to turn off the whitelist function and allow everyone to access. +1. Open [Cloudflare Workers](https://dash.cloudflare.com/?to=/:account/workers), click on your Workers, then click on the top right corner's Setting -> Variables. +2. Check the [configuration document](CONFIG.md) for the required environment variables that must be filled in. +### 5. Bind KVNamespace -### Step 5. Bind KV Data -1. Click on `Create a Namespace` at the top right corner of `Home-Workers-KV`, name it whatever you want, but when binding it, set it as `DATABASE`.
image +1. In `Home-Workers-KV`, click on the `Create a Namespace` in the upper right corner, name it whatever you like, but it must be set to `DATABASE` when binding.
image 2. Open [Cloudflare Workers](https://dash.cloudflare.com/?to=/:account/workers) and click on your Workers. -3. Click on `Setting` at the top right corner and choose `Variables`.
image -4. Click on `Edit variables` under `KV Namespace Bindings`. -5. Click on `Add variable`. -6. Name it `DATABASE` and choose the KV data you just created. +3. Click in the upper right corner Setting -> Variables
image +4. In `KV Namespace Bindings`, click `Edit variables`. +5. Click `Add variable`. +6. Set the name to `DATABASE` and select the KV data you just created. + -### Step 6. Initialization -1. Run `https://workers_name.username.workers.dev/init` to automatically bind Telegram webhook and set all commands. +### 6. Initialization +1. Run `https://workers_name.username.workers.dev/init` to automatically bind the Telegram webhook and set all commands. -### Step 7. Start Chatting + +### 七. Start chatting image -1. Start a new conversation by using the `/new` command. The chat context will be sent to ChatGPT every time. -2. Modify user settings with the `/setenv KEY=VALUE` command, for example, `SETENV SYSTEM_INIT_MESSAGE=Starting now is Meow, and each sentence ends with Meow`. -3. Since all historical records are carried with each conversation, it is easy to reach the 4096 token limit, so clear the history by using the `/new` command when necessary. +1. Start a new conversation by using the `/new` command, and thereafter, the chat context will be sent to ChatGPT each time. +2. If you want to learn how to use other commands, please refer to the [configuration document](CONFIG.md). + + +## Command Line Deployment -## Automatic Deployment -1. Steps one, two, and three are for manual deployment. -2. Run `mv wrangler-example.toml wrangler.toml` and modify the corresponding configuration. -3. Run `npm install`. -4. Run `npm run deploy:build`. +1. Prepare the required Telegram Bot Token and OpenAI API Key +2. `mv wrangler-example.toml wrangler.toml`, then modify the corresponding configuration +3. `yarn install` +4. `yarn run deploy:build` diff --git a/doc/en/LOCAL.md b/doc/en/LOCAL.md new file mode 100644 index 00000000..4aeb799d --- /dev/null +++ b/doc/en/LOCAL.md @@ -0,0 +1,78 @@ +# Local deployment + + +## Configuration + +### 1. Server Configuration`CONFIG_PATH` + +```json5 +{ + "database": { + "type": "local",// memory, local, sqlite, redis + "path": "/app/data.json" // your database path + }, + "server": { // server configuration for webhook mode + "hostname": "0.0.0.0", + "port": 3000, // must 8787 when using docker + "baseURL": "https://example.com" + }, + 'proxy': 'http://127.0.0.1:7890', // proxy for telegram api + "mode": "webhook", // webhook, polling +} +``` + +### 2. TOML configuration`TOML_PATH` +The toml content is compatible with Cloudflare Workers configuration files. + + +## Local run + +```shell +npm install +npm run start:local +``` +or + +```shell +npm install +npm run build:local +CONFIG_PATH=./config.json TOML_PATH=./wrangler.toml npm run start:dist +``` + + +## Docker + +### 1. Build image + +```bash +docker build -t chatgpt-telegram-workers:latest . +``` +or +```shell +npm run build:docker # Faster (directly use the locally built results to create the image) +``` + +### 2. Run container + +```bash +docker run -d -p 8787:8787 -v $(pwd)/config.json:/app/config.json:ro -v $(pwd)/wrangler.toml:/app/config.toml:ro chatgpt-telegram-workers:latest +``` + + +## docker-compose + +Manually modify the configuration file path in docker-compose.yml. + +```bash +docker-compose up # edit the docker-compose.yml to change the config file path +``` + + +## Use docker hub image + +https://hub.docker.com/r/tbxark/chatgpt-telegram-workers + +```shell +docker pull tbxark/chatgpt-telegram-workers +docker run -d -p 8787:8787 -v $(pwd)/config.json:/app/config.json:ro -v $(pwd)/wrangler.toml:/app/config.toml:ro chatgpt-telegram-workers:latest +``` diff --git a/doc/en/PLATFORM.md b/doc/en/PLATFORM.md index 76a3b23c..48b5c26f 100644 --- a/doc/en/PLATFORM.md +++ b/doc/en/PLATFORM.md @@ -8,13 +8,8 @@ The easiest way, the deployment method supported by this project by default, see ### 2. [Vercel](https://vercel.com/) -See details at [Vercel](../../adapter/vercel). It is free, does not require a domain name or server. Deployment requires configuring the local development environment and cannot be done by copying and pasting. There is no storage service, so you need to configure your own database. You can use the free Redis from [Redis Cloud](https://redis.com). It can connect to GitHub for automatic deployment, but you need to understand Vercel's configuration. +See details at [Vercel](../../adapter/vercel/README.md). It is free, does not require a domain name or server. Deployment requires configuring the local development environment and cannot be done by copying and pasting. There is no storage service, so you need to configure your own database. You can use the free Redis from [Redis Cloud](https://redis.com). It can connect to GitHub for automatic deployment, but you need to understand Vercel's configuration. +### 3. Local -### 3. [Render](https://render.com/) - -See [Render](../../adapter/render) for details.. Free, no domain name, no server required. Some development skills are required. - -### 4. Local - -See [Local](../../adapter/local) for details. For local deployment method, you need to configure local development environment. \ No newline at end of file +See [Local](LOCAL.md) for details. For local deployment method, you need to configure local development environment. Supports Docker deployment. diff --git a/docker-compose.yaml b/docker-compose.yaml new file mode 100644 index 00000000..24201fbe --- /dev/null +++ b/docker-compose.yaml @@ -0,0 +1,9 @@ +name: chatgpt-telegram-workers +services: + chatgpt-telegram-workers: + build: . + ports: + - "8787:8787" + volumes: + - ./config.json:/app/config.json:ro # change `./config.json` to your local path + - ./wrangler.toml:/app/config.toml:ro # change `./wrangler.toml` to your local path diff --git a/eslint.config.js b/eslint.config.js index 3e1a2246..786b1431 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -1,4 +1,4 @@ -import antfu, { imports, javascript, jsdoc, node } from '@antfu/eslint-config'; +import antfu, { imports, javascript, jsdoc, node, typescript } from '@antfu/eslint-config'; export default antfu( { @@ -10,6 +10,7 @@ export default antfu( braceStyle: '1tbs', }, markdown: false, + typescript: true, ignores: [ '.github/**', '.idea/**', @@ -21,6 +22,7 @@ export default antfu( }, imports, jsdoc, + typescript, javascript, node, { diff --git a/main.js b/main.js deleted file mode 100644 index 4e0d99c6..00000000 --- a/main.js +++ /dev/null @@ -1,23 +0,0 @@ -import { initEnv } from './src/config/env.js'; -import { handleRequest } from './src/route.js'; -import { errorToString } from './src/utils/utils.js'; -import i18n from './src/i18n/index.js'; - -export default { - /** - * @param {Request} request - * @param {object} env - * @param {object} ctx - * @returns {Promise} - */ - // eslint-disable-next-line unused-imports/no-unused-vars - async fetch(request, env, ctx) { - try { - initEnv(env, i18n); - return await handleRequest(request); - } catch (e) { - console.error(e); - return new Response(errorToString(e), { status: 500 }); - } - }, -}; diff --git a/package.json b/package.json index 8e4c75e9..51b185d5 100644 --- a/package.json +++ b/package.json @@ -1,36 +1,51 @@ { "name": "chatgpt-telegram-workers", "type": "module", - "version": "1.8.0", + "version": "1.9.0", "description": "The easiest and quickest way to deploy your own ChatGPT Telegram bot is to use a single file and simply copy and paste it. There is no need for any dependencies, local development environment configuration, domain names, or servers.", "author": "TBXark", "license": "MIT", "exports": { ".": { - "import": "./dist/index.js" + "types": "./dist/index.d.ts", + "import": "./dist/index.js", + "require": "./dist/index.cjs" } }, + "main": "dist/index.cjs", "module": "dist/index.js", + "types": "dist/index.d.ts", "files": [ "dist" ], "scripts": { - "lint": "eslint --fix *.js *.json src adapter", + "lint": "eslint --fix *.js *.ts *.json src adapter", "build": "vite build", - "debug": "wrangler dev --local", - "wrangler": "wrangler", + "build:local": "BUILD_MODE=local vite build", + "build:docker": "npm run build:local && cd dist && docker build -t chatgpt-telegram-workers:latest .", "deploy:dist": "wrangler deploy", - "deploy:build": "npm run build && wrangler deploy" + "deploy:build": "npm run build && wrangler deploy", + "start:dist": "node dist/index.js", + "start:local": "CONFIG_PATH=./config.json TOML_PATH=./wrangler.toml tsx src/adapter/local.ts", + "start:debug": "wrangler dev --local" + }, + "dependencies": { + "cloudflare-worker-adapter": "^1.3.0" }, - "dependencies": {}, "devDependencies": { - "@antfu/eslint-config": "^2.25.1", + "@antfu/eslint-config": "^2.27.3", "@rollup/plugin-node-resolve": "^15.2.3", + "@types/node": "^22.5.1", "eslint": "^9.8.0", "eslint-plugin-format": "^0.1.2", "rollup-plugin-cleanup": "^3.2.1", + "rollup-plugin-node-externals": "^7.1.3", + "telegram-bot-api-types": "^7.9.10", + "tsx": "^4.19.0", "typescript": "^5.5.4", - "vite": "^5.2.10", - "wrangler": "^3.69.1" + "vite": "^5.4.2", + "vite-plugin-checker": "^0.7.2", + "vite-plugin-dts": "^4.0.3", + "wrangler": "^3.72.3" } } diff --git a/plugins/README.md b/plugins/README.md new file mode 100644 index 00000000..e798e2a5 --- /dev/null +++ b/plugins/README.md @@ -0,0 +1,162 @@ +# Plugin System + +> The plugin system is still under development, and the functions may change, but the documentation will be updated as much as possible. + + +# What is a plugin system? + +A plugin system is a system that allows users to customize functions. Users can add new functions through the plugin system. The definition of a plugin is a JSON file, and users can call the plugin by binding the corresponding command. + + +## Plugin structure + +```typescript + + +/** + * TemplateInputType: The type of input data, converting the data input from Telegram into the corresponding data type + * json: JSON format + * space-separated: Space-separated string + * comma-separated: Comma-separated string + * text: Text, not split (default value) + */ +export type TemplateInputType = 'json' | 'space-separated' | 'comma-separated' | 'text'; + +/** + * TemplateBodyType: The type of the request body + * json: JSON format, at this time the value of the content field should be an object, where the key is a fixed value, and the value supports interpolation + * form: Form format, at this time the value of the content field should be an object, where the key is a fixed value, and the value supports interpolation + * text: Text format, at this time the value of the content field should be a string, supporting interpolation + */ +export type TemplateBodyType = 'json' | 'form' | 'text'; + +/** + * TemplateResponseType: The type of response body + * json: JSON format, at this time the response body will be parsed into JSON format and passed to the next template for rendering + * text: Text format, at this time the response body will be parsed into text format and passed to the next template for rendering + */ +export type TemplateResponseType = 'json' | 'text'; + +/** + * TemplateOutputType: The type of output data + * text: Text format, sends the rendering result as plain text to Telegram + * image: Image format, sends the rendering result as an image URL to Telegram + * html: HTML format, sends the rendering result in HTML format to Telegram + * markdown: Markdown format, sends the rendering result in Markdown format to Telegram + */ +export type TemplateOutputType = 'text' | 'image' | 'html' | 'markdown'; + +export interface RequestTemplate { + url: string; // Required, supports interpolation + method: string; // Required, fixed value + headers: { [key: string]: string }; // Optional, Key is a fixed value, Value supports interpolation. + input: { + type: TemplateInputType; + }; + query: { [key: string]: string }; // Optional, Key is a fixed value, Value supports interpolation. + body: { + type: TemplateBodyType; + content: { [key: string]: string } | string; // When content is an object, Key is a fixed value, and Value supports interpolation. When content is a string, it supports interpolation. + }; + response: { + content: { // Required, handling when the request is successful. + input_type: TemplateResponseType; + output_type: TemplateOutputType; + output: string; + }; + error: { // Required, handling when the request fails. + input_type: TemplateResponseType; + output_type: TemplateOutputType; + output: string; + }; + }; +} +``` + + +## Plugin Usage + +For example, define the following variables in the environment variables: + +```toml +PLUGIN_COMMAND_dns = "https://raw.githubusercontent.com/TBXark/ChatGPT-Telegram-Workers/dev/plugins/dns.json" +PLUGIN_COMMAND_DESCRIPTION_dns = "DNS query /dns " +``` + +Then enter `/dns A www.baidu.com` in the command line to call the plugin. +Where `PLUGIN_COMMAND_dns` is the address of the plugin's json file, and `PLUGIN_DESCRIPTION_dns` is the description of the plugin. +`PLUGIN_COMMAND_dns` can be a complete json or a url of a json. + + +## Interpolation Template + +You can test the interpolation template in the [interpolation template test page](https://interpolate-test.pages.dev). + +```html + {{title}} + + {{#each item in items}} + {{#each:item i in item}} + {{ i.value }} + {{#if i.enable}} + {{#if:sub i.subEnable}} + sub enable + {{#else:sub}} + sub disable + {{/if:sub}} + {{#else}} + disable + {{/if}} + {{/each:item}} + {{/each}} + +``` + +1. `{{title}}` represents the variable of interpolation template, supporting key path and array subscript. +2. `{{#each item in items}}` represents traversing the array items, item is each element of the array, and must include the ending `{{/each}}`. +3. `{{#each:item i in item}}` Nested traversal operations need to add aliases to the traversal, and the ending also needs to correspond to the alias `{{/each:item}}`. +4. `{{#if i.enable}}` represents conditional judgment. The judgment condition does not support expressions and can only judge non-empty and non-zero. It must include the ending `{{/if}}`. +5. `{{#else}}` represents the negative branch of conditional judgment. +6. `{{#if:sub i.subEnable}}` Nested conditional judgment needs to add aliases to the condition, and the ending also needs to correspond to the alias `{{/if:sub}}`. +7. There should be no spaces in the interpolation or expression in `{{}}`, otherwise it will be parsed as a string. For example, this is an incorrect interpolation `{{ title }}`. +8. `{{.}}` represents the current data, which can be used in `#each` or globally. + + +## Interpolation Variables + +The default data structure passed into interpolation is as follows: + +```json +{ + "DATA": [], + "ENV": {} +} +``` + +1. Among them, `DATA` is the data input by the user, and the data structure of DATA varies according to different `TemplateInputType`. +2. `ENV` is an environment variable that users can use to pass in data. The plugin's environment variables are isolated from the global environment variables and require different syntax to pass in. + + +## Plugin Environment Variables + +You can save the token required for the request in the plugin environment variables. The plugin environment variables must start with `PLUGIN_ENV_`, for example: +```toml +PLUGIN_ENV_access_token = "xxxx" +``` + +It will be parsed as. + +```json +{ + "DATA": [], + "ENV": { + "access_token": "xxxx" + } +} +``` + + +## Plugin Examples + +1. [DNS Query Plugin Example](dns.json) +2. [Dictionary Query Plugin Example](dicten.json) diff --git a/plugins/README_CN.md b/plugins/README_CN.md new file mode 100644 index 00000000..32bd36ec --- /dev/null +++ b/plugins/README_CN.md @@ -0,0 +1,161 @@ +# 插件系统 + +> 插件系统还在开发中,功能可能会有变动但是文档会尽量保持更新 + + +## 插件系统是什么? + +插件系统是一种允许用户自定义功能的系统。用户可以通过插件系统添加新的功能,插件的定义是一个json文件,用户通过绑定对应的命令来调用插件。 + + +## 插件的结构 + +```typescript + +/** + * TemplateInputType: 输入数据的类型,将Telegram输入的数据转换为对应的数据类型 + * json: JSON格式 + * space-separated: 以空格分隔的字符串 + * comma-separated: 以逗号分隔的字符串 + * text: 文本,不分割(默认值) + */ +export type TemplateInputType = 'json' | 'space-separated' | 'comma-separated' | 'text'; + +/** + * TemplateBodyType: 请求体的类型 + * json: JSON格式, 此时对于content字段的值应该为一个对象,其中的key为固定值,Value支持插值 + * form: 表单格式, 此时对于content字段的值应该为一个对象,其中的key为固定值,Value支持插值 + * text: 文本格式, 此时对于content字段的值应该为一个字符串,支持插值 + */ +export type TemplateBodyType = 'json' | 'form' | 'text'; + +/** + * TemplateResponseType: 响应体的类型 + * json: JSON格式, 此时会将响应体解析为JSON格式交给下一个模板渲染 + * text: 文本格式, 此时会将响应体解析为文本格式交给下一个模板渲染 + */ +export type TemplateResponseType = 'json' | 'text'; + +/** + * TemplateOutputType: 输出数据的类型 + * text: 文本格式, 将渲染结果作为纯文本发送到telegram + * image: 图片格式, 将渲染结果作为图片url发送到telegram + * html: HTML格式, 将渲染结果作为HTML格式发送到telegram + * markdown: Markdown格式, 将渲染结果作为Markdown格式发送到telegram + */ +export type TemplateOutputType = 'text' | 'image' | 'html' | 'markdown'; + +export interface RequestTemplate { + url: string; // 必选, 支持插值 + method: string; // 必选, 固定值 + headers: { [key: string]: string }; // 可选, Key为固定值,Value支持插值 + input: { + type: TemplateInputType; + }; + query: { [key: string]: string }; // 可选, Key为固定值,Value支持插值 + body: { + type: TemplateBodyType; + content: { [key: string]: string } | string; // content为对象时Key为固定值,Value支持插值。content为字符串时支持插值 + }; + response: { + content: { // 必选, 当请求成功时的处理 + input_type: TemplateResponseType; + output_type: TemplateOutputType; + output: string; + }; + error: { // 必选, 当请求失败时的处理 + input_type: TemplateResponseType; + output_type: TemplateOutputType; + output: string; + }; + }; +} +``` + +## 插件的使用 + +例如在环境变量中定义如下变量 + +```toml +PLUGIN_COMMAND_dns = "https://raw.githubusercontent.com/TBXark/ChatGPT-Telegram-Workers/dev/plugins/dns.json" +PLUGIN_COMMAND_DESCRIPTION_dns = "DNS查询 /dns <类型> <域名>" +``` + +然后在命令行中输入`/dns A www.baidu.com`即可调用插件 + +其中`PLUGIN_COMMAND_dns`是插件的json文件地址,`PLUGIN_DESCRIPTION_dns`是插件的描述。 +`PLUGIN_COMMAND_dns`可以是完整的json也可以是一个json的url + + +## 插值模板 + +您可以在[插值模板测试页面](https://interpolate-test.pages.dev)中测试插值模板。 + +```html + {{title}} + + {{#each item in items}} + {{#each:item i in item}} + {{ i.value }} + {{#if i.enable}} + {{#if:sub i.subEnable}} + sub enable + {{#else:sub}} + sub disable + {{/if:sub}} + {{#else}} + disable + {{/if}} + {{/each:item}} + {{/each}} + +``` + +1. `{{title}}` 代表插值模板的变量,支持键路径和数组下标 +2. `{{#each item in items}}` 代表遍历数组items, item是数组的每一个元素,必须包含结尾 `{{/each}}` +3. `{{#each:item i in item}}` 嵌套遍历操作需要给遍历添加别名,结尾也需要对应的别名 `{{/each:item}}` +4. `{{#if i.enable}}` 代表条件判断,判断条件不支持表达式,只能判断非,非空,非0,必须包含结尾 `{{/if}}` +5. `{{#else}}` 代表条件判断的否定分支 +6. `{{#if:sub i.subEnable}}` 嵌套代表条件判断需要给条件添加别名,结尾也需要对应的别名 `{{/if:sub}}` +7. 所有`{{}}`中的插值或者表达式不能有空格,否则会被解析为字符串,比如这个就是一个错误的插值 `{{ title }}` +8. `{{.}}` 代表当前的数据, 可以在`#each`中使用或者全局使用 + + +## 插值的变量 + +默认传入插值的数据结构如下 + +```json +{ + "DATA": [], + "ENV": {} +} +``` + +1. 其中`DATA`为用户输入的数据,根据`TemplateInputType`的不同,DATA的数据结构也不同 +2. `ENV`为环境变量,用户可以通过环境变量传入数据,插件的环境变量与全局的环境变量隔离,需要不同的语法传入 + + +## 插件环境变量 + +你可以在插件环境变量中保存请求所需的token,插件环境变量必须以`PLUGIN_ENV_`开头,例如 + +```toml +PLUGIN_ENV_access_token = "xxxx" +``` + +就会被解析成 + +```json +{ + "DATA": [], + "ENV": { + "access_token": "xxxx" + } +} +``` + +## 插件示例 + +1. [DNS查询插件示例](dns.json) +2. [字典查询插件示例](dicten.json) diff --git a/plugins/dicten.json b/plugins/dicten.json new file mode 100644 index 00000000..b7bcd358 --- /dev/null +++ b/plugins/dicten.json @@ -0,0 +1,16 @@ +{ + "url": "https://api.dictionaryapi.dev/api/v2/entries/en/{{DATA}}", + "method": "GET", + "response": { + "content": { + "input_type": "json", + "output_type": "html", + "output": "{{#each word in .}}\n{{word.word}}{{#if word.phonetic}}{{word.phonetic}}{{/if}}\n{{#each:word meanings in word.meanings}}\n + {{meanings.partOfSpeech}}\n {{#each:meanings definitions in meanings.definitions}}\n {{definitions.definition}}\n {{/each:meanings}}\n{{/each:word}}\n{{/each}}\n" + }, + "error": { + "input_type": "json", + "output_type": "text", + "output": "Error: {{message}}" + } + } +} diff --git a/plugins/dns.json b/plugins/dns.json new file mode 100644 index 00000000..32fee90b --- /dev/null +++ b/plugins/dns.json @@ -0,0 +1,26 @@ +{ + "url": "https://cloudflare-dns.com/dns-query", + "method": "GET", + "headers": { + "accept": "application/dns-json" + }, + "input": { + "type": "space-separated" + }, + "query": { + "type": "{{DATA[0]}}", + "name": "{{DATA[1]}}" + }, + "response": { + "content": { + "input_type": "json", + "output_type": "html", + "output": "\nDNS query: {{Question[0].name}}\nStatus: {{#if TC}}TC,{{/if}}{{#if RD}}RD,{{/if}}{{#if RA}}RA,{{/if}}{{#if AD}}AD,{{/if}}{{#if CD}}CD,{{/if}}{{Status}}\n\nAnswer{{#each answer in Answer}}\n{{answer.name}}, {{answer.type}}, (TTL: {{answer.TTL}}),{{answer.data}}{{/each}}\n" + }, + "error": { + "input_type": "json", + "output_type": "text", + "output": "Error: {{error}}" + } + } +} diff --git a/plugins/index.html b/plugins/index.html new file mode 100644 index 00000000..d152cfba --- /dev/null +++ b/plugins/index.html @@ -0,0 +1,183 @@ + + + + + + + ChatGPT-Telegram-Workers + + + + + +
+
+

template

+ +
+
+

data

+ +
+
+

preview

+

+    
+
+ + + + + + \ No newline at end of file diff --git a/src/README.md b/src/README.md deleted file mode 100644 index d83c968a..00000000 --- a/src/README.md +++ /dev/null @@ -1,8 +0,0 @@ -# Project Architecture - -1. **agent**: AI chatbot agent -2. **config**: Environment configuration and context -3. **i18n**: Internationalization -4. **telegram**: Telegram bot -5. **types**: Shared types definition -6. **utils**: Utility functions diff --git a/src/adapter/docker/index.ts b/src/adapter/docker/index.ts new file mode 100644 index 00000000..4dae04b7 --- /dev/null +++ b/src/adapter/docker/index.ts @@ -0,0 +1,41 @@ +import * as fs from 'node:fs/promises'; +import path from 'node:path'; + +const dockerfile = ` +FROM node:alpine as PROD + +WORKDIR /app +COPY index.js package.json /app/ +RUN npm install --only=production --omit=dev +RUN apk add --no-cache sqlite +EXPOSE 8787 +CMD ["npm", "run", "start"] +`; + +const packageJson = ` +{ + "name": "chatgpt-telegram-workers", + "type": "module", + "version": "1.8.0", + "author": "TBXark", + "license": "MIT", + "module": "index.js", + "scripts": { + "start": "node index.js" + }, + "dependencies": { + "cloudflare-worker-adapter": "^1.2.3" + }, + "devDependencies": {} +} +`; + +export function createDockerPlugin(targetDir: string) { + return { + name: 'docker', + async closeBundle() { + await fs.writeFile(path.resolve(targetDir, 'Dockerfile'), dockerfile.trim()); + await fs.writeFile(path.resolve(targetDir, 'package.json'), packageJson.trim()); + }, + }; +} diff --git a/src/adapter/local.ts b/src/adapter/local.ts new file mode 100644 index 00000000..2ef20bd6 --- /dev/null +++ b/src/adapter/local.ts @@ -0,0 +1,102 @@ +import * as fs from 'node:fs'; +import { defaultRequestBuilder, initEnv, startServerV2 } from 'cloudflare-worker-adapter/serve'; +import type { GetUpdatesResponse } from 'telegram-bot-api-types'; +import { installFetchProxy } from 'cloudflare-worker-adapter/proxy'; +import { createCache } from 'cloudflare-worker-adapter/cache'; +import { ENV } from '../config/env'; +import type { TelegramBotAPI } from '../telegram/api'; +import { createTelegramBotAPI } from '../telegram/api'; +import { handleUpdate } from '../telegram/handler'; +import { createRouter } from '../route'; + +const { + CONFIG_PATH = '/app/config.json', + TOML_PATH = '/app/config.toml', +} = process.env; + +interface Config { + database: { + type: 'memory' | 'local' | 'sqlite' | 'redis'; + path?: string; + }; + server?: { + hostname?: string; + port?: number; + baseURL: string; + }; + proxy?: string; + mode: 'webhook' | 'polling'; +} + +// 读取配置文件 +const config: Config = JSON.parse(fs.readFileSync(CONFIG_PATH, 'utf-8')); + +if (config.proxy) { + installFetchProxy(config.proxy); +} + +// 初始化数据库 +const cache = createCache(config?.database?.type, { + uri: config.database.path || '', +}); +console.log(`database: ${config?.database?.type} is ready`); + +// 初始化环境变量 +const env = initEnv(TOML_PATH, { DATABASE: cache }); +ENV.merge(env); + +// long polling 模式 +async function runPolling() { + const clients: Record = {}; + const offset: Record = {}; + for (const token of ENV.TELEGRAM_AVAILABLE_TOKENS) { + offset[token] = 0; + const api = createTelegramBotAPI(token); + clients[token] = api; + const name = await api.getMeWithReturns(); + await api.deleteWebhook({}); + console.log(`@${name.result.username} Webhook deleted, If you want to use webhook, please set it up again.`); + } + + while (true) { + for (const token of ENV.TELEGRAM_AVAILABLE_TOKENS) { + try { + const resp = await clients[token].getUpdates({ offset: offset[token] }); + if (resp.status === 429) { + const retryAfter = Number.parseInt(resp.headers.get('Retry-After') || ''); + if (retryAfter) { + console.log(`Rate limited, retry after ${retryAfter} seconds`); + await new Promise(resolve => setTimeout(resolve, retryAfter * 1000)); + continue; + } + } + const { result } = await resp.json() as GetUpdatesResponse; + for (const update of result) { + if (update.update_id >= offset[token]) { + offset[token] = update.update_id + 1; + } + setImmediate(async () => { + await handleUpdate(token, update).catch(console.error); + }); + } + } catch (e) { + console.error(e); + } + } + } +} + +// 启动服务 +if (config.mode === 'webhook' && config.server !== undefined) { + const router = createRouter(); + startServerV2( + config.server.port || 8787, + config.server.hostname || '0.0.0.0', + env, + { baseURL: config.server.baseURL }, + defaultRequestBuilder, + router.fetch, + ); +} else { + runPolling().catch(console.error); +} diff --git a/src/adapter/version/index.ts b/src/adapter/version/index.ts new file mode 100644 index 00000000..7656caef --- /dev/null +++ b/src/adapter/version/index.ts @@ -0,0 +1,30 @@ +import { execSync } from 'node:child_process'; +import * as fs from 'node:fs/promises'; +import path from 'node:path'; + +let COMMIT_HASH = 'unknown'; +const TIMESTAMP = Math.floor(Date.now() / 1000); + +try { + COMMIT_HASH = execSync('git rev-parse --short HEAD').toString().trim(); +} catch (e) { + console.warn(e); +} + +export function createVersionPlugin(targetDir: string) { + return { + name: 'buildInfo', + async closeBundle() { + await fs.writeFile(path.resolve(targetDir, 'timestamp'), TIMESTAMP.toString()); + await fs.writeFile(path.resolve(targetDir, 'buildinfo.json'), JSON.stringify({ + sha: COMMIT_HASH, + timestamp: TIMESTAMP, + })); + }, + }; +} + +export const versionDefine = { + __BUILD_VERSION__: JSON.stringify(COMMIT_HASH), + __BUILD_TIMESTAMP__: TIMESTAMP.toString(), +}; diff --git a/src/agent/agents.js b/src/agent/agents.js deleted file mode 100644 index d303a4ec..00000000 --- a/src/agent/agents.js +++ /dev/null @@ -1,212 +0,0 @@ -import { isOpenAIEnable, requestCompletionsFromOpenAI, requestImageFromOpenAI } from './openai.js'; -import { isWorkersAIEnable, requestCompletionsFromWorkersAI, requestImageFromWorkersAI } from './workersai.js'; -import { isGeminiAIEnable, requestCompletionsFromGeminiAI } from './gemini.js'; -import { isMistralAIEnable, requestCompletionsFromMistralAI } from './mistralai.js'; -import { isCohereAIEnable, requestCompletionsFromCohereAI } from './cohere.js'; -import { isAnthropicAIEnable, requestCompletionsFromAnthropicAI } from './anthropic.js'; -import { - isAzureEnable, - isAzureImageEnable, - requestCompletionsFromAzureOpenAI, - requestImageFromAzureOpenAI, -} from './azure.js'; -import '../types/context.js'; -import '../types/agent.js'; - -/** - * @type {ChatAgent[]} - */ -export const chatLlmAgents = [ - { - name: 'azure', - enable: isAzureEnable, - request: requestCompletionsFromAzureOpenAI, - }, - { - name: 'openai', - enable: isOpenAIEnable, - request: requestCompletionsFromOpenAI, - }, - { - name: 'workers', - enable: isWorkersAIEnable, - request: requestCompletionsFromWorkersAI, - }, - { - name: 'gemini', - enable: isGeminiAIEnable, - request: requestCompletionsFromGeminiAI, - }, - { - name: 'mistral', - enable: isMistralAIEnable, - request: requestCompletionsFromMistralAI, - }, - { - name: 'cohere', - enable: isCohereAIEnable, - request: requestCompletionsFromCohereAI, - }, - { - name: 'anthropic', - enable: isAnthropicAIEnable, - request: requestCompletionsFromAnthropicAI, - }, -]; - -/** - * @param {string} agentName - * @param {ContextType} context - * @returns {null|string} - */ -export function currentChatModel(agentName, context) { - switch (agentName) { - case 'azure': - try { - const url = new URL(context.USER_CONFIG.AZURE_COMPLETIONS_API); - return url.pathname.split('/')[3]; - } catch { - return context.USER_CONFIG.AZURE_COMPLETIONS_API; - } - case 'openai': - return context.USER_CONFIG.OPENAI_CHAT_MODEL; - case 'workers': - return context.USER_CONFIG.WORKERS_CHAT_MODEL; - case 'gemini': - return context.USER_CONFIG.GOOGLE_COMPLETIONS_MODEL; - case 'mistral': - return context.USER_CONFIG.MISTRAL_CHAT_MODEL; - case 'cohere': - return context.USER_CONFIG.COHERE_CHAT_MODEL; - case 'anthropic': - return context.USER_CONFIG.ANTHROPIC_CHAT_MODEL; - default: - return null; - } -} - -/** - * @param {string} agentName - * @returns {null|string} - */ -export function chatModelKey(agentName) { - switch (agentName) { - case 'azure': - return 'AZURE_COMPLETIONS_API'; - case 'openai': - return 'OPENAI_CHAT_MODEL'; - case 'workers': - return 'WORKERS_CHAT_MODEL'; - case 'gemini': - return 'GOOGLE_COMPLETIONS_MODEL'; - case 'mistral': - return 'MISTRAL_CHAT_MODEL'; - case 'cohere': - return 'COHERE_CHAT_MODEL'; - case 'anthropic': - return 'ANTHROPIC_CHAT_MODEL'; - default: - return null; - } -} - -/** - * 加载聊天AI - * @param {ContextType} context - * @returns {?ChatAgent} - */ -export function loadChatLLM(context) { - for (const llm of chatLlmAgents) { - if (llm.name === context.USER_CONFIG.AI_PROVIDER) { - return llm; - } - } - // 找不到指定的AI,使用第一个可用的AI - for (const llm of chatLlmAgents) { - if (llm.enable(context)) { - return llm; - } - } - return null; -} - -/** - * @type {ImageAgent[]} - */ -export const imageGenAgents = [ - { - name: 'azure', - enable: isAzureImageEnable, - request: requestImageFromAzureOpenAI, - }, - { - name: 'openai', - enable: isOpenAIEnable, - request: requestImageFromOpenAI, - }, - { - name: 'workers', - enable: isWorkersAIEnable, - request: requestImageFromWorkersAI, - }, -]; - -/** - * 加载图片AI - * @param {ContextType} context - * @returns {?ImageAgent} - */ -export function loadImageGen(context) { - for (const imgGen of imageGenAgents) { - if (imgGen.name === context.USER_CONFIG.AI_IMAGE_PROVIDER) { - return imgGen; - } - } - // 找不到指定的AI,使用第一个可用的AI - for (const imgGen of imageGenAgents) { - if (imgGen.enable(context)) { - return imgGen; - } - } - return null; -} - -/** - * @param {string} agentName - * @param {ContextType} context - * @returns {null|string} - */ -export function currentImageModel(agentName, context) { - switch (agentName) { - case 'azure': - try { - const url = new URL(context.USER_CONFIG.AZURE_DALLE_API); - return url.pathname.split('/')[3]; - } catch { - return context.USER_CONFIG.AZURE_DALLE_API; - } - case 'openai': - return context.USER_CONFIG.DALL_E_MODEL; - case 'workers': - return context.USER_CONFIG.WORKERS_IMAGE_MODEL; - default: - return null; - } -} - -/** - * @param {string} agentName - * @returns {null|string} - */ -export function imageModelKey(agentName) { - switch (agentName) { - case 'azure': - return 'AZURE_DALLE_API'; - case 'openai': - return 'DALL_E_MODEL'; - case 'workers': - return 'WORKERS_IMAGE_MODEL'; - default: - return null; - } -} diff --git a/src/agent/anthropic.js b/src/agent/anthropic.js deleted file mode 100644 index b2e723f5..00000000 --- a/src/agent/anthropic.js +++ /dev/null @@ -1,89 +0,0 @@ -import '../types/context.js'; -import '../types/agent.js'; -import { imageToBase64String } from '../utils/image.js'; -import { ENV } from '../config/env.js'; -import { Stream, anthropicSseJsonParser } from './stream.js'; -import { requestChatCompletions } from './request.js'; - -/** - * @param {ContextType} context - * @returns {boolean} - */ -export function isAnthropicAIEnable(context) { - return !!(context.USER_CONFIG.ANTHROPIC_API_KEY); -} - -/** - * @param {HistoryItem} item - * @returns {Promise} - */ -async function renderAnthropicMessage(item) { - const res = { - role: item.role, - content: item.content, - }; - - if (item.images && item.images.length > 0) { - res.content = []; - if (item.content) { - res.content.push({ type: 'text', text: item.content }); - } - for (const image of item.images) { - res.content.push(await imageToBase64String(image).then(({ format, data }) => { - return { type: 'image', source: { type: 'base64', media_type: format, data } }; - })); - } - } - return res; -} - -/** - * 发送消息到Anthropic AI - * @param {LlmParams} params - * @param {ContextType} context - * @param {AgentTextHandler} onStream - * @returns {Promise} - */ -export async function requestCompletionsFromAnthropicAI(params, context, onStream) { - const { message, images, prompt, history } = params; - const url = `${context.USER_CONFIG.ANTHROPIC_API_BASE}/messages`; - const header = { - 'x-api-key': context.USER_CONFIG.ANTHROPIC_API_KEY, - 'anthropic-version': '2023-06-01', - 'content-type': 'application/json', - }; - - const messages = ([...(history || []), { role: 'user', content: message, images }]); - - if (messages.length > 0 && messages[0].role === 'assistant') { - messages.shift(); - } - - const body = { - system: prompt, - model: context.USER_CONFIG.ANTHROPIC_CHAT_MODEL, - messages: await Promise.all(messages.map(renderAnthropicMessage)), - stream: onStream != null, - max_tokens: ENV.MAX_TOKEN_LENGTH > 0 ? ENV.MAX_TOKEN_LENGTH : 2048, - }; - if (!body.system) { - delete body.system; - } - /** - * @type {SseChatCompatibleOptions} - */ - const options = {}; - options.streamBuilder = function (r, c) { - return new Stream(r, c, null, anthropicSseJsonParser); - }; - options.contentExtractor = function (data) { - return data?.delta?.text; - }; - options.fullContentExtractor = function (data) { - return data?.content?.[0].text; - }; - options.errorExtractor = function (data) { - return data?.error?.message; - }; - return requestChatCompletions(url, header, body, context, onStream, null, options); -} diff --git a/src/agent/anthropic.ts b/src/agent/anthropic.ts new file mode 100644 index 00000000..064ab635 --- /dev/null +++ b/src/agent/anthropic.ts @@ -0,0 +1,108 @@ +import { imageToBase64String } from '../utils/image'; +import type { AgentUserConfig } from '../config/env'; +import { ENV } from '../config/env'; +import type { ChatAgent, ChatStreamTextHandler, HistoryItem, LLMChatParams } from './types'; +import type { SSEMessage, SSEParserResult } from './stream'; +import { Stream } from './stream'; +import type { SseChatCompatibleOptions } from './request'; +import { requestChatCompletions } from './request'; + +export class Anthropic implements ChatAgent { + readonly name = 'anthropic'; + readonly modelKey = 'ANTHROPIC_CHAT_MODEL'; + + readonly enable = (context: AgentUserConfig): boolean => { + return !!(context.ANTHROPIC_API_KEY); + }; + + private render = async (item: HistoryItem): Promise => { + const res: Record = { + role: item.role, + content: item.content, + }; + + if (item.images && item.images.length > 0) { + res.content = []; + if (item.content) { + res.content.push({ type: 'text', text: item.content }); + } + for (const image of item.images) { + res.content.push(await imageToBase64String(image).then(({ format, data }) => { + return { type: 'image', source: { type: 'base64', media_type: format, data } }; + })); + } + } + return res; + }; + + readonly model = (ctx: AgentUserConfig): string => { + return ctx.ANTHROPIC_CHAT_MODEL; + }; + + private static parser(sse: SSEMessage): SSEParserResult { + // example: + // event: content_block_delta + // data: {"type": "content_block_delta", "index": 0, "delta": {"type": "text_delta", "text": "Hello"}} + // event: message_stop + // data: {"type": "message_stop"} + switch (sse.event) { + case 'content_block_delta': + try { + return { data: JSON.parse(sse.data || '') }; + } catch (e) { + console.error(e, sse.data); + return {}; + } + case 'message_start': + case 'content_block_start': + case 'content_block_stop': + return {}; + case 'message_stop': + return { finish: true }; + default: + return {}; + } + } + + readonly request = async (params: LLMChatParams, context: AgentUserConfig, onStream: ChatStreamTextHandler | null): Promise => { + const { message, images, prompt, history } = params; + const url = `${context.ANTHROPIC_API_BASE}/messages`; + const header = { + 'x-api-key': context.ANTHROPIC_API_KEY || '', + 'anthropic-version': '2023-06-01', + 'content-type': 'application/json', + }; + + const messages: HistoryItem[] = (history || []).concat({ role: 'user', content: message, images }); + + if (messages.length > 0 && messages[0].role === 'assistant') { + messages.shift(); + } + + const body = { + system: prompt, + model: context.ANTHROPIC_CHAT_MODEL, + messages: await Promise.all(messages.map(item => this.render(item))), + stream: onStream != null, + max_tokens: ENV.MAX_TOKEN_LENGTH > 0 ? ENV.MAX_TOKEN_LENGTH : 2048, + }; + if (!body.system) { + delete body.system; + } + + const options: SseChatCompatibleOptions = {}; + options.streamBuilder = function (r, c) { + return new Stream(r, c, Anthropic.parser); + }; + options.contentExtractor = function (data: any) { + return data?.delta?.text; + }; + options.fullContentExtractor = function (data: any) { + return data?.content?.[0].text; + }; + options.errorExtractor = function (data: any) { + return data?.error?.message; + }; + return requestChatCompletions(url, header, body, onStream, null, options); + }; +} diff --git a/src/agent/azure.js b/src/agent/azure.js deleted file mode 100644 index edc8b139..00000000 --- a/src/agent/azure.js +++ /dev/null @@ -1,92 +0,0 @@ -import '../types/context.js'; -import '../types/agent.js'; -import { requestChatCompletions } from './request.js'; -import { renderOpenAIMessage } from './openai.js'; - -/** - * @param {ContextType} context - * @returns {string|null} - */ -function azureKeyFromContext(context) { - return context.USER_CONFIG.AZURE_API_KEY; -} - -/** - * @param {ContextType} context - * @returns {boolean} - */ -export function isAzureEnable(context) { - return !!(context.USER_CONFIG.AZURE_API_KEY && context.USER_CONFIG.AZURE_COMPLETIONS_API); -} - -/** - * @param {ContextType} context - * @returns {boolean} - */ -export function isAzureImageEnable(context) { - return !!(context.USER_CONFIG.AZURE_API_KEY && context.USER_CONFIG.AZURE_DALLE_API); -} - -/** - * 发送消息到Azure ChatGPT - * @param {LlmParams} params - * @param {ContextType} context - * @param {AgentTextHandler} onStream - * @returns {Promise} - */ -export async function requestCompletionsFromAzureOpenAI(params, context, onStream) { - const { message, images, prompt, history } = params; - const url = context.USER_CONFIG.AZURE_COMPLETIONS_API; - const header = { - 'Content-Type': 'application/json', - 'api-key': azureKeyFromContext(context), - }; - - const messages = [...(history || []), { role: 'user', content: message, images }]; - if (prompt) { - messages.unshift({ role: context.USER_CONFIG.SYSTEM_INIT_MESSAGE_ROLE, content: prompt }); - } - - const body = { - ...context.USER_CONFIG.OPENAI_API_EXTRA_PARAMS, - messages: await Promise.all(messages.map(renderOpenAIMessage)), - stream: onStream != null, - }; - - return requestChatCompletions(url, header, body, context, onStream); -} - -/** - * 请求AzureOpenai生成图片 - * @param {string} prompt - * @param {ContextType} context - * @returns {Promise} - */ -export async function requestImageFromAzureOpenAI(prompt, context) { - const url = context.USER_CONFIG.AZURE_DALLE_API; - const header = { - 'Content-Type': 'application/json', - 'api-key': azureKeyFromContext(context), - }; - const body = { - prompt, - n: 1, - size: context.USER_CONFIG.DALL_E_IMAGE_SIZE, - style: context.USER_CONFIG.DALL_E_IMAGE_STYLE, - quality: context.USER_CONFIG.DALL_E_IMAGE_QUALITY, - }; - const validSize = ['1792x1024', '1024x1024', '1024x1792']; - if (!validSize.includes(body.size)) { - body.size = '1024x1024'; - } - const resp = await fetch(url, { - method: 'POST', - headers: header, - body: JSON.stringify(body), - }).then(res => res.json()); - - if (resp.error?.message) { - throw new Error(resp.error.message); - } - return resp?.data?.[0]?.url; -} diff --git a/src/agent/azure.ts b/src/agent/azure.ts new file mode 100644 index 00000000..0d2c9875 --- /dev/null +++ b/src/agent/azure.ts @@ -0,0 +1,100 @@ +import type { AgentUserConfig } from '../config/env'; +import type { ChatAgent, ChatStreamTextHandler, ImageAgent, LLMChatParams } from './types'; +import { requestChatCompletions } from './request'; +import { renderOpenAIMessage } from './openai'; + +class AzureBase { + readonly name = 'azure'; + readonly modelFromURI = (uri: string | null): string => { + if (!uri) { + return ''; + } + try { + const url = new URL(uri); + return url.pathname.split('/')[3]; + } catch { + return uri; + } + }; +} + +export class AzureChatAI extends AzureBase implements ChatAgent { + readonly modelKey = 'AZURE_COMPLETIONS_API'; + + readonly enable = (context: AgentUserConfig): boolean => { + return !!(context.AZURE_API_KEY && context.AZURE_COMPLETIONS_API); + }; + + readonly model = (ctx: AgentUserConfig) => { + return this.modelFromURI(ctx.AZURE_COMPLETIONS_API); + }; + + readonly request = async (params: LLMChatParams, context: AgentUserConfig, onStream: ChatStreamTextHandler | null): Promise => { + const { message, images, prompt, history } = params; + const url = context.AZURE_COMPLETIONS_API; + if (!url || !context.AZURE_API_KEY) { + throw new Error('Azure Completions API is not set'); + } + const header = { + 'Content-Type': 'application/json', + 'api-key': context.AZURE_API_KEY, + }; + + const messages = [...(history || []), { role: 'user', content: message, images }]; + if (prompt) { + messages.unshift({ role: context.SYSTEM_INIT_MESSAGE_ROLE, content: prompt }); + } + + const body = { + ...context.OPENAI_API_EXTRA_PARAMS, + messages: await Promise.all(messages.map(renderOpenAIMessage)), + stream: onStream != null, + }; + + return requestChatCompletions(url, header, body, onStream); + }; +} + +export class AzureImageAI extends AzureBase implements ImageAgent { + readonly modelKey = 'AZURE_DALLE_API'; + + readonly enable = (context: AgentUserConfig): boolean => { + return !!(context.AZURE_API_KEY && context.AZURE_DALLE_API); + }; + + readonly model = (ctx: AgentUserConfig) => { + return this.modelFromURI(ctx.AZURE_DALLE_API); + }; + + readonly request = async (prompt: string, context: AgentUserConfig): Promise => { + const url = context.AZURE_DALLE_API; + if (!url || !context.AZURE_API_KEY) { + throw new Error('Azure DALL-E API is not set'); + } + const header = { + 'Content-Type': 'application/json', + 'api-key': context.AZURE_API_KEY, + }; + const body = { + prompt, + n: 1, + size: context.DALL_E_IMAGE_SIZE, + style: context.DALL_E_IMAGE_STYLE, + quality: context.DALL_E_IMAGE_QUALITY, + }; + const validSize = ['1792x1024', '1024x1024', '1024x1792']; + if (!validSize.includes(body.size)) { + body.size = '1024x1024'; + } + const resp = await fetch(url, { + method: 'POST', + headers: header, + body: JSON.stringify(body), + }).then(res => res.json()) as any; + + if (resp.error?.message) { + throw new Error(resp.error.message); + } + return resp?.data?.[0]?.url; + }; +} diff --git a/src/agent/chat.js b/src/agent/chat.ts similarity index 68% rename from src/agent/chat.js rename to src/agent/chat.ts index 4eed619c..0443753f 100644 --- a/src/agent/chat.js +++ b/src/agent/chat.ts @@ -1,25 +1,21 @@ -import { DATABASE, ENV } from '../config/env.js'; -import '../types/agent.js'; +import type { WorkerContext } from '../config/context'; +import { ENV } from '../config/env'; +import type { ChatAgent, HistoryItem, HistoryModifier, LLMChatRequestParams } from './types'; /** * @returns {(function(string): number)} */ -function tokensCounter() { +function tokensCounter(): (text: string) => number { return (text) => { return text.length; }; } -/** - * 加载历史TG消息 - * @param {string} key - * @returns {Promise} - */ -async function loadHistory(key) { +async function loadHistory(key: string): Promise { // 加载历史记录 let history = []; try { - history = JSON.parse(await DATABASE.get(key)); + history = JSON.parse(await ENV.DATABASE.get(key)); } catch (e) { console.error(e); } @@ -29,7 +25,7 @@ async function loadHistory(key) { const counter = tokensCounter(); - const trimHistory = (list, initLength, maxLength, maxToken) => { + const trimHistory = (list: HistoryItem[], initLength: number, maxLength: number, maxToken: number) => { // 历史记录超出长度需要裁剪, 小于0不裁剪 if (maxLength >= 0 && list.length > maxLength) { list = list.splice(list.length - maxLength); @@ -64,24 +60,17 @@ async function loadHistory(key) { return history; } -/** - * @typedef {function (string): Promise} StreamResultHandler - */ +export type StreamResultHandler = (text: string) => Promise; -/** - * @param {LlmRequestParams} params - * @param {ContextType} context - * @param {ChatAgentRequest} llm - * @param {LlmModifier} modifier - * @param {StreamResultHandler} onStream - * @returns {Promise} - */ -export async function requestCompletionsFromLLM(params, context, llm, modifier, onStream) { +export async function requestCompletionsFromLLM(params: LLMChatRequestParams, context: WorkerContext, agent: ChatAgent, modifier: HistoryModifier | null, onStream: StreamResultHandler | null): Promise { const historyDisable = ENV.AUTO_TRIM_HISTORY && ENV.MAX_HISTORY_LENGTH <= 0; const historyKey = context.SHARE_CONTEXT.chatHistoryKey; + if (!historyKey) { + throw new Error('History key not found'); + } let history = await loadHistory(historyKey); if (modifier) { - const modifierData = modifier(history, params.message); + const modifierData = modifier(history, params.message || null); history = modifierData.history; params.message = modifierData.message; } @@ -90,7 +79,7 @@ export async function requestCompletionsFromLLM(params, context, llm, modifier, history, prompt: context.USER_CONFIG.SYSTEM_INIT_MESSAGE, }; - const answer = await llm(llmParams, context, onStream); + const answer = await agent.request(llmParams, context.USER_CONFIG, onStream); if (!historyDisable) { const userMessage = { role: 'user', content: params.message || '', images: params.images }; if (ENV.HISTORY_IMAGE_PLACEHOLDER && userMessage.images && userMessage.images.length > 0) { @@ -99,7 +88,7 @@ export async function requestCompletionsFromLLM(params, context, llm, modifier, } history.push(userMessage); history.push({ role: 'assistant', content: answer }); - await DATABASE.put(historyKey, JSON.stringify(history)).catch(console.error); + await ENV.DATABASE.put(historyKey, JSON.stringify(history)).catch(console.error); } return answer; } diff --git a/src/agent/cohere.js b/src/agent/cohere.js deleted file mode 100644 index aa1972f1..00000000 --- a/src/agent/cohere.js +++ /dev/null @@ -1,73 +0,0 @@ -import '../types/context.js'; -import { Stream, cohereSseJsonParser } from './stream.js'; -import { requestChatCompletions } from './request.js'; - -/** - * @param {ContextType} context - * @returns {boolean} - */ -export function isCohereAIEnable(context) { - return !!(context.USER_CONFIG.COHERE_API_KEY); -} - -const COHERE_ROLE_MAP = { - assistant: 'CHATBOT', - user: 'USER', -}; - -/** - * @param {HistoryItem} item - * @returns {object} - */ -function renderCohereMessage(item) { - return { - role: COHERE_ROLE_MAP[item.role], - content: item.content, - }; -} - -/** - * 发送消息到Cohere AI - * @param {LlmParams} params - * @param {ContextType} context - * @param {AgentTextHandler} onStream - * @returns {Promise} - */ -export async function requestCompletionsFromCohereAI(params, context, onStream) { - const { message, prompt, history } = params; - const url = `${context.USER_CONFIG.COHERE_API_BASE}/chat`; - const header = { - 'Authorization': `Bearer ${context.USER_CONFIG.COHERE_API_KEY}`, - 'Content-Type': 'application/json', - 'Accept': onStream !== null ? 'text/event-stream' : 'application/json', - }; - - const body = { - message, - model: context.USER_CONFIG.COHERE_CHAT_MODEL, - stream: onStream != null, - preamble: prompt, - chat_history: history.map(renderCohereMessage), - }; - if (!body.preamble) { - delete body.preamble; - } - - /** - * @type {SseChatCompatibleOptions} - */ - const options = {}; - options.streamBuilder = function (r, c) { - return new Stream(r, c, null, cohereSseJsonParser); - }; - options.contentExtractor = function (data) { - return data?.text; - }; - options.fullContentExtractor = function (data) { - return data?.text; - }; - options.errorExtractor = function (data) { - return data?.message; - }; - return requestChatCompletions(url, header, body, context, onStream, null, options); -} diff --git a/src/agent/cohere.ts b/src/agent/cohere.ts new file mode 100644 index 00000000..1445a26f --- /dev/null +++ b/src/agent/cohere.ts @@ -0,0 +1,91 @@ +import type { AgentUserConfig } from '../config/env'; +import type { ChatAgent, ChatStreamTextHandler, HistoryItem, LLMChatParams } from './types'; +import type { SSEMessage, SSEParserResult } from './stream'; +import { Stream } from './stream'; +import type { SseChatCompatibleOptions } from './request'; +import { requestChatCompletions } from './request'; + +export class Cohere implements ChatAgent { + readonly name = 'cohere'; + readonly modelKey = 'COHERE_CHAT_MODEL'; + + static COHERE_ROLE_MAP: Record = { + assistant: 'CHATBOT', + user: 'USER', + }; + + readonly enable = (context: AgentUserConfig): boolean => { + return !!(context.COHERE_API_KEY); + }; + + readonly model = (ctx: AgentUserConfig): string => { + return ctx.COHERE_CHAT_MODEL; + }; + + private render = (item: HistoryItem): any => { + return { + role: Cohere.COHERE_ROLE_MAP[item.role] || 'USER', + content: item.content, + }; + }; + + static parser(sse: SSEMessage): SSEParserResult { + // example: + // event: text-generation + // data: {"is_finished":false,"event_type":"text-generation","text":"?"} + // + // event: stream-end + // data: {"is_finished":true,...} + switch (sse.event) { + case 'text-generation': + try { + return { data: JSON.parse(sse.data || '') }; + } catch (e) { + console.error(e, sse.data); + return {}; + } + case 'stream-start': + return {}; + case 'stream-end': + return { finish: true }; + default: + return {}; + } + } + + readonly request = async (params: LLMChatParams, context: AgentUserConfig, onStream: ChatStreamTextHandler | null): Promise => { + const { message, prompt, history } = params; + const url = `${context.COHERE_API_BASE}/chat`; + const header = { + 'Authorization': `Bearer ${context.COHERE_API_KEY}`, + 'Content-Type': 'application/json', + 'Accept': onStream !== null ? 'text/event-stream' : 'application/json', + }; + + const body = { + message, + model: context.COHERE_CHAT_MODEL, + stream: onStream != null, + preamble: prompt, + chat_history: history?.map(this.render), + }; + if (!body.preamble) { + delete body.preamble; + } + + const options: SseChatCompatibleOptions = {}; + options.streamBuilder = function (r, c) { + return new Stream(r, c, Cohere.parser); + }; + options.contentExtractor = function (data: any) { + return data?.text; + }; + options.fullContentExtractor = function (data: any) { + return data?.text; + }; + options.errorExtractor = function (data: any) { + return data?.message; + }; + return requestChatCompletions(url, header, body, onStream, null, options); + }; +} diff --git a/src/agent/gemini.js b/src/agent/gemini.js deleted file mode 100644 index d6b88741..00000000 --- a/src/agent/gemini.js +++ /dev/null @@ -1,80 +0,0 @@ -import '../types/context.js'; - -/** - * @param {ContextType} context - * @returns {boolean} - */ -export function isGeminiAIEnable(context) { - return !!(context.USER_CONFIG.GOOGLE_API_KEY); -} - -const GEMINI_ROLE_MAP = { - assistant: 'model', - system: 'user', - user: 'user', -}; - -/** - * @param {HistoryItem} item - * @returns {object} - */ -function renderGeminiMessage(item) { - return { - role: GEMINI_ROLE_MAP[item.role], - parts: [ - { - text: item.content || '', - }, - ], - }; -} - -/** - * 发送消息到Gemini - * @param {LlmParams} params - * @param {ContextType} context - * @param {AgentTextHandler} onStream - * @returns {Promise} - */ -export async function requestCompletionsFromGeminiAI(params, context, onStream) { - const { message, prompt, history } = params; - onStream = null; // 暂时不支持stream模式 - const url = `${context.USER_CONFIG.GOOGLE_COMPLETIONS_API}${context.USER_CONFIG.GOOGLE_COMPLETIONS_MODEL}:${ - onStream ? 'streamGenerateContent' : 'generateContent' - }?key=${context.USER_CONFIG.GOOGLE_API_KEY}`; - - const contentsTemp = [...history || [], { role: 'user', content: message }]; - if (prompt) { - contentsTemp.unshift({ role: 'assistant', content: prompt }); - } - const contents = []; - // role必须是 model,user 而且不能连续两个一样 - for (const msg of contentsTemp) { - msg.role = GEMINI_ROLE_MAP[msg.role]; - // 如果存在最后一个元素或role不一样则插入 - if (contents.length === 0 || contents[contents.length - 1].role !== msg.role) { - contents.push(renderGeminiMessage(msg)); - } else { - // 否则合并 - contents[contents.length - 1].parts[0].text += msg.content; - } - } - - const resp = await fetch(url, { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - }, - body: JSON.stringify({ contents }), - }); - const data = await resp.json(); - try { - return data.candidates[0].content.parts[0].text; - } catch (e) { - console.error(e); - if (!data) { - throw new Error('Empty response'); - } - throw new Error(data?.error?.message || JSON.stringify(data)); - } -} diff --git a/src/agent/gemini.ts b/src/agent/gemini.ts new file mode 100644 index 00000000..6fdde704 --- /dev/null +++ b/src/agent/gemini.ts @@ -0,0 +1,79 @@ +import type { AgentUserConfig } from '../config/env'; +import type { ChatAgent, ChatStreamTextHandler, HistoryItem, LLMChatParams } from './types'; + +export class Gemini implements ChatAgent { + readonly name = 'gemini'; + readonly modelKey = 'GOOGLE_COMPLETIONS_MODEL'; + + static GEMINI_ROLE_MAP: Record = { + assistant: 'model', + system: 'user', + user: 'user', + }; + + readonly enable = (context: AgentUserConfig): boolean => { + return !!(context.GOOGLE_API_KEY); + }; + + readonly model = (ctx: AgentUserConfig): string => { + return ctx.GOOGLE_COMPLETIONS_MODEL; + }; + + private render = (item: HistoryItem): object => { + return { + role: Gemini.GEMINI_ROLE_MAP[item.role], + parts: [ + { + text: item.content || '', + }, + ], + }; + }; + + readonly request = async (params: LLMChatParams, context: AgentUserConfig, onStream: ChatStreamTextHandler | null): Promise => { + const { message, prompt, history } = params; + if (onStream !== null) { + console.warn('Stream mode is not supported'); + } + const url = `${context.GOOGLE_COMPLETIONS_API}${context.GOOGLE_COMPLETIONS_MODEL}:${ + // 暂时不支持stream模式 + // onStream ? 'streamGenerateContent' : 'generateContent' + 'generateContent' + }?key=${context.GOOGLE_API_KEY}`; + + const contentsTemp = [...history || [], { role: 'user', content: message }]; + if (prompt) { + contentsTemp.unshift({ role: 'assistant', content: prompt }); + } + const contents: any[] = []; + // role必须是 model,user 而且不能连续两个一样 + for (const msg of contentsTemp) { + msg.role = Gemini.GEMINI_ROLE_MAP[msg.role]; + // 如果存在最后一个元素或role不一样则插入 + if (contents.length === 0 || contents[contents.length - 1].role !== msg.role) { + contents.push(this.render(msg)); + } else { + // 否则合并 + contents[contents.length - 1].parts[0].text += msg.content; + } + } + + const resp = await fetch(url, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ contents }), + }); + const data = await resp.json() as any; + try { + return data.candidates[0].content.parts[0].text; + } catch (e) { + console.error(e); + if (!data) { + throw new Error('Empty response'); + } + throw new Error(data?.error?.message || JSON.stringify(data)); + } + }; +} diff --git a/src/agent/index.test.ts b/src/agent/index.test.ts new file mode 100644 index 00000000..84027563 --- /dev/null +++ b/src/agent/index.test.ts @@ -0,0 +1,22 @@ +import '../config/env.test'; +import { ENV } from '../config/env'; +import type { LLMChatParams } from './types'; +import { loadChatLLM } from './index'; + +{ + const agent = loadChatLLM({ + ...ENV.USER_CONFIG, + AI_PROVIDER: 'anthropic', + }); + const params: LLMChatParams = { + prompt: 'You are a useful assistant.', + message: 'What is your name?', + history: [], + }; + console.log(agent?.name, agent?.model(ENV.USER_CONFIG)); + agent?.request(params, ENV.USER_CONFIG, async (text) => { + console.log(text); + }).then((res) => { + console.log(res); + }); +} diff --git a/src/agent/index.ts b/src/agent/index.ts new file mode 100644 index 00000000..ad0f1018 --- /dev/null +++ b/src/agent/index.ts @@ -0,0 +1,55 @@ +import type { AgentUserConfig } from '../config/env'; +import type { ChatAgent, ImageAgent } from './types'; +import { Anthropic } from './anthropic'; +import { AzureChatAI, AzureImageAI } from './azure'; +import { Cohere } from './cohere'; +import { Gemini } from './gemini'; +import { Mistral } from './mistralai'; +import { Dalle, OpenAI } from './openai'; +import { WorkersChat, WorkersImage } from './workersai'; + +const CHAT_AGENTS: ChatAgent[] = [ + new Anthropic(), + new AzureChatAI(), + new Cohere(), + new Gemini(), + new Mistral(), + new OpenAI(), + new WorkersChat(), +]; + +export function loadChatLLM(context: AgentUserConfig): ChatAgent | null { + for (const llm of CHAT_AGENTS) { + if (llm.name === context.AI_PROVIDER) { + return llm; + } + } + // 找不到指定的AI,使用第一个可用的AI + for (const llm of CHAT_AGENTS) { + if (llm.enable(context)) { + return llm; + } + } + return null; +} + +const IMAGE_AGENTS: ImageAgent[] = [ + new AzureImageAI(), + new Dalle(), + new WorkersImage(), +]; + +export function loadImageGen(context: AgentUserConfig): ImageAgent | null { + for (const imgGen of IMAGE_AGENTS) { + if (imgGen.name === context.AI_IMAGE_PROVIDER) { + return imgGen; + } + } + // 找不到指定的AI,使用第一个可用的AI + for (const imgGen of IMAGE_AGENTS) { + if (imgGen.enable(context)) { + return imgGen; + } + } + return null; +} diff --git a/src/agent/mistralai.js b/src/agent/mistralai.js deleted file mode 100644 index aed6533a..00000000 --- a/src/agent/mistralai.js +++ /dev/null @@ -1,50 +0,0 @@ -import '../types/context.js'; -import { requestChatCompletions } from './request.js'; - -/** - * @param {ContextType} context - * @returns {boolean} - */ -export function isMistralAIEnable(context) { - return !!(context.USER_CONFIG.MISTRAL_API_KEY); -} - -/** - * @param {HistoryItem} item - * @returns {object} - */ -function renderMistralMessage(item) { - return { - role: item.role, - content: item.content, - }; -} - -/** - * 发送消息到Mistral AI - * @param {LlmParams} params - * @param {ContextType} context - * @param {AgentTextHandler} onStream - * @returns {Promise} - */ -export async function requestCompletionsFromMistralAI(params, context, onStream) { - const { message, prompt, history } = params; - const url = `${context.USER_CONFIG.MISTRAL_API_BASE}/chat/completions`; - const header = { - 'Content-Type': 'application/json', - 'Authorization': `Bearer ${context.USER_CONFIG.MISTRAL_API_KEY}`, - }; - - const messages = [...(history || []), { role: 'user', content: message }]; - if (prompt) { - messages.unshift({ role: context.USER_CONFIG.SYSTEM_INIT_MESSAGE_ROLE, content: prompt }); - } - - const body = { - model: context.USER_CONFIG.MISTRAL_CHAT_MODEL, - messages: messages.map(renderMistralMessage), - stream: onStream != null, - }; - - return requestChatCompletions(url, header, body, context, onStream); -} diff --git a/src/agent/mistralai.ts b/src/agent/mistralai.ts new file mode 100644 index 00000000..a1061a79 --- /dev/null +++ b/src/agent/mistralai.ts @@ -0,0 +1,45 @@ +import type { AgentUserConfig } from '../config/env'; +import type { ChatAgent, ChatStreamTextHandler, HistoryItem, LLMChatParams } from './types'; +import { requestChatCompletions } from './request'; + +export class Mistral implements ChatAgent { + readonly name = 'mistral'; + readonly modelKey = 'MISTRAL_API_KEY'; + + readonly enable = (context: AgentUserConfig): boolean => { + return !!(context.MISTRAL_API_KEY); + }; + + readonly model = (ctx: AgentUserConfig): string => { + return ctx.MISTRAL_CHAT_MODEL; + }; + + private render = (item: HistoryItem): any => { + return { + role: item.role, + content: item.content, + }; + }; + + readonly request = async (params: LLMChatParams, context: AgentUserConfig, onStream: ChatStreamTextHandler | null): Promise => { + const { message, prompt, history } = params; + const url = `${context.MISTRAL_API_BASE}/chat/completions`; + const header = { + 'Content-Type': 'application/json', + 'Authorization': `Bearer ${context.MISTRAL_API_KEY}`, + }; + + const messages = [...(history || []), { role: 'user', content: message }]; + if (prompt) { + messages.unshift({ role: context.SYSTEM_INIT_MESSAGE_ROLE, content: prompt }); + } + + const body = { + model: context.MISTRAL_CHAT_MODEL, + messages: messages.map(this.render), + stream: onStream != null, + }; + + return requestChatCompletions(url, header, body, onStream); + }; +} diff --git a/src/agent/openai.js b/src/agent/openai.js deleted file mode 100644 index d5220529..00000000 --- a/src/agent/openai.js +++ /dev/null @@ -1,117 +0,0 @@ -import '../types/context.js'; -import { ENV } from '../config/env.js'; - -import { imageToBase64String, renderBase64DataURI } from '../utils/image.js'; -import { requestChatCompletions } from './request.js'; - -/** - * @param {ContextType} context - * @returns {string|null} - */ -function openAIKeyFromContext(context) { - const length = context.USER_CONFIG.OPENAI_API_KEY.length; - return context.USER_CONFIG.OPENAI_API_KEY[Math.floor(Math.random() * length)]; -} - -/** - * @param {ContextType} context - * @returns {boolean} - */ -export function isOpenAIEnable(context) { - return context.USER_CONFIG.OPENAI_API_KEY.length > 0; -} - -/** - * @param {HistoryItem} item - * @returns {Promise} - */ -export async function renderOpenAIMessage(item) { - const res = { - role: item.role, - content: item.content, - }; - if (item.images && item.images.length > 0) { - res.content = []; - if (item.content) { - res.content.push({ type: 'text', text: item.content }); - } - for (const image of item.images) { - switch (ENV.TELEGRAM_IMAGE_TRANSFER_MODE) { - case 'base64': - res.content.push({ type: 'image_url', image_url: { - url: renderBase64DataURI(await imageToBase64String(image)), - } }); - break; - case 'url': - default: - res.content.push({ type: 'image_url', image_url: { url: image } }); - break; - } - } - } - return res; -} - -/** - * 发送消息到ChatGPT - * @param {LlmParams} params - * @param {ContextType} context - * @param {AgentTextHandler} onStream - * @returns {Promise} - */ -export async function requestCompletionsFromOpenAI(params, context, onStream) { - const { message, images, prompt, history } = params; - const url = `${context.USER_CONFIG.OPENAI_API_BASE}/chat/completions`; - const header = { - 'Content-Type': 'application/json', - 'Authorization': `Bearer ${openAIKeyFromContext(context)}`, - }; - - const messages = [...(history || []), { role: 'user', content: message, images }]; - if (prompt) { - messages.unshift({ role: context.USER_CONFIG.SYSTEM_INIT_MESSAGE_ROLE, content: prompt }); - } - - const body = { - model: context.USER_CONFIG.OPENAI_CHAT_MODEL, - ...context.USER_CONFIG.OPENAI_API_EXTRA_PARAMS, - messages: await Promise.all(messages.map(renderOpenAIMessage)), - stream: onStream != null, - }; - - return requestChatCompletions(url, header, body, context, onStream); -} - -/** - * 请求Openai生成图片 - * @param {string} prompt - * @param {ContextType} context - * @returns {Promise} - */ -export async function requestImageFromOpenAI(prompt, context) { - const url = `${context.USER_CONFIG.OPENAI_API_BASE}/images/generations`; - const header = { - 'Content-Type': 'application/json', - 'Authorization': `Bearer ${openAIKeyFromContext(context)}`, - }; - const body = { - prompt, - n: 1, - size: context.USER_CONFIG.DALL_E_IMAGE_SIZE, - model: context.USER_CONFIG.DALL_E_MODEL, - }; - if (body.model === 'dall-e-3') { - body.quality = context.USER_CONFIG.DALL_E_IMAGE_QUALITY; - body.style = context.USER_CONFIG.DALL_E_IMAGE_STYLE; - } - const resp = await fetch(url, { - method: 'POST', - headers: header, - body: JSON.stringify(body), - }).then(res => res.json()); - - if (resp.error?.message) { - throw new Error(resp.error.message); - } - return resp?.data?.[0]?.url; -} diff --git a/src/agent/openai.ts b/src/agent/openai.ts new file mode 100644 index 00000000..c3f6a14f --- /dev/null +++ b/src/agent/openai.ts @@ -0,0 +1,119 @@ +import { imageToBase64String, renderBase64DataURI } from '../utils/image'; +import type { AgentUserConfig } from '../config/env'; +import { ENV } from '../config/env'; +import type { ChatAgent, ChatStreamTextHandler, HistoryItem, ImageAgent, LLMChatParams } from './types'; +import { requestChatCompletions } from './request'; + +export async function renderOpenAIMessage(item: HistoryItem): Promise { + const res: any = { + role: item.role, + content: item.content, + }; + if (item.images && item.images.length > 0) { + res.content = []; + if (item.content) { + res.content.push({ type: 'text', text: item.content }); + } + for (const image of item.images) { + switch (ENV.TELEGRAM_IMAGE_TRANSFER_MODE) { + case 'base64': + res.content.push({ type: 'image_url', image_url: { + url: renderBase64DataURI(await imageToBase64String(image)), + } }); + break; + case 'url': + default: + res.content.push({ type: 'image_url', image_url: { url: image } }); + break; + } + } + } + return res; +} + +class OpenAIBase { + readonly name = 'openai'; + apikey = (context: AgentUserConfig): string => { + const length = context.OPENAI_API_KEY.length; + return context.OPENAI_API_KEY[Math.floor(Math.random() * length)]; + }; +} + +export class OpenAI extends OpenAIBase implements ChatAgent { + readonly modelKey = 'OPENAI_API_KEY'; + + readonly enable = (context: AgentUserConfig): boolean => { + return context.OPENAI_API_KEY.length > 0; + }; + + readonly model = (ctx: AgentUserConfig): string => { + return ctx.OPENAI_CHAT_MODEL; + }; + + private render = async (item: HistoryItem): Promise => { + return renderOpenAIMessage(item); + }; + + readonly request = async (params: LLMChatParams, context: AgentUserConfig, onStream: ChatStreamTextHandler | null): Promise => { + const { message, images, prompt, history } = params; + const url = `${context.OPENAI_API_BASE}/chat/completions`; + const header = { + 'Content-Type': 'application/json', + 'Authorization': `Bearer ${this.apikey(context)}`, + }; + + const messages = [...(history || []), { role: 'user', content: message, images }]; + if (prompt) { + messages.unshift({ role: context.SYSTEM_INIT_MESSAGE_ROLE, content: prompt }); + } + + const body = { + model: context.OPENAI_CHAT_MODEL, + ...context.OPENAI_API_EXTRA_PARAMS, + messages: await Promise.all(messages.map(this.render)), + stream: onStream != null, + }; + + return requestChatCompletions(url, header, body, onStream); + }; +} + +export class Dalle extends OpenAIBase implements ImageAgent { + readonly modelKey = 'OPENAI_DALLE_API'; + + enable = (context: AgentUserConfig): boolean => { + return context.OPENAI_API_KEY.length > 0; + }; + + model = (ctx: AgentUserConfig): string => { + return ctx.DALL_E_MODEL; + }; + + request = async (prompt: string, context: AgentUserConfig): Promise => { + const url = `${context.OPENAI_API_BASE}/images/generations`; + const header = { + 'Content-Type': 'application/json', + 'Authorization': `Bearer ${this.apikey(context)}`, + }; + const body: any = { + prompt, + n: 1, + size: context.DALL_E_IMAGE_SIZE, + model: context.DALL_E_MODEL, + }; + if (body.model === 'dall-e-3') { + body.quality = context.DALL_E_IMAGE_QUALITY; + body.style = context.DALL_E_IMAGE_STYLE; + } + const resp = await fetch(url, { + method: 'POST', + headers: header, + body: JSON.stringify(body), + }).then(res => res.json()) as any; + + if (resp.error?.message) { + throw new Error(resp.error.message); + } + return resp?.data?.[0]?.url; + }; +} diff --git a/src/agent/request.js b/src/agent/request.ts similarity index 55% rename from src/agent/request.js rename to src/agent/request.ts index 6580e3fc..7a929a53 100644 --- a/src/agent/request.js +++ b/src/agent/request.ts @@ -1,73 +1,38 @@ -import '../types/context.js'; -import { ENV } from '../config/env.js'; -import { Stream } from './stream.js'; +import { ENV } from '../config/env'; +import type { ChatStreamTextHandler } from './types'; +import { Stream } from './stream'; -/** - * @callback StreamBuilder - * @param {Response} resp - * @param {AbortController} controller - * @returns {Stream} - */ -/** - * @callback SSEContentExtractor - * @param {object} data - * @returns {string|null} - */ -/** - * @callback FullContentExtractor - * @param {object} data - * @returns {string|null} - */ -/** - * @callback ErrorExtractor - * @param {object} data - * @returns {string|null} - */ -/** - * @typedef {object} SseChatCompatibleOptions - * @property {StreamBuilder} streamBuilder - * @property {SSEContentExtractor} contentExtractor - * @property {FullContentExtractor} fullContentExtractor - * @property {ErrorExtractor} errorExtractor - */ +export interface SseChatCompatibleOptions { + streamBuilder?: (resp: Response, controller: AbortController) => Stream; + contentExtractor?: (data: object) => string | null; + fullContentExtractor?: (data: object) => string | null; + errorExtractor?: (data: object) => string | null; +} -/** - * 修复OpenAI兼容的选项 - * @param {SseChatCompatibleOptions | null} options - * @returns {SseChatCompatibleOptions} - */ -function fixOpenAICompatibleOptions(options) { +function fixOpenAICompatibleOptions(options: SseChatCompatibleOptions | null): SseChatCompatibleOptions { options = options || {}; options.streamBuilder = options.streamBuilder || function (r, c) { return new Stream(r, c); }; - options.contentExtractor = options.contentExtractor || function (d) { + options.contentExtractor = options.contentExtractor || function (d: any) { return d?.choices?.[0]?.delta?.content; }; - options.fullContentExtractor = options.fullContentExtractor || function (d) { + options.fullContentExtractor = options.fullContentExtractor || function (d: any) { return d.choices?.[0]?.message.content; }; - options.errorExtractor = options.errorExtractor || function (d) { + options.errorExtractor = options.errorExtractor || function (d: any) { return d.error?.message; }; return options; } -/** - * @param {Response} resp - * @returns {boolean} - */ -export function isJsonResponse(resp) { - return resp.headers.get('content-type').includes('json'); +export function isJsonResponse(resp: Response): boolean { + return resp.headers.get('content-type')?.includes('json') || false; } -/** - * @param {Response} resp - * @returns {boolean} - */ -export function isEventStreamResponse(resp) { +export function isEventStreamResponse(resp: Response): boolean { const types = ['application/stream+json', 'text/event-stream']; - const content = resp.headers.get('content-type'); + const content = resp.headers.get('content-type') || ''; for (const type of types) { if (content.includes(type)) { return true; @@ -76,18 +41,7 @@ export function isEventStreamResponse(resp) { return false; } -/** - * 发送请求到支持sse的聊天接口 - * @param {string} url - * @param {object} header - * @param {object} body - * @param {ContextType} context - * @param {AgentTextHandler| null} onStream - * @param {AgentTextHandler | null} onResult - * @param {SseChatCompatibleOptions | null} options - * @returns {Promise} - */ -export async function requestChatCompletions(url, header, body, context, onStream, onResult = null, options = null) { +export async function requestChatCompletions(url: string, header: Record, body: any, onStream: ChatStreamTextHandler | null, onResult: ChatStreamTextHandler | null = null, options: SseChatCompatibleOptions | null = null): Promise { const controller = new AbortController(); const { signal } = controller; @@ -111,13 +65,16 @@ export async function requestChatCompletions(url, header, body, context, onStrea options = fixOpenAICompatibleOptions(options); if (onStream && resp.ok && isEventStreamResponse(resp)) { - const stream = options.streamBuilder(resp, controller); + const stream = options.streamBuilder?.(resp, controller); + if (!stream) { + throw new Error('Stream builder error'); + } let contentFull = ''; let lengthDelta = 0; let updateStep = 50; try { for await (const data of stream) { - const c = options.contentExtractor(data) || ''; + const c = options.contentExtractor?.(data) || ''; if (c === '') { continue; } @@ -137,7 +94,7 @@ export async function requestChatCompletions(url, header, body, context, onStrea } } } catch (e) { - contentFull += `\nERROR: ${e.message}`; + contentFull += `\nERROR: ${(e as Error).message}`; } return contentFull; } @@ -146,19 +103,19 @@ export async function requestChatCompletions(url, header, body, context, onStrea throw new Error(resp.statusText); } - const result = await resp.json(); + const result = await resp.json() as any; if (!result) { throw new Error('Empty response'); } - if (options.errorExtractor(result)) { - throw new Error(options.errorExtractor(result)); + if (options.errorExtractor?.(result)) { + throw new Error(options.errorExtractor?.(result) || 'Unknown error'); } try { await onResult?.(result); - return options.fullContentExtractor(result); + return options.fullContentExtractor?.(result) || ''; } catch (e) { console.error(e); throw new Error(JSON.stringify(result)); diff --git a/src/agent/stream.js b/src/agent/stream.ts similarity index 65% rename from src/agent/stream.js rename to src/agent/stream.ts index 3cc98f2e..fd75a92a 100644 --- a/src/agent/stream.js +++ b/src/agent/stream.ts @@ -1,10 +1,26 @@ -// https://github.com/openai/openai-node/blob/master/src/streaming.ts -export class Stream { - constructor(response, controller, decoder = null, parser = null) { +export interface SSEMessage { + event?: string | null; + data?: string; +} + +export interface SSEParserResult { + finish?: boolean; + data?: any; +} + +type Parser = (sse: SSEMessage) => SSEParserResult; + +export class Stream implements AsyncIterable { + private response: Response; + private controller: AbortController; + private decoder: SSEDecoder; + private readonly parser: Parser; + + constructor(response: Response, controller: AbortController, parser: Parser | null = null) { this.response = response; this.controller = controller; - this.decoder = decoder || new SSEDecoder(); - this.parser = parser || openaiSseJsonParser; + this.decoder = new SSEDecoder(); + this.parser = parser || defaultSSEJsonParser; } async* iterMessages() { @@ -13,7 +29,7 @@ export class Stream { throw new Error('Attempted to iterate over a response with no body'); } const lineDecoder = new LineDecoder(); - const iter = this.response.body; + const iter = this.response.body as unknown as AsyncIterable; for await (const chunk of iter) { for (const line of lineDecoder.decode(chunk)) { const sse = this.decoder.decode(line); @@ -66,13 +82,15 @@ export class Stream { } export class SSEDecoder { + private event: string | null; + private data: any[]; + constructor() { this.event = null; this.data = []; - this.chunks = []; } - decode(line) { + decode(line: string): SSEMessage | null { if (line.endsWith('\r')) { line = line.substring(0, line.length - 1); } @@ -87,14 +105,11 @@ export class SSEDecoder { }; this.event = null; this.data = []; - this.chunks = []; return sse; } - this.chunks.push(line); if (line.startsWith(':')) { return null; } - // eslint-disable-next-line no-unused-vars let [fieldName, _, value] = this.partition(line, ':'); if (value.startsWith(' ')) { value = value.substring(1); @@ -107,7 +122,7 @@ export class SSEDecoder { return null; } - partition(str, delimiter) { + partition(str: string, delimiter: string): [string, string, string] { const index = str.indexOf(delimiter); if (index !== -1) { return [str.substring(0, index), delimiter, str.substring(index + delimiter.length)]; @@ -116,30 +131,14 @@ export class SSEDecoder { } } -/** - * @typedef {object} SSEMessage - * @property {string} [event] - * @property {string} [data] - */ - -/** - * @typedef {object} SSEParserResult - * @property {boolean} [finish] - * @property {any} [data] - */ - -/** - * @param {SSEMessage} sse - * @returns {SSEParserResult} - */ -export function openaiSseJsonParser(sse) { +function defaultSSEJsonParser(sse: SSEMessage): SSEParserResult { // example: // data: {} // data: [DONE] - if (sse.data.startsWith('[DONE]')) { + if (sse.data?.startsWith('[DONE]')) { return { finish: true }; } - if (sse.event === null) { + if (sse.event === null && sse.data) { try { return { data: JSON.parse(sse.data) }; } catch (e) { @@ -149,76 +148,20 @@ export function openaiSseJsonParser(sse) { return {}; } -/** - * @param {SSEMessage} sse - * @returns {SSEParserResult} - */ -export function cohereSseJsonParser(sse) { - // example: - // event: text-generation - // data: {"is_finished":false,"event_type":"text-generation","text":"?"} - // - // event: stream-end - // data: {"is_finished":true,...} - switch (sse.event) { - case 'text-generation': - try { - return { data: JSON.parse(sse.data) }; - } catch (e) { - console.error(e, sse.data); - return {}; - } - case 'stream-start': - return {}; - case 'stream-end': - return { finish: true }; - default: - return {}; - } -} +class LineDecoder { + private buffer: any[]; + private trailingCR: boolean; + private textDecoder: TextDecoder | null | undefined; -/** - * @param {SSEMessage} sse - * @returns {SSEParserResult} - */ -export function anthropicSseJsonParser(sse) { - // example: - // event: content_block_delta - // data: {"type": "content_block_delta", "index": 0, "delta": {"type": "text_delta", "text": "Hello"}} - // event: message_stop - // data: {"type": "message_stop"} - switch (sse.event) { - case 'content_block_delta': - try { - return { data: JSON.parse(sse.data) }; - } catch (e) { - console.error(e, sse.data); - return {}; - } - case 'message_start': - case 'content_block_start': - case 'content_block_stop': - return {}; - case 'message_stop': - return { finish: true }; - default: - return {}; - } -} + static NEWLINE_CHARS = new Set(['\n', '\r']); + static NEWLINE_REGEXP = /\r\n|[\n\r]/g; -/** - * A re-implementation of httpx's `LineDecoder` in Python that handles incrementally - * reading lines from text. - * - * https://github.com/encode/httpx/blob/920333ea98118e9cf617f246905d7b202510941c/httpx/_decoders.py#L258 - */ -class LineDecoder { constructor() { this.buffer = []; this.trailingCR = false; } - decode(chunk) { + decode(chunk: Uint8Array | ArrayBuffer | Buffer | string | null): string[] { let text = this.decodeText(chunk); if (this.trailingCR) { text = `\r${text}`; @@ -247,7 +190,7 @@ class LineDecoder { return lines; } - decodeText(bytes) { + decodeText(bytes: Uint8Array | ArrayBuffer | Buffer | string | null): string { if (bytes == null) { return ''; } @@ -272,12 +215,12 @@ class LineDecoder { } return this.textDecoder.decode(bytes, { stream: true }); } - throw new Error(`Unexpected: received non-Uint8Array/ArrayBuffer (${bytes.constructor.name}) in a web platform. Please report this error.`); + throw new Error(`Unexpected: received non-Uint8Array/ArrayBuffer in a web platform. Please report this error.`); } throw new Error('Unexpected: neither Buffer nor TextDecoder are available as globals. Please report this error.'); } - flush() { + flush(): string[] { if (!this.buffer.length && !this.trailingCR) { return []; } @@ -287,7 +230,3 @@ class LineDecoder { return lines; } } - -// prettier-ignore -LineDecoder.NEWLINE_CHARS = new Set(['\n', '\r']); -LineDecoder.NEWLINE_REGEXP = /\r\n|[\n\r]/g; diff --git a/src/agent/types.ts b/src/agent/types.ts new file mode 100644 index 00000000..af17145a --- /dev/null +++ b/src/agent/types.ts @@ -0,0 +1,46 @@ +import type { AgentUserConfig } from '../config/env'; + +export interface HistoryItem { + role: string; + content?: string | null; + images?: string[] | null; +} + +export interface HistoryModifierResult { + history: HistoryItem[]; + message: string | null; +} + +export type HistoryModifier = (history: HistoryItem[], message: string | null) => HistoryModifierResult; + +export type ChatStreamTextHandler = (text: string) => Promise; + +export interface LLMChatRequestParams { + message?: string | null; + images?: string[]; +} + +export interface LLMChatParams extends LLMChatRequestParams { + prompt?: string | null; + history?: HistoryItem[]; +} + +export type ChatAgentRequest = (params: LLMChatParams, context: AgentUserConfig, onStream: ChatStreamTextHandler | null) => Promise; + +export interface ChatAgent { + name: string; + modelKey: string; + enable: (context: AgentUserConfig) => boolean; + request: ChatAgentRequest; + model: (ctx: AgentUserConfig) => string; +} + +export type ImageAgentRequest = (prompt: string, context: AgentUserConfig) => Promise; + +export interface ImageAgent { + name: string; + modelKey: string; + enable: (context: AgentUserConfig) => boolean; + request: ImageAgentRequest; + model: (ctx: AgentUserConfig) => string; +} diff --git a/src/agent/workersai.js b/src/agent/workersai.js deleted file mode 100644 index 1214295b..00000000 --- a/src/agent/workersai.js +++ /dev/null @@ -1,95 +0,0 @@ -import '../types/context.js'; -import { requestChatCompletions } from './request.js'; - -/** - * Run the specified AI model with the provided body data. - * @param {string} model - The AI model to run. - * @param {object} body - The data to provide to the AI model. - * @param {string} id - * @param {string} token - * @returns {Promise} The response from the AI model. - */ -async function run(model, body, id, token) { - return await fetch( - `https://api.cloudflare.com/client/v4/accounts/${id}/ai/run/${model}`, - { - headers: { Authorization: `Bearer ${token}` }, - method: 'POST', - body: JSON.stringify(body), - }, - ); -} - -/** - * @param {ContextType} context - * @returns {boolean} - */ -export function isWorkersAIEnable(context) { - return !!(context.USER_CONFIG.CLOUDFLARE_ACCOUNT_ID && context.USER_CONFIG.CLOUDFLARE_TOKEN); -} - -/** - * @param {HistoryItem} item - * @returns {object} - */ -function renderWorkerAIMessage(item) { - return { - role: item.role, - content: item.content, - }; -} - -/** - * 发送消息到Workers AI - * @param {LlmParams} params - * @param {ContextType} context - * @param {AgentTextHandler} onStream - * @returns {Promise} - */ -export async function requestCompletionsFromWorkersAI(params, context, onStream) { - const { message, prompt, history } = params; - const id = context.USER_CONFIG.CLOUDFLARE_ACCOUNT_ID; - const token = context.USER_CONFIG.CLOUDFLARE_TOKEN; - const model = context.USER_CONFIG.WORKERS_CHAT_MODEL; - const url = `https://api.cloudflare.com/client/v4/accounts/${id}/ai/run/${model}`; - const header = { - Authorization: `Bearer ${token}`, - }; - - const messages = [...(history || []), { role: 'user', content: message }]; - if (prompt) { - messages.unshift({ role: context.USER_CONFIG.SYSTEM_INIT_MESSAGE_ROLE, content: prompt }); - } - - const body = { - messages: messages.map(renderWorkerAIMessage), - stream: onStream !== null, - }; - - /** - * @type {SseChatCompatibleOptions} - */ - const options = {}; - options.contentExtractor = function (data) { - return data?.response; - }; - options.fullContentExtractor = function (data) { - return data?.result?.response; - }; - options.errorExtractor = function (data) { - return data?.errors?.[0]?.message; - }; - return requestChatCompletions(url, header, body, context, onStream, null, options); -} - -/** - * @param {string} prompt - * @param {ContextType} context - * @returns {Promise} - */ -export async function requestImageFromWorkersAI(prompt, context) { - const id = context.USER_CONFIG.CLOUDFLARE_ACCOUNT_ID; - const token = context.USER_CONFIG.CLOUDFLARE_TOKEN; - const raw = await run(context.USER_CONFIG.WORKERS_IMAGE_MODEL, { prompt }, id, token); - return await raw.blob(); -} diff --git a/src/agent/workersai.ts b/src/agent/workersai.ts new file mode 100644 index 00000000..b098e979 --- /dev/null +++ b/src/agent/workersai.ts @@ -0,0 +1,88 @@ +import type { AgentUserConfig } from '../config/env'; +import type { ChatAgent, ChatStreamTextHandler, HistoryItem, ImageAgent, LLMChatParams } from './types'; +import type { SseChatCompatibleOptions } from './request'; +import { requestChatCompletions } from './request'; + +class WorkerBase { + readonly name = 'workers'; + readonly run = async (model: string, body: any, id: string, token: string): Promise => { + return await fetch( + `https://api.cloudflare.com/client/v4/accounts/${id}/ai/run/${model}`, + { + headers: { Authorization: `Bearer ${token}` }, + method: 'POST', + body: JSON.stringify(body), + }, + ); + }; + + readonly enable = (context: AgentUserConfig): boolean => { + return !!(context.CLOUDFLARE_ACCOUNT_ID && context.CLOUDFLARE_TOKEN); + }; +} + +export class WorkersChat extends WorkerBase implements ChatAgent { + readonly modelKey = 'WORKERS_CHAT_MODEL'; + + readonly model = (ctx: AgentUserConfig): string => { + return ctx.WORKERS_CHAT_MODEL; + }; + + private render = (item: HistoryItem): any => { + return { + role: item.role, + content: item.content, + }; + }; + + readonly request = async (params: LLMChatParams, context: AgentUserConfig, onStream: ChatStreamTextHandler | null): Promise => { + const { message, prompt, history } = params; + const id = context.CLOUDFLARE_ACCOUNT_ID; + const token = context.CLOUDFLARE_TOKEN; + const model = context.WORKERS_CHAT_MODEL; + const url = `https://api.cloudflare.com/client/v4/accounts/${id}/ai/run/${model}`; + const header = { + Authorization: `Bearer ${token}`, + }; + + const messages = [...(history || []), { role: 'user', content: message }]; + if (prompt) { + messages.unshift({ role: context.SYSTEM_INIT_MESSAGE_ROLE, content: prompt }); + } + + const body = { + messages: messages.map(this.render), + stream: onStream !== null, + }; + + const options: SseChatCompatibleOptions = {}; + options.contentExtractor = function (data: any) { + return data?.response; + }; + options.fullContentExtractor = function (data: any) { + return data?.result?.response; + }; + options.errorExtractor = function (data: any) { + return data?.errors?.[0]?.message; + }; + return requestChatCompletions(url, header, body, onStream, null, options); + }; +} + +export class WorkersImage extends WorkerBase implements ImageAgent { + readonly modelKey = 'WORKERS_IMAGE_MODEL'; + + readonly model = (ctx: AgentUserConfig): string => { + return ctx.WORKERS_IMAGE_MODEL; + }; + + readonly request = async (prompt: string, context: AgentUserConfig): Promise => { + const id = context.CLOUDFLARE_ACCOUNT_ID; + const token = context.CLOUDFLARE_TOKEN; + if (!id || !token) { + throw new Error('Cloudflare account ID or token is not set'); + } + const raw = await this.run(context.WORKERS_IMAGE_MODEL, { prompt }, id, token); + return await raw.blob(); + }; +} diff --git a/src/config/config.ts b/src/config/config.ts new file mode 100644 index 00000000..6c14846d --- /dev/null +++ b/src/config/config.ts @@ -0,0 +1,206 @@ +// -- 只能通过环境变量覆盖的配置 -- +export class EnvironmentConfig { + // 多语言支持 + LANGUAGE = 'zh-cn'; + // 检查更新的分支 + UPDATE_BRANCH = 'master'; + // Chat Complete API Timeout + CHAT_COMPLETE_API_TIMEOUT = 0; + + // -- Telegram 相关 -- + // + // Telegram API Domain + TELEGRAM_API_DOMAIN = 'https://api.telegram.org'; + // 允许访问的Telegram Token, 设置时以逗号分隔 + TELEGRAM_AVAILABLE_TOKENS: string[] = []; + // 默认消息模式 + DEFAULT_PARSE_MODE = 'Markdown'; + // 最小stream模式消息间隔,小于等于0则不限制 + TELEGRAM_MIN_STREAM_INTERVAL = 0; + // 图片尺寸偏移 0为第一位,-1为最后一位, 越靠后的图片越大。PS: 图片过大可能导致token消耗过多,或者workers超时或内存不足 + // 默认选择次低质量的图片 + TELEGRAM_PHOTO_SIZE_OFFSET = 1; + // 向LLM优先传递图片方式:url, base64 + TELEGRAM_IMAGE_TRANSFER_MODE = 'url'; + + // -- 权限相关 -- + // + // 允许所有人使用 + I_AM_A_GENEROUS_PERSON = false; + // 白名单 + CHAT_WHITE_LIST: string[] = []; + // 用户配置 + LOCK_USER_CONFIG_KEYS = [ + // 默认为API BASE 防止被替换导致token 泄露 + 'OPENAI_API_BASE', + 'GOOGLE_COMPLETIONS_API', + 'MISTRAL_API_BASE', + 'COHERE_API_BASE', + 'ANTHROPIC_API_BASE', + 'AZURE_COMPLETIONS_API', + 'AZURE_DALLE_API', + ]; + + // -- 群组相关 -- + // + // 允许访问的Telegram Token 对应的Bot Name, 设置时以逗号分隔 + TELEGRAM_BOT_NAME: string[] = []; + // 群组白名单 + CHAT_GROUP_WHITE_LIST: string[] = []; + // 群组机器人开关 + GROUP_CHAT_BOT_ENABLE = true; + // 群组机器人共享模式,关闭后,一个群组只有一个会话和配置。开启的话群组的每个人都有自己的会话上下文 + GROUP_CHAT_BOT_SHARE_MODE = true; + + // -- 历史记录相关 -- + // + // 为了避免4096字符限制,将消息删减 + AUTO_TRIM_HISTORY = true; + // 最大历史记录长度 + MAX_HISTORY_LENGTH = 20; + // 最大消息长度 + MAX_TOKEN_LENGTH = -1; + // Image占位符: 当此环境变量存在时,则历史记录中的图片将被替换为此占位符 + HISTORY_IMAGE_PLACEHOLDER: string | null = null; + + // -- 特性开关 -- + // + // 隐藏部分命令按钮 + HIDE_COMMAND_BUTTONS: string[] = []; + // 显示快捷回复按钮 + SHOW_REPLY_BUTTON = false; + // 而外引用消息开关 + EXTRA_MESSAGE_CONTEXT = false; + // 开启Telegraph图床 + TELEGRAPH_ENABLE = false; + + // -- 模式开关 -- + // + // 使用流模式 + STREAM_MODE = true; + // 安全模式 + SAFE_MODE = true; + // 调试模式 + DEBUG_MODE = false; + // 开发模式 + DEV_MODE = false; +} + +// -- 通用配置 -- +export class AgentShareConfig { + // AI提供商: auto, openai, azure, workers, gemini, mistral + AI_PROVIDER = 'auto'; + // AI图片提供商: auto, openai, azure, workers + AI_IMAGE_PROVIDER = 'auto'; + // 全局默认初始化消息 + SYSTEM_INIT_MESSAGE: string | null = null; + // 全局默认初始化消息角色 + SYSTEM_INIT_MESSAGE_ROLE = 'system'; +} + +// -- Open AI 配置 -- +export class OpenAIConfig { + // OpenAI API Key + OPENAI_API_KEY: string[] = []; + // OpenAI的模型名称 + OPENAI_CHAT_MODEL = 'gpt-4o-mini'; + // OpenAI API BASE `` + OPENAI_API_BASE = 'https://api.openai.com/v1'; + // OpenAI API Extra Params + OPENAI_API_EXTRA_PARAMS: Record = {}; +} + +// -- DALLE 配置 -- +export class DalleAIConfig { + // DALL-E的模型名称 + DALL_E_MODEL = 'dall-e-2'; + // DALL-E图片尺寸 + DALL_E_IMAGE_SIZE = '512x512'; + // DALL-E图片质量 + DALL_E_IMAGE_QUALITY = 'standard'; + // DALL-E图片风格 + DALL_E_IMAGE_STYLE = 'vivid'; +} + +// -- AZURE 配置 -- +export class AzureConfig { + // Azure API Key + AZURE_API_KEY: string | null = null; + // Azure Completions API + // https://RESOURCE_NAME.openai.azure.com/openai/deployments/MODEL_NAME/chat/completions?api-version=VERSION_NAME + AZURE_COMPLETIONS_API: string | null = null; + // Azure DallE API + // https://RESOURCE_NAME.openai.azure.com/openai/deployments/MODEL_NAME/images/generations?api-version=VERSION_NAME + AZURE_DALLE_API: string | null = null; +} + +// -- Workers 配置 -- +export class WorkersConfig { + // Cloudflare Account ID + CLOUDFLARE_ACCOUNT_ID: string | null = null; + // Cloudflare Token + CLOUDFLARE_TOKEN: string | null = null; + // Text Generation Model + WORKERS_CHAT_MODEL = '@cf/mistral/mistral-7b-instruct-v0.1 '; + // Text-to-Image Model + WORKERS_IMAGE_MODEL = '@cf/stabilityai/stable-diffusion-xl-base-1.0'; +} + +// -- Gemini 配置 -- +export class GeminiConfig { + // Google Gemini API Key + GOOGLE_API_KEY: string | null = null; + // Google Gemini API + GOOGLE_COMPLETIONS_API = 'https://generativelanguage.googleapis.com/v1beta/models/'; + // Google Gemini Model + GOOGLE_COMPLETIONS_MODEL = 'gemini-pro'; +} + +// -- Mistral 配置 -- +export class MistralConfig { + // mistral api key + MISTRAL_API_KEY: string | null = null; + // mistral api base + MISTRAL_API_BASE = 'https://api.mistral.ai/v1'; + // mistral api model + MISTRAL_CHAT_MODEL = 'mistral-tiny'; +} + +// -- Cohere 配置 -- +export class CohereConfig { + // cohere api key + COHERE_API_KEY: string | null = null; + // cohere api base + COHERE_API_BASE = 'https://api.cohere.com/v1'; + // cohere api model + COHERE_CHAT_MODEL = 'command-r-plus'; +} + +// -- Anthropic 配置 -- +export class AnthropicConfig { + // Anthropic api key + ANTHROPIC_API_KEY: string | null = null; + // Anthropic api base + ANTHROPIC_API_BASE = 'https://api.anthropic.com/v1'; + // Anthropic api model + ANTHROPIC_CHAT_MODEL = 'claude-3-haiku-20240307'; +} + +export class DefineKeys { + DEFINE_KEYS: string[] = []; + + trim = (lock: string[]): Record => { + const config: Record = { ...this }; + const keysSet = new Set(this.DEFINE_KEYS || []); + for (const key of lock) { + keysSet.delete(key); + } + keysSet.add('DEFINE_KEYS'); + for (const key of Object.keys(config)) { + if (!keysSet.has(key)) { + delete config[key]; + } + } + return config; + }; +} diff --git a/src/config/context.js b/src/config/context.js deleted file mode 100644 index fd53d4b0..00000000 --- a/src/config/context.js +++ /dev/null @@ -1,197 +0,0 @@ -import { CONST, DATABASE, ENV, UserConfig, mergeEnvironment } from './env.js'; -import '../types/telegram.js'; - -/** - * @param {UserConfigType} userConfig - * @returns {object} - */ -export function trimUserConfig(userConfig) { - const config = { - ...(userConfig || {}), - }; - const keysSet = new Set(userConfig?.DEFINE_KEYS || []); - for (const key of ENV.LOCK_USER_CONFIG_KEYS) { - keysSet.delete(key); - } - keysSet.add('DEFINE_KEYS'); - for (const key of Object.keys(config)) { - if (!keysSet.has(key)) { - delete config[key]; - } - } - return config; -} - -/** - * @class - * @implements {ShareContextType} - */ -class ShareContext { - currentBotId = null; - currentBotToken = null; - currentBotName = null; - chatHistoryKey = null; - chatLastMessageIdKey = null; - configStoreKey = null; - groupAdminKey = null; - usageKey = null; - chatType = null; - chatId = null; - speakerId = null; - extraMessageContext = null; - allMemberAreAdmin = false; -} - -/** - * @class - * @implements {CurrentChatContextType} - */ -class CurrentChatContext { - chat_id = null; - reply_to_message_id = null; - parse_mode = ENV.DEFAULT_PARSE_MODE; - message_id = null; - reply_markup = null; - allow_sending_without_reply = null; - disable_web_page_preview = null; -} - -/** - * 上下文信息 - * @class - * @implements {ContextType} - */ -export class Context { - // 用户配置 - USER_CONFIG = new UserConfig(); - CURRENT_CHAT_CONTEXT = new CurrentChatContext(); - SHARE_CONTEXT = new ShareContext(); - - /** - * @inner - * @param {string | number} chatId - * @param {string | number} replyToMessageId - */ - _initChatContext(chatId, replyToMessageId) { - this.CURRENT_CHAT_CONTEXT.chat_id = chatId; - this.CURRENT_CHAT_CONTEXT.reply_to_message_id = replyToMessageId; - if (replyToMessageId) { - this.CURRENT_CHAT_CONTEXT.allow_sending_without_reply = true; - } - } - - // - - /** - * 初始化用户配置 - * @inner - * @param {string | null} storeKey - */ - async _initUserConfig(storeKey) { - try { - // 复制默认配置 - this.USER_CONFIG = { - ...ENV.USER_CONFIG, - }; - /** - * @type {UserConfigType} - */ - const userConfig = JSON.parse(await DATABASE.get(storeKey)); - mergeEnvironment(this.USER_CONFIG, trimUserConfig(userConfig)); - } catch (e) { - console.error(e); - } - } - - /** - * @param {string} token - */ - initTelegramContext(token) { - const telegramIndex = ENV.TELEGRAM_AVAILABLE_TOKENS.indexOf(token); - if (telegramIndex === -1) { - throw new Error('Token not allowed'); - } - this.SHARE_CONTEXT.currentBotToken = token; - this.SHARE_CONTEXT.currentBotId = token.split(':')[0]; - if (ENV.TELEGRAM_BOT_NAME.length > telegramIndex) { - this.SHARE_CONTEXT.currentBotName = ENV.TELEGRAM_BOT_NAME[telegramIndex]; - } - } - - /** - * - * @inner - * @param {TelegramMessage} message - */ - async _initShareContext(message) { - this.SHARE_CONTEXT.usageKey = `usage:${this.SHARE_CONTEXT.currentBotId}`; - const id = message?.chat?.id; - if (id === undefined || id === null) { - throw new Error('Chat id not found'); - } - - /* - message_id每次都在变的。 - 私聊消息中: - message.chat.id 是发言人id - 群组消息中: - message.chat.id 是群id - message.from.id 是发言人id - 没有开启群组共享模式时,要加上发言人id - chatHistoryKey = history:chat_id:bot_id:(from_id) - configStoreKey = user_config:chat_id:bot_id:(from_id) - * */ - - const botId = this.SHARE_CONTEXT.currentBotId; - let historyKey = `history:${id}`; - let configStoreKey = `user_config:${id}`; - let groupAdminKey = null; - - if (botId) { - historyKey += `:${botId}`; - configStoreKey += `:${botId}`; - } - // 标记群组消息 - if (CONST.GROUP_TYPES.includes(message.chat?.type)) { - if (!ENV.GROUP_CHAT_BOT_SHARE_MODE && message.from.id) { - historyKey += `:${message.from.id}`; - configStoreKey += `:${message.from.id}`; - } - groupAdminKey = `group_admin:${id}`; - } - - // 判断是否为话题模式 - if (message?.chat?.is_forum && message?.is_topic_message) { - if (message?.message_thread_id) { - historyKey += `:${message.message_thread_id}`; - configStoreKey += `:${message.message_thread_id}`; - } - } - - this.SHARE_CONTEXT.chatHistoryKey = historyKey; - this.SHARE_CONTEXT.chatLastMessageIdKey = `last_message_id:${historyKey}`; - this.SHARE_CONTEXT.configStoreKey = configStoreKey; - this.SHARE_CONTEXT.groupAdminKey = groupAdminKey; - - this.SHARE_CONTEXT.chatType = message.chat?.type; - this.SHARE_CONTEXT.chatId = message.chat.id; - this.SHARE_CONTEXT.speakerId = message.from.id || message.chat.id; - this.SHARE_CONTEXT.allMemberAreAdmin = message?.chat?.all_members_are_administrators; - } - - /** - * @param {TelegramMessage} message - * @returns {Promise} - */ - async initContext(message) { - // 按顺序初始化上下文 - const chatId = message?.chat?.id; - const replyId = CONST.GROUP_TYPES.includes(message.chat?.type) ? message.message_id : null; - this._initChatContext(chatId, replyId); - // console.log(this.CURRENT_CHAT_CONTEXT); - await this._initShareContext(message); - // console.log(this.SHARE_CONTEXT); - await this._initUserConfig(this.SHARE_CONTEXT.configStoreKey); - // console.log(this.USER_CONFIG); - } -} diff --git a/src/config/context.ts b/src/config/context.ts new file mode 100644 index 00000000..b93b5431 --- /dev/null +++ b/src/config/context.ts @@ -0,0 +1,100 @@ +import type * as Telegram from 'telegram-bot-api-types'; +import { ConfigMerger } from './merger'; +import type { AgentUserConfig } from './env'; +import { ENV } from './env'; + +export class ShareContext { + botId: number; + botToken: string; + botName: string | null = null; + + // KV 保存的键 + chatHistoryKey: string; + lastMessageKey: string; + configStoreKey: string; + groupAdminsKey?: string; + + constructor(token: string, message: Telegram.Message) { + const botId = Number.parseInt(token.split(':')[0]); + + const telegramIndex = ENV.TELEGRAM_AVAILABLE_TOKENS.indexOf(token); + if (telegramIndex === -1) { + throw new Error('Token not allowed'); + } + if (ENV.TELEGRAM_BOT_NAME.length > telegramIndex) { + this.botName = ENV.TELEGRAM_BOT_NAME[telegramIndex]; + } + + this.botToken = token; + this.botId = botId; + const id = message?.chat?.id; + if (id === undefined || id === null) { + throw new Error('Chat id not found'); + } + // message_id每次都在变的。 + // 私聊消息中: + // message.chat.id 是发言人id + // 群组消息中: + // message.chat.id 是群id + // message.from.id 是发言人id + // 没有开启群组共享模式时,要加上发言人id + // chatHistoryKey = history:chat_id:bot_id:(from_id) + // configStoreKey = user_config:chat_id:bot_id:(from_id) + + let historyKey = `history:${id}`; + let configStoreKey = `user_config:${id}`; + + if (botId) { + historyKey += `:${botId}`; + configStoreKey += `:${botId}`; + } + // 标记群组消息 + switch (message.chat.type) { + case 'group': + case 'supergroup': + if (!ENV.GROUP_CHAT_BOT_SHARE_MODE && message.from?.id) { + historyKey += `:${message.from.id}`; + configStoreKey += `:${message.from.id}`; + } + this.groupAdminsKey = `group_admin:${id}`; + break; + default: + break; + } + + // 判断是否为话题模式 + if (message?.chat.is_forum && message?.is_topic_message) { + if (message?.message_thread_id) { + historyKey += `:${message.message_thread_id}`; + configStoreKey += `:${message.message_thread_id}`; + } + } + + this.chatHistoryKey = historyKey; + this.lastMessageKey = `last_message_id:${historyKey}`; + this.configStoreKey = configStoreKey; + } +} + +export class WorkerContext { + // 用户配置 + USER_CONFIG: AgentUserConfig; + SHARE_CONTEXT: ShareContext; + + constructor(USER_CONFIG: AgentUserConfig, SHARE_CONTEXT: ShareContext) { + this.USER_CONFIG = USER_CONFIG; + this.SHARE_CONTEXT = SHARE_CONTEXT; + } + + static async from(token: string, message: Telegram.Message): Promise { + const SHARE_CONTEXT = new ShareContext(token, message); + const USER_CONFIG = Object.assign({}, ENV.USER_CONFIG); + try { + const userConfig: AgentUserConfig = JSON.parse(await ENV.DATABASE.get(SHARE_CONTEXT.configStoreKey)); + ConfigMerger.merge(USER_CONFIG, userConfig?.trim(ENV.LOCK_USER_CONFIG_KEYS) || {}); + } catch (e) { + console.warn(e); + } + return new WorkerContext(USER_CONFIG, SHARE_CONTEXT); + } +} diff --git a/src/config/env.js b/src/config/env.js deleted file mode 100644 index 54510c90..00000000 --- a/src/config/env.js +++ /dev/null @@ -1,388 +0,0 @@ -import '../types/i18n.js'; -import '../types/context.js'; - -/** - * @class - * @implements {UserConfigType} - */ -export class UserConfig { - // -- 非配置属性 -- - DEFINE_KEYS = []; - - // -- 通用配置 -- - // - // AI提供商: auto, openai, azure, workers, gemini, mistral - AI_PROVIDER = 'auto'; - // AI图片提供商: auto, openai, azure, workers - AI_IMAGE_PROVIDER = 'auto'; - // 全局默认初始化消息 - SYSTEM_INIT_MESSAGE = null; - // 全局默认初始化消息角色 - SYSTEM_INIT_MESSAGE_ROLE = 'system'; - - // -- Open AI 配置 -- - // - // OpenAI API Key - OPENAI_API_KEY = []; - // OpenAI的模型名称 - OPENAI_CHAT_MODEL = 'gpt-4o-mini'; - // OpenAI API BASE `` - OPENAI_API_BASE = 'https://api.openai.com/v1'; - // OpenAI API Extra Params - OPENAI_API_EXTRA_PARAMS = {}; - - // -- DALLE 配置 -- - // - // DALL-E的模型名称 - DALL_E_MODEL = 'dall-e-2'; - // DALL-E图片尺寸 - DALL_E_IMAGE_SIZE = '512x512'; - // DALL-E图片质量 - DALL_E_IMAGE_QUALITY = 'standard'; - // DALL-E图片风格 - DALL_E_IMAGE_STYLE = 'vivid'; - - // -- AZURE 配置 -- - // - // Azure API Key - AZURE_API_KEY = null; - // Azure Completions API - // https://RESOURCE_NAME.openai.azure.com/openai/deployments/MODEL_NAME/chat/completions?api-version=VERSION_NAME - AZURE_COMPLETIONS_API = null; - // Azure DallE API - // https://RESOURCE_NAME.openai.azure.com/openai/deployments/MODEL_NAME/images/generations?api-version=VERSION_NAME - AZURE_DALLE_API = null; - - // -- Workers 配置 -- - // - // Cloudflare Account ID - CLOUDFLARE_ACCOUNT_ID = null; - // Cloudflare Token - CLOUDFLARE_TOKEN = null; - // Text Generation Model - WORKERS_CHAT_MODEL = '@cf/mistral/mistral-7b-instruct-v0.1 '; - // Text-to-Image Model - WORKERS_IMAGE_MODEL = '@cf/stabilityai/stable-diffusion-xl-base-1.0'; - - // -- Gemini 配置 -- - // - // Google Gemini API Key - GOOGLE_API_KEY = null; - // Google Gemini API - GOOGLE_COMPLETIONS_API = 'https://generativelanguage.googleapis.com/v1beta/models/'; - // Google Gemini Model - GOOGLE_COMPLETIONS_MODEL = 'gemini-pro'; - - // -- Mistral 配置 -- - // - // mistral api key - MISTRAL_API_KEY = null; - // mistral api base - MISTRAL_API_BASE = 'https://api.mistral.ai/v1'; - // mistral api model - MISTRAL_CHAT_MODEL = 'mistral-tiny'; - - // -- Cohere 配置 -- - // - // cohere api key - COHERE_API_KEY = null; - // cohere api base - COHERE_API_BASE = 'https://api.cohere.com/v1'; - // cohere api model - COHERE_CHAT_MODEL = 'command-r-plus'; - - // -- Anthropic 配置 -- - // - // Anthropic api key - ANTHROPIC_API_KEY = null; - // Anthropic api base - ANTHROPIC_API_BASE = 'https://api.anthropic.com/v1'; - // Anthropic api model - ANTHROPIC_CHAT_MODEL = 'claude-3-haiku-20240307'; -} - -export class Environment { - // -- 版本数据 -- - // - // 当前版本 - // eslint-disable-next-line no-undef - BUILD_TIMESTAMP = typeof __BUILD_TIMESTAMP__ === 'number' ? __BUILD_TIMESTAMP__ : 0; - // 当前版本 commit id - // eslint-disable-next-line no-undef - BUILD_VERSION = typeof __BUILD_VERSION__ === 'string' ? __BUILD_VERSION__ : 'unknown'; - - // -- 基础配置 -- - /** - * @type {I18n | null} - */ - I18N = null; - // 多语言支持 - LANGUAGE = 'zh-cn'; - // 检查更新的分支 - UPDATE_BRANCH = 'master'; - // Chat Complete API Timeout - CHAT_COMPLETE_API_TIMEOUT = 0; - - // -- Telegram 相关 -- - // - // Telegram API Domain - TELEGRAM_API_DOMAIN = 'https://api.telegram.org'; - // 允许访问的Telegram Token, 设置时以逗号分隔 - TELEGRAM_AVAILABLE_TOKENS = []; - // 默认消息模式 - DEFAULT_PARSE_MODE = 'Markdown'; - // 最小stream模式消息间隔,小于等于0则不限制 - TELEGRAM_MIN_STREAM_INTERVAL = 0; - // 图片尺寸偏移 0为第一位,-1为最后一位, 越靠后的图片越大。PS: 图片过大可能导致token消耗过多,或者workers超时或内存不足 - // 默认选择次低质量的图片 - TELEGRAM_PHOTO_SIZE_OFFSET = 1; - // 向LLM优先传递图片方式:url, base64 - TELEGRAM_IMAGE_TRANSFER_MODE = 'url'; - - // -- 权限相关 -- - // - // 允许所有人使用 - I_AM_A_GENEROUS_PERSON = false; - // 白名单 - CHAT_WHITE_LIST = []; - // 用户配置 - LOCK_USER_CONFIG_KEYS = [ - // 默认为API BASE 防止被替换导致token 泄露 - 'OPENAI_API_BASE', - 'GOOGLE_COMPLETIONS_API', - 'MISTRAL_API_BASE', - 'COHERE_API_BASE', - 'ANTHROPIC_API_BASE', - 'AZURE_COMPLETIONS_API', - 'AZURE_DALLE_API', - ]; - - // -- 群组相关 -- - // - // 允许访问的Telegram Token 对应的Bot Name, 设置时以逗号分隔 - TELEGRAM_BOT_NAME = []; - // 群组白名单 - CHAT_GROUP_WHITE_LIST = []; - // 群组机器人开关 - GROUP_CHAT_BOT_ENABLE = true; - // 群组机器人共享模式,关闭后,一个群组只有一个会话和配置。开启的话群组的每个人都有自己的会话上下文 - GROUP_CHAT_BOT_SHARE_MODE = true; - - // -- 历史记录相关 -- - // - // 为了避免4096字符限制,将消息删减 - AUTO_TRIM_HISTORY = true; - // 最大历史记录长度 - MAX_HISTORY_LENGTH = 20; - // 最大消息长度 - MAX_TOKEN_LENGTH = -1; - // Image占位符: 当此环境变量存在时,则历史记录中的图片将被替换为此占位符 - HISTORY_IMAGE_PLACEHOLDER = null; - - // -- 特性开关 -- - // - // 隐藏部分命令按钮 - HIDE_COMMAND_BUTTONS = []; - // 显示快捷回复按钮 - SHOW_REPLY_BUTTON = false; - // 而外引用消息开关 - EXTRA_MESSAGE_CONTEXT = false; - // 开启Telegraph图床 - TELEGRAPH_ENABLE = false; - - // -- 模式开关 -- - // - // 使用流模式 - STREAM_MODE = true; - // 安全模式 - SAFE_MODE = true; - // 调试模式 - DEBUG_MODE = false; - // 开发模式 - DEV_MODE = false; - - USER_CONFIG = new UserConfig(); -} - -/** - * Environment Variables: Separate configuration values from a Worker script with Environment Variables. - * @type {Environment} - */ -export const ENV = new Environment(); - -/** - * KV Namespace Bindings: Bind an instance of a KV Namespace to access its data in a Worker - * @type {KVNamespace} - */ -// eslint-disable-next-line import/no-mutable-exports -export let DATABASE = null; - -/** - * Service Bindings: Bind to another Worker to invoke it directly from your code. - * @type {APIGuard|null} - */ -// eslint-disable-next-line import/no-mutable-exports -export let API_GUARD = null; - -export const CUSTOM_COMMAND = {}; -export const CUSTOM_COMMAND_DESCRIPTION = {}; - -export const CONST = { - PASSWORD_KEY: 'chat_history_password', - GROUP_TYPES: ['group', 'supergroup'], -}; - -const ENV_TYPES = { - SYSTEM_INIT_MESSAGE: 'string', - AZURE_API_KEY: 'string', - AZURE_COMPLETIONS_API: 'string', - AZURE_DALLE_API: 'string', - CLOUDFLARE_ACCOUNT_ID: 'string', - CLOUDFLARE_TOKEN: 'string', - GOOGLE_API_KEY: 'string', - MISTRAL_API_KEY: 'string', - COHERE_API_KEY: 'string', - ANTHROPIC_API_KEY: 'string', - HISTORY_IMAGE_PLACEHOLDER: 'string', -}; - -export const ENV_KEY_MAPPER = { - CHAT_MODEL: 'OPENAI_CHAT_MODEL', - API_KEY: 'OPENAI_API_KEY', - WORKERS_AI_MODEL: 'WORKERS_CHAT_MODEL', -}; - -/** - * @param {string} raw - * @returns {string[]} - */ -function parseArray(raw) { - raw = raw.trim(); - if (raw === '') { - return []; - } - if (raw.startsWith('[') && raw.endsWith(']')) { - try { - return JSON.parse(raw); - } catch (e) { - console.error(e); - } - } - return raw.split(','); -} - -/** - * @param {Environment|UserConfig} target - * @param {object} source - */ -export function mergeEnvironment(target, source) { - const sourceKeys = new Set(Object.keys(source)); - for (const key of Object.keys(target)) { - // 不存在的key直接跳过 - if (!sourceKeys.has(key)) { - continue; - } - const t = ENV_TYPES[key] || typeof target[key]; - // 不是字符串直接赋值 - if (typeof source[key] !== 'string') { - target[key] = source[key]; - continue; - } - switch (t) { - case 'number': - target[key] = Number.parseInt(source[key], 10); - break; - case 'boolean': - target[key] = (source[key] || 'false') === 'true'; - break; - case 'string': - target[key] = source[key]; - break; - case 'array': - target[key] = parseArray(source[key]); - break; - case 'object': - if (Array.isArray(target[key])) { - target[key] = parseArray(source[key]); - } else { - try { - target[key] = JSON.parse(source[key]); - } catch (e) { - console.error(e); - } - } - break; - default: - target[key] = source[key]; - break; - } - } -} - -/** - * @param {object} env - * @param {I18nGenerator} i18n - */ -export function initEnv(env, i18n) { - // 全局对象 - DATABASE = env.DATABASE; - API_GUARD = env.API_GUARD; - - // 绑定自定义命令 - const customCommandPrefix = 'CUSTOM_COMMAND_'; - const customCommandDescriptionPrefix = 'COMMAND_DESCRIPTION_'; - for (const key of Object.keys(env)) { - if (key.startsWith(customCommandPrefix)) { - const cmd = key.substring(customCommandPrefix.length); - CUSTOM_COMMAND[`/${cmd}`] = env[key]; - CUSTOM_COMMAND_DESCRIPTION[`/${cmd}`] = env[customCommandDescriptionPrefix + cmd]; - } - } - - // 合并环境变量 - mergeEnvironment(ENV, env); - mergeEnvironment(ENV.USER_CONFIG, env); - migrateOldEnv(env, i18n); - ENV.USER_CONFIG.DEFINE_KEYS = []; -} - -/** - * @param {object} env - * @param {I18nGenerator} i18n - */ -function migrateOldEnv(env, i18n) { - ENV.I18N = i18n((ENV.LANGUAGE || 'cn').toLowerCase()); - - // 兼容旧版 TELEGRAM_TOKEN - if (env.TELEGRAM_TOKEN && !ENV.TELEGRAM_AVAILABLE_TOKENS.includes(env.TELEGRAM_TOKEN)) { - if (env.BOT_NAME && ENV.TELEGRAM_AVAILABLE_TOKENS.length === ENV.TELEGRAM_BOT_NAME.length) { - ENV.TELEGRAM_BOT_NAME.push(env.BOT_NAME); - } - ENV.TELEGRAM_AVAILABLE_TOKENS.push(env.TELEGRAM_TOKEN); - } - - // 兼容旧版 OPENAI_API_DOMAIN - if (env.OPENAI_API_DOMAIN && !ENV.OPENAI_API_BASE) { - ENV.USER_CONFIG.OPENAI_API_BASE = `${env.OPENAI_API_DOMAIN}/v1`; - } - - // 兼容旧版 WORKERS_AI_MODEL - if (env.WORKERS_AI_MODEL && !ENV.USER_CONFIG.WORKERS_CHAT_MODEL) { - ENV.USER_CONFIG.WORKERS_CHAT_MODEL = env.WORKERS_AI_MODEL; - } - - // 兼容旧版API_KEY - if (env.API_KEY && ENV.USER_CONFIG.OPENAI_API_KEY.length === 0) { - ENV.USER_CONFIG.OPENAI_API_KEY = env.API_KEY.split(','); - } - - // 兼容旧版CHAT_MODEL - if (env.CHAT_MODEL && !ENV.USER_CONFIG.OPENAI_CHAT_MODEL) { - ENV.USER_CONFIG.OPENAI_CHAT_MODEL = env.CHAT_MODEL; - } - - // 选择对应语言的SYSTEM_INIT_MESSAGE - if (!ENV.USER_CONFIG.SYSTEM_INIT_MESSAGE) { - ENV.USER_CONFIG.SYSTEM_INIT_MESSAGE = ENV.I18N?.env?.system_init_message || 'You are a helpful assistant'; - } -} diff --git a/src/config/env.test.ts b/src/config/env.test.ts new file mode 100644 index 00000000..c23d8400 --- /dev/null +++ b/src/config/env.test.ts @@ -0,0 +1,13 @@ +import { readFileSync } from 'node:fs'; +import { parse } from 'toml'; +import { ENV } from './env'; + +{ + const toml = readFileSync('../../wrangler.toml', 'utf8'); + const config = parse(toml); + ENV.merge({ + ...config.vars, + DATABASE: {}, + }); + // console.log(JSON.stringify(ENV, null, 2)); +} diff --git a/src/config/env.ts b/src/config/env.ts new file mode 100644 index 00000000..db20817f --- /dev/null +++ b/src/config/env.ts @@ -0,0 +1,170 @@ +import loadI18n from '../i18n'; +import type { APIGuard, CommandConfig, KVNamespace } from './types'; +import { + AgentShareConfig, + AnthropicConfig, + AzureConfig, + CohereConfig, + DalleAIConfig, + DefineKeys, + EnvironmentConfig, + GeminiConfig, + MistralConfig, + OpenAIConfig, + WorkersConfig, +} from './config'; +import { ConfigMerger } from './merger'; + +export type AgentUserConfig = Record & + DefineKeys & + AgentShareConfig & + OpenAIConfig & + DalleAIConfig & + AzureConfig & + WorkersConfig & + GeminiConfig & + MistralConfig & + CohereConfig & + AnthropicConfig; + +function createAgentUserConfig(): AgentUserConfig { + return Object.assign( + {}, + new DefineKeys(), + new AgentShareConfig(), + new OpenAIConfig(), + new DalleAIConfig(), + new AzureConfig(), + new WorkersConfig(), + new GeminiConfig(), + new MistralConfig(), + new CohereConfig(), + new AnthropicConfig(), + ); +} + +export const ENV_KEY_MAPPER: Record = { + CHAT_MODEL: 'OPENAI_CHAT_MODEL', + API_KEY: 'OPENAI_API_KEY', + WORKERS_AI_MODEL: 'WORKERS_CHAT_MODEL', +}; + +class Environment extends EnvironmentConfig { + // -- 版本数据 -- + // + // 当前版本 + // eslint-disable-next-line ts/ban-ts-comment + // @ts-expect-error + BUILD_TIMESTAMP = typeof __BUILD_TIMESTAMP__ === 'number' ? __BUILD_TIMESTAMP__ : 0; + // 当前版本 commit id + // eslint-disable-next-line ts/ban-ts-comment + // @ts-expect-error + BUILD_VERSION = typeof __BUILD_VERSION__ === 'string' ? __BUILD_VERSION__ : 'unknown'; + + // -- 基础配置 -- + I18N = loadI18n(); + readonly PLUGINS_ENV: Record = {}; + readonly USER_CONFIG: AgentUserConfig = createAgentUserConfig(); + readonly CUSTOM_COMMAND: Record = {}; + readonly PLUGINS_COMMAND: Record = {}; + + DATABASE: KVNamespace = null as any; + API_GUARD: APIGuard | null = null; + + merge(source: any) { + // 全局对象 + this.DATABASE = source.DATABASE; + this.API_GUARD = source.API_GUARD; + + // 绑定自定义命令 + this.mergeCommands( + 'CUSTOM_COMMAND_', + 'COMMAND_DESCRIPTION_', + source, + this.CUSTOM_COMMAND, + ); + + // 绑定插件命令 + this.mergeCommands( + 'PLUGIN_COMMAND_', + 'PLUGIN_DESCRIPTION_', + source, + this.PLUGINS_COMMAND, + ); + + // 绑定插件环境变量 + const pluginEnvPrefix = 'PLUGIN_ENV_'; + for (const key of Object.keys(source)) { + if (key.startsWith(pluginEnvPrefix)) { + const plugin = key.substring(pluginEnvPrefix.length); + this.PLUGINS_ENV[plugin] = source[key]; + } + } + + // 合并环境变量 + ConfigMerger.merge(this, source, [ + 'BUILD_TIMESTAMP', + 'BUILD_VERSION', + 'I18N', + 'PLUGINS_ENV', + 'USER_CONFIG', + 'CUSTOM_COMMAND', + 'PLUGINS_COMMAND', + 'DATABASE', + 'API_GUARD', + ]); + ConfigMerger.merge(this.USER_CONFIG, source); + this.migrateOldEnv(source); + this.USER_CONFIG.DEFINE_KEYS = []; + this.I18N = loadI18n(this.LANGUAGE.toLowerCase()); + } + + private mergeCommands(prefix: string, descriptionPrefix: string, source: any, target: Record) { + for (const key of Object.keys(source)) { + if (key.startsWith(prefix)) { + const cmd = key.substring(prefix.length); + target[`/${cmd}`] = { + value: source[key], + description: source[`${descriptionPrefix}${cmd}`], + }; + } + } + } + + private migrateOldEnv(source: any) { + // 兼容旧版 TELEGRAM_TOKEN + if (source.TELEGRAM_TOKEN && !this.TELEGRAM_AVAILABLE_TOKENS.includes(source.TELEGRAM_TOKEN)) { + if (source.BOT_NAME && this.TELEGRAM_AVAILABLE_TOKENS.length === this.TELEGRAM_BOT_NAME.length) { + this.TELEGRAM_BOT_NAME.push(source.BOT_NAME); + } + this.TELEGRAM_AVAILABLE_TOKENS.push(source.TELEGRAM_TOKEN); + } + + // 兼容旧版 OPENAI_API_DOMAIN + if (source.OPENAI_API_DOMAIN && !this.USER_CONFIG.OPENAI_API_BASE) { + this.USER_CONFIG.OPENAI_API_BASE = `${source.OPENAI_API_DOMAIN}/v1`; + } + + // 兼容旧版 WORKERS_AI_MODEL + if (source.WORKERS_AI_MODEL && !this.USER_CONFIG.WORKERS_CHAT_MODEL) { + this.USER_CONFIG.WORKERS_CHAT_MODEL = source.WORKERS_AI_MODEL; + } + + // 兼容旧版API_KEY + if (source.API_KEY && this.USER_CONFIG.OPENAI_API_KEY.length === 0) { + this.USER_CONFIG.OPENAI_API_KEY = source.API_KEY.split(','); + } + + // 兼容旧版CHAT_MODEL + if (source.CHAT_MODEL && !this.USER_CONFIG.OPENAI_CHAT_MODEL) { + this.USER_CONFIG.OPENAI_CHAT_MODEL = source.CHAT_MODEL; + } + + // 选择对应语言的SYSTEM_INIT_MESSAGE + if (!this.USER_CONFIG.SYSTEM_INIT_MESSAGE) { + this.USER_CONFIG.SYSTEM_INIT_MESSAGE = this.I18N?.env?.system_init_message || 'You are a helpful assistant'; + } + } +} + +export const ENV = new Environment(); diff --git a/src/config/merger.ts b/src/config/merger.ts new file mode 100644 index 00000000..f740ba7e --- /dev/null +++ b/src/config/merger.ts @@ -0,0 +1,61 @@ +export class ConfigMerger { + private static parseArray(raw: string): string[] { + raw = raw.trim(); + if (raw === '') { + return []; + } + if (raw.startsWith('[') && raw.endsWith(']')) { + try { + return JSON.parse(raw); + } catch (e) { + console.error(e); + } + } + return raw.split(','); + } + + static merge(target: Record, source: Record, exclude?: string[]) { + const sourceKeys = new Set(Object.keys(source)); + for (const key of Object.keys(target)) { + // 不存在的key直接跳过 + if (!sourceKeys.has(key)) { + continue; + } + if (exclude && exclude.includes(key)) { + continue; + } + // 默认为字符串类型 + const t = target[key] ? typeof target[key] : 'string'; + // 不是字符串直接赋值 + if (typeof source[key] !== 'string') { + target[key] = source[key]; + continue; + } + switch (t) { + case 'number': + target[key] = Number.parseInt(source[key], 10); + break; + case 'boolean': + target[key] = (source[key] || 'false') === 'true'; + break; + case 'string': + target[key] = source[key]; + break; + case 'object': + if (Array.isArray(target[key])) { + target[key] = ConfigMerger.parseArray(source[key]); + } else { + try { + target[key] = JSON.parse(source[key]); + } catch (e) { + console.error(e); + } + } + break; + default: + target[key] = source[key]; + break; + } + } + } +} diff --git a/src/config/types.ts b/src/config/types.ts new file mode 100644 index 00000000..3f9d1355 --- /dev/null +++ b/src/config/types.ts @@ -0,0 +1,14 @@ +export interface KVNamespace { + get: (key: string) => Promise; + put: (key: string, value: string, info?: { expirationTtl?: number; expiration?: number }) => Promise; + delete: (key: string) => Promise; +} + +export interface APIGuard { + fetch: (request: Request) => Promise; +} + +export interface CommandConfig { + value: string; + description?: string | null; +} diff --git a/src/i18n/en.js b/src/i18n/en.ts similarity index 100% rename from src/i18n/en.js rename to src/i18n/en.ts diff --git a/src/i18n/index.js b/src/i18n/index.ts similarity index 56% rename from src/i18n/index.js rename to src/i18n/index.ts index a6b8e89a..e6aa5e92 100644 --- a/src/i18n/index.js +++ b/src/i18n/index.ts @@ -1,16 +1,11 @@ -import zhHans from './zh-hans.js'; -import zhHant from './zh-hant.js'; -import pt from './pt.js'; -import en from './en.js'; -import '../types/i18n.js'; +import type { I18n } from './types'; +import zhHans from './zh-hans'; +import zhHant from './zh-hant'; +import pt from './pt'; +import en from './en'; -/** - * @type {I18nGenerator} - * @param {string} lang - * @returns {I18n} - */ -export default function i18n(lang) { - switch (lang.toLowerCase()) { +export default function loadI18n(lang?: string): I18n { + switch (lang?.toLowerCase()) { case 'cn': case 'zh-cn': case 'zh-hans': diff --git a/src/i18n/pt.js b/src/i18n/pt.ts similarity index 100% rename from src/i18n/pt.js rename to src/i18n/pt.ts diff --git a/src/i18n/types.ts b/src/i18n/types.ts new file mode 100644 index 00000000..0dbc6c2c --- /dev/null +++ b/src/i18n/types.ts @@ -0,0 +1,26 @@ +interface HelpI18n { + summary: string; + help: string; + new: string; + start: string; + img: string; + version: string; + setenv: string; + setenvs: string; + delenv: string; + system: string; + redo: string; + echo: string; +} + +export interface I18n { + env: { + system_init_message: string; + }; + command: { + help: HelpI18n & Record; + new: { + new_chat_start: string; + }; + }; +} diff --git a/src/i18n/zh-hans.js b/src/i18n/zh-hans.ts similarity index 100% rename from src/i18n/zh-hans.js rename to src/i18n/zh-hans.ts diff --git a/src/i18n/zh-hant.js b/src/i18n/zh-hant.ts similarity index 100% rename from src/i18n/zh-hant.js rename to src/i18n/zh-hant.ts diff --git a/src/index.ts b/src/index.ts new file mode 100644 index 00000000..ffd98581 --- /dev/null +++ b/src/index.ts @@ -0,0 +1,17 @@ +import { createRouter } from './route'; +import { ENV } from './config/env'; + +export default { + async fetch(request: Request, env: any): Promise { + try { + ENV.merge(env); + return createRouter().fetch(request); + } catch (e) { + console.error(e); + return new Response(JSON.stringify({ + message: (e as Error).message, + stack: (e as Error).stack, + }), { status: 500 }); + } + }, +}; diff --git a/src/plugins/interpolate.test.ts b/src/plugins/interpolate.test.ts new file mode 100644 index 00000000..149d4c64 --- /dev/null +++ b/src/plugins/interpolate.test.ts @@ -0,0 +1,77 @@ +import { interpolate } from './interpolate'; + +{ + const template = 'Hello, {{name}}!'; + const data = { name: 'Alice' }; + console.assert(interpolate(template, data) === 'Hello, Alice!', '基本变量插值失败'); +} +{ + const template = '{{user.name}} is {{user.age}} years old.'; + const data = { user: { name: 'Bob', age: 30 } }; + console.assert(interpolate(template, data) === 'Bob is 30 years old.', '嵌套对象属性插值失败'); +} +{ + const template = 'The first item is {{items[0]}}.'; + const data = { items: ['apple', 'banana', 'cherry'] }; + console.assert(interpolate(template, data) === 'The first item is apple.', '数组索引插值失败'); +} +{ + const template = '{{#if isAdmin}}Admin{{#else}}User{{/if}}'; + const data1 = { isAdmin: true }; + const data2 = { isAdmin: false }; + console.assert(interpolate(template, data1) === 'Admin', '条件语句真值测试失败'); + console.assert(interpolate(template, data2) === 'User', '条件语句假值测试失败'); +} +{ + const template = '
    {{#each item in items}}
  • {{item}}
  • {{/each}}
'; + const data = { items: ['a', 'b', 'c'] }; + console.assert(interpolate(template, data) === '
  • a
  • b
  • c
', '循环语句测试失败'); +} +{ + const template = '{{#each item in items}}{{.}},{{/each}}'; + const data = { items: [1, 2, 3] }; + console.assert(interpolate(template, data) === '1,2,3,', '当前上下文插值测试失败'); +} +{ + const template = 'Hello, {{name}}!'; + const data = {}; + console.assert(interpolate(template, data) === 'Hello, {{name}}!', '不存在的变量处理失败'); +} + +{ + const template = ` + {{title}} + + {{#each item in items}} + {{#each:item i in item}} + {{ i.value }} + {{#if i.enable}} + {{#if:sub i.subEnable}} + sub enable + {{#else:sub}} + sub disable + {{/if:sub}} + {{#else}} + disable + {{/if}} + {{/each:item}} + {{/each}} + +`; + + const data = { + title: 'hello', + items: [ + [ + { value: 'a', enable: true, sub: { subEnable: true } }, + { value: 'b', enable: false, sub: { subEnable: false } }, + ], + [ + { value: 'c', enable: true, sub: { subEnable: false } }, + { value: 'd', enable: false, sub: { subEnable: true } }, + ], + ], + }; + + console.log(interpolate(template, data)); +} diff --git a/src/plugins/interpolate.ts b/src/plugins/interpolate.ts new file mode 100644 index 00000000..b5eec0c6 --- /dev/null +++ b/src/plugins/interpolate.ts @@ -0,0 +1,69 @@ +/* eslint-disable regexp/no-potentially-useless-backreference */ +const INTERPOLATE_LOOP_REGEXP = /\{\{#each(?::(\w+))?\s+(\w+)\s+in\s+([\w.[\]]+)\}\}([\s\S]*?)\{\{\/each(?::\1)?\}\}/g; +const INTERPOLATE_CONDITION_REGEXP = /\{\{#if(?::(\w+))?\s+([\w.[\]]+)\}\}([\s\S]*?)(?:\{\{#else(?::\1)?\}\}([\s\S]*?))?\{\{\/if(?::\1)?\}\}/g; +const INTERPOLATE_VARIABLE_REGEXP = /\{\{([\w.[\]]+)\}\}/g; + +function evaluateExpression(expr: string, localData: any): undefined | any { + if (expr === '.') { + return localData['.'] ?? localData; + } + try { + return expr.split('.').reduce((value, key) => { + if (key.includes('[') && key.includes(']')) { + const [arrayKey, indexStr] = key.split('['); + const indexExpr = indexStr.slice(0, -1); // 移除最后的 ']' + let index = Number.parseInt(indexExpr, 10); + if (Number.isNaN(index)) { + index = evaluateExpression(indexExpr, localData); + } + return value?.[arrayKey]?.[index]; + } + return value?.[key]; + }, localData); + } catch (error) { + console.error(`Error evaluating expression: ${expr}`, error); + return undefined; + } +} + +type Formatter = (value: any) => string; + +export function interpolate(template: string, data: any, formatter: Formatter | null = null): string { + const processConditional = (condition: string, trueBlock: string, falseBlock: string, localData: any): string => { + const result = evaluateExpression(condition, localData); + return result ? trueBlock : (falseBlock || ''); + }; + + const processLoop = (itemName: string, arrayExpr: string, loopContent: string, localData: any): string => { + const array = evaluateExpression(arrayExpr, localData); + if (!Array.isArray(array)) { + console.warn(`Expression "${arrayExpr}" did not evaluate to an array`); + return ''; + } + return array.map((item) => { + const itemData = { ...localData, [itemName]: item, '.': item }; + return interpolate(loopContent, itemData); + }).join(''); + }; + + const processTemplate = (tmpl: string, localData: any) => { + tmpl = tmpl.replace(INTERPOLATE_LOOP_REGEXP, (_, alias, itemName, arrayExpr, loopContent) => + processLoop(itemName, arrayExpr, loopContent, localData)); + + tmpl = tmpl.replace(INTERPOLATE_CONDITION_REGEXP, (_, alias, condition, trueBlock, falseBlock) => + processConditional(condition, trueBlock, falseBlock, localData)); + + return tmpl.replace(INTERPOLATE_VARIABLE_REGEXP, (_, expr) => { + const value = evaluateExpression(expr, localData); + if (value === undefined) { + return `{{${expr}}}`; + } + if (formatter) { + return formatter(value); + } + return String(value); + }); + }; + + return processTemplate(template, data); +} diff --git a/src/plugins/template.test.ts b/src/plugins/template.test.ts new file mode 100644 index 00000000..7e253621 --- /dev/null +++ b/src/plugins/template.test.ts @@ -0,0 +1,15 @@ +import * as fs from 'node:fs'; +import { executeRequest } from './template'; + +{ + const plugin = './plugins/dns.json'; + const template = JSON.parse(fs.readFileSync(plugin, 'utf8')); + executeRequest(template, { DATA: ['B', 'google.com'] }).then(console.log).catch(console.error); + executeRequest(template, { DATA: ['A', 'www.bilibili.com'] }).then(r => console.log(r.content)).catch(console.error); +} + +{ + const plugin = './plugins/dicten.json'; + const template = JSON.parse(fs.readFileSync(plugin, 'utf8')); + executeRequest(template, { DATA: 'example' }).then(console.log).catch(console.error); +} diff --git a/src/plugins/template.ts b/src/plugins/template.ts new file mode 100644 index 00000000..f0d8187f --- /dev/null +++ b/src/plugins/template.ts @@ -0,0 +1,157 @@ +import { interpolate } from './interpolate'; + +/** + * TemplateInputType: 输入数据的类型,将Telegram输入的数据转换为对应的数据类型 + * json: JSON格式 + * space-separated: 以空格分隔的字符串 + * comma-separated: 以逗号分隔的字符串 + * text: 文本,不分割(默认值) + */ +export type TemplateInputType = 'json' | 'space-separated' | 'comma-separated' | 'text'; + +/** + * TemplateBodyType: 请求体的类型 + * json: JSON格式, 此时对于content字段的值应该为一个对象,其中的key为固定值,Value支持插值 + * form: 表单格式, 此时对于content字段的值应该为一个对象,其中的key为固定值,Value支持插值 + * text: 文本格式, 此时对于content字段的值应该为一个字符串,支持插值 + */ +export type TemplateBodyType = 'json' | 'form' | 'text'; + +/** + * TemplateResponseType: 响应体的类型 + * json: JSON格式, 此时会将响应体解析为JSON格式交给下一个模板渲染 + * text: 文本格式, 此时会将响应体解析为文本格式交给下一个模板渲染 + */ +export type TemplateResponseType = 'json' | 'text'; + +/** + * TemplateOutputType: 输出数据的类型 + * text: 文本格式, 将渲染结果作为纯文本发送到telegram + * image: 图片格式, 将渲染结果作为图片url发送到telegram + * html: HTML格式, 将渲染结果作为HTML格式发送到telegram + * markdown: Markdown格式, 将渲染结果作为Markdown格式发送到telegram + */ +export type TemplateOutputType = 'text' | 'image' | 'html' | 'markdown'; + +export interface RequestTemplate { + url: string; // 必选, 支持插值 + method: string; // 必选, 固定值 + headers: { [key: string]: string }; // 可选, Key为固定值,Value支持插值 + input: { + type: TemplateInputType; + }; + query: { [key: string]: string }; // 可选, Key为固定值,Value支持插值 + body: { + type: TemplateBodyType; + content: { [key: string]: string } | string; // content为对象时Key为固定值,Value支持插值。content为字符串时支持插值 + }; + response: { + content: { // 必选, 当请求成功时的处理 + input_type: TemplateResponseType; + output_type: TemplateOutputType; + output: string; + }; + error: { // 必选, 当请求失败时的处理 + input_type: TemplateResponseType; + output_type: TemplateOutputType; + output: string; + }; + }; +} + +function interpolateObject(obj: any, data: any): any { + if (obj === null || obj === undefined) { + return null; + } + if (typeof obj === 'string') { + return interpolate(obj, data); + } + if (Array.isArray(obj)) { + return obj.map(item => interpolateObject(item, data)); + } + if (typeof obj === 'object') { + const result: any = {}; + for (const [key, value] of Object.entries(obj)) { + result[key] = interpolateObject(value, data); + } + return result; + } + return obj; +} + +export async function executeRequest(template: RequestTemplate, data: any): Promise<{ content: string; type: TemplateOutputType }> { + const urlRaw = interpolate(template.url, data, encodeURIComponent); + const url = new URL(urlRaw); + + if (template.query) { + for (const [key, value] of Object.entries(template.query)) { + url.searchParams.append(key, interpolate(value, data)); + } + } + + const method = template.method; + const headers = Object.fromEntries( + Object.entries(template.headers || {}).map(([key, value]) => { + return [key, interpolate(value, data)]; + }), + ); + for (const key of Object.keys(headers)) { + if (headers[key] === null) { + delete headers[key]; + } + } + + let body = null; + if (template.body) { + if (template.body.type === 'json') { + body = JSON.stringify(interpolateObject(template.body.content, data)); + } else if (template.body.type === 'form') { + body = new URLSearchParams(); + for (const [key, value] of Object.entries(template.body.content)) { + body.append(key, interpolate(value, data)); + } + } else { + body = interpolate(template.body.content as string, data); + } + } + + const response = await fetch(url, { + method, + headers, + body, + }); + + const renderOutput = async (type: TemplateResponseType, temple: string, response: Response): Promise => { + switch (type) { + case 'text': + return interpolate(temple, await response.text()); + case 'json': + default: + return interpolate(temple, await response.json()); + } + }; + if (!response.ok) { + const content = await renderOutput(template.response?.error?.input_type, template.response.error?.output, response); + return { + type: template.response.error.output_type, + content, + }; + } + const content = await renderOutput(template.response.content?.input_type, template.response.content?.output, response); + return { + type: template.response.content.output_type, + content, + }; +} + +export function formatInput(input: string, type: TemplateInputType): string | string[] | object { + if (type === 'json') { + return JSON.parse(input); + } else if (type === 'space-separated') { + return input.split(/\s+/); + } else if (type === 'comma-separated') { + return input.split(/\s*,\s*/); + } else { + return input; + } +} diff --git a/src/route.js b/src/route/index.ts similarity index 51% rename from src/route.js rename to src/route/index.ts index 38ccd56e..b8260a0a 100644 --- a/src/route.js +++ b/src/route/index.ts @@ -1,75 +1,58 @@ -import { handleMessage } from './telegram/message.js'; -import { API_GUARD, ENV } from './config/env.js'; -import { bindCommandForTelegram, commandsDocument } from './telegram/command.js'; -import { bindTelegramWebHook } from './telegram/telegram.js'; -import { errorToString, makeResponse200, renderHTML } from './utils/utils.js'; -import { Router } from './utils/router.js'; +import type * as Telegram from 'telegram-bot-api-types'; +import { handleUpdate } from '../telegram/handler'; +import { commandsBindScope, commandsDocument } from '../telegram/command'; +import type { RouterRequest } from '../utils/router'; +import { Router } from '../utils/router'; +import { createTelegramBotAPI } from '../telegram/api'; +import { ENV } from '../config/env'; +import { errorToString, makeResponse200, renderHTML } from './utils'; const helpLink = 'https://github.com/TBXark/ChatGPT-Telegram-Workers/blob/master/doc/en/DEPLOY.md'; const issueLink = 'https://github.com/TBXark/ChatGPT-Telegram-Workers/issues'; const initLink = './init'; - const footer = `

For more information, please visit ${helpLink}

If you have any questions, please visit ${issueLink}

`; -/** - * @param {string} key - * @returns {string} - */ -function buildKeyNotFoundHTML(key) { - return `

Please set the ${key} environment variable in Cloudflare Workers.

`; -} - -/** - * @param {Request} request - * @returns {Promise} - */ -async function bindWebHookAction(request) { - const result = []; +async function bindWebHookAction(request: RouterRequest): Promise { + const result: Record> = {}; const domain = new URL(request.url).host; - const hookMode = API_GUARD ? 'safehook' : 'webhook'; + const hookMode = ENV.API_GUARD ? 'safehook' : 'webhook'; + const scope = commandsBindScope(); for (const token of ENV.TELEGRAM_AVAILABLE_TOKENS) { + const api = createTelegramBotAPI(token); const url = `https://${domain}/telegram/${token.trim()}/${hookMode}`; const id = token.split(':')[0]; - result[id] = { - webhook: await bindTelegramWebHook(token, url).then(res => res.json()).catch(e => errorToString(e)), - command: await bindCommandForTelegram(token).catch(e => errorToString(e)), - }; + result[id] = {}; + result[id].webhook = await api.setWebhook({ url }).then(res => res.json()).catch(e => errorToString(e)); + for (const [s, data] of Object.entries(scope)) { + result[id][s] = await api.setMyCommands(data).then(res => res.json()).catch(e => errorToString(e)); + } } - - const HTML = renderHTML(` -

ChatGPT-Telegram-Workers

-

${domain}

- ${ - ENV.TELEGRAM_AVAILABLE_TOKENS.length === 0 ? buildKeyNotFoundHTML('TELEGRAM_AVAILABLE_TOKENS') : '' -} - ${ - Object.keys(result).map(id => ` -
-

Bot ID: ${id}

-

Webhook: ${JSON.stringify(result[id].webhook)}

-

Command: ${JSON.stringify(result[id].command)}

- `).join('') - -} - ${footer} - `); + let html = `

ChatGPT-Telegram-Workers

`; + html += `

${domain}

`; + if (ENV.TELEGRAM_AVAILABLE_TOKENS.length === 0) { + html += `

Please set the TELEGRAM_AVAILABLE_TOKENS environment variable in Cloudflare Workers.

`; + } else { + for (const [key, res] of Object.entries(result)) { + html += `

Bot: ${key}

`; + for (const [s, data] of Object.entries(res)) { + html += `

${s}: ${JSON.stringify(data)}

`; + } + } + } + html += footer; + const HTML = renderHTML(html); return new Response(HTML, { status: 200, headers: { 'Content-Type': 'text/html' } }); } -/** - * 处理Telegram回调 - * @param {Request} request - * @returns {Promise} - */ -async function telegramWebhook(request) { +async function telegramWebhook(request: RouterRequest): Promise { try { - const { token } = request.params; - const body = await request.json(); - return makeResponse200(await handleMessage(token, body)); + const { token } = request.params as any; + const body = await request.json() as Telegram.Update; + return makeResponse200(await handleUpdate(token, body)); } catch (e) { console.error(e); return new Response(errorToString(e), { status: 200 }); @@ -81,26 +64,23 @@ async function telegramWebhook(request) { * @param {Request} request * @returns {Promise} */ -async function telegramSafeHook(request) { +async function telegramSafeHook(request: RouterRequest): Promise { try { - if (API_GUARD === undefined || API_GUARD === null) { + if (ENV.API_GUARD === undefined || ENV.API_GUARD === null) { return telegramWebhook(request); } console.log('API_GUARD is enabled'); const url = new URL(request.url); url.pathname = url.pathname.replace('/safehook', '/webhook'); - request = new Request(url, request); - return makeResponse200(await API_GUARD.fetch(request)); + const newRequest = new Request(url, request); + return makeResponse200(await ENV.API_GUARD.fetch(newRequest)); } catch (e) { console.error(e); return new Response(errorToString(e), { status: 200 }); } } -/** - * @returns {Promise} - */ -async function defaultIndexAction() { +async function defaultIndexAction(): Promise { const HTML = renderHTML(`

ChatGPT-Telegram-Workers


@@ -121,16 +101,12 @@ async function defaultIndexAction() { return new Response(HTML, { status: 200, headers: { 'Content-Type': 'text/html' } }); } -/** - * @param {Request} request - * @returns {Promise} - */ -export async function handleRequest(request) { +export function createRouter(): Router { const router = new Router(); router.get('/', defaultIndexAction); router.get('/init', bindWebHookAction); router.post('/telegram/:token/webhook', telegramWebhook); router.post('/telegram/:token/safehook', telegramSafeHook); router.all('*', () => new Response('Not Found', { status: 404 })); - return router.fetch(request); + return router; } diff --git a/src/utils/utils.js b/src/route/utils.ts similarity index 83% rename from src/utils/utils.js rename to src/route/utils.ts index 8a614b65..76f2187e 100644 --- a/src/utils/utils.js +++ b/src/route/utils.ts @@ -1,10 +1,6 @@ -/** - * @param {string} body - * @returns {string} - */ -export function renderHTML(body) { +export function renderHTML(body: string): string { return ` - + ChatGPT-Telegram-Workers @@ -50,22 +46,14 @@ export function renderHTML(body) { `; } -/** - * @param {Error} e - * @returns {string} - */ -export function errorToString(e) { +export function errorToString(e: Error | any): string { return JSON.stringify({ message: e.message, stack: e.stack, }); } -/** - * @param {Response} resp - * @returns {Response} - */ -export function makeResponse200(resp) { +export function makeResponse200(resp: Response | null): Response { if (resp === null) { return new Response('NOT HANDLED', { status: 200 }); } @@ -76,7 +64,7 @@ export function makeResponse200(resp) { return new Response(resp.body, { status: 200, headers: { - 'Original-Status': resp.status, + 'Original-Status': `${resp.status}`, ...resp.headers, }, }); diff --git a/src/telegram/agent.js b/src/telegram/agent.js deleted file mode 100644 index 090c2b2f..00000000 --- a/src/telegram/agent.js +++ /dev/null @@ -1,73 +0,0 @@ -import { ENV } from '../config/env.js'; -import { loadChatLLM } from '../agent/agents.js'; -import { requestCompletionsFromLLM } from '../agent/chat.js'; -import { sendChatActionToTelegramWithContext, sendMessageToTelegramWithContext } from './telegram.js'; - -/** - * 与LLM聊天 - * @param {LlmRequestParams} params - * @param {ContextType} context - * @param {LlmModifier} modifier - * @returns {Promise} - */ -export async function chatWithLLM(params, context, modifier) { - try { - try { - const msg = await sendMessageToTelegramWithContext(context)('...').then(r => r.json()); - context.CURRENT_CHAT_CONTEXT.message_id = msg.result.message_id; - context.CURRENT_CHAT_CONTEXT.reply_markup = null; - } catch (e) { - console.error(e); - } - setTimeout(() => sendChatActionToTelegramWithContext(context)('typing').catch(console.error), 0); - let onStream = null; - const parseMode = context.CURRENT_CHAT_CONTEXT.parse_mode; - let nextEnableTime = null; - if (ENV.STREAM_MODE) { - context.CURRENT_CHAT_CONTEXT.parse_mode = null; - onStream = async (text) => { - try { - // 判断是否需要等待 - if (nextEnableTime && nextEnableTime > Date.now()) { - return; - } - const resp = await sendMessageToTelegramWithContext(context)(text); - // 判断429 - if (resp.status === 429) { - // 获取重试时间 - const retryAfter = Number.parseInt(resp.headers.get('Retry-After')); - if (retryAfter) { - nextEnableTime = Date.now() + retryAfter * 1000; - return; - } - } - nextEnableTime = null; - if (resp.ok) { - context.CURRENT_CHAT_CONTEXT.message_id = (await resp.json()).result.message_id; - } - } catch (e) { - console.error(e); - } - }; - } - - const llm = loadChatLLM(context)?.request; - if (llm === null) { - return sendMessageToTelegramWithContext(context)('LLM is not enable'); - } - const answer = await requestCompletionsFromLLM(params, context, llm, modifier, onStream); - context.CURRENT_CHAT_CONTEXT.parse_mode = parseMode; - if (nextEnableTime && nextEnableTime > Date.now()) { - await new Promise(resolve => setTimeout(resolve, nextEnableTime - Date.now())); - } - return sendMessageToTelegramWithContext(context)(answer); - } catch (e) { - let errMsg = `Error: ${e.message}`; - if (errMsg.length > 2048) { - // 裁剪错误信息 最长2048 - errMsg = errMsg.substring(0, 2048); - } - context.CURRENT_CHAT_CONTEXT.disable_web_page_preview = true; - return sendMessageToTelegramWithContext(context)(errMsg); - } -} diff --git a/src/telegram/api/index.ts b/src/telegram/api/index.ts new file mode 100644 index 00000000..1bceab67 --- /dev/null +++ b/src/telegram/api/index.ts @@ -0,0 +1,76 @@ +import type * as Telegram from 'telegram-bot-api-types'; +import { ENV } from '../../config/env'; + +class APIClientBase { + readonly token: string; + readonly baseURL: string = ENV.TELEGRAM_API_DOMAIN; + constructor(token: string, baseURL?: string) { + this.token = token; + if (baseURL) { + this.baseURL = baseURL; + } + } + + private jsonRequest(method: Telegram.BotMethod, params: T): Promise { + return fetch(`${this.baseURL}/bot${this.token}/${method}`, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify(params), + }); + } + + private formDataRequest(method: Telegram.BotMethod, params: T): Promise { + const formData = new FormData(); + for (const key in params) { + const value = params[key]; + if (value instanceof File) { + formData.append(key, value, value.name); + } else if (value instanceof Blob) { + formData.append(key, value, 'blob'); + } else if (typeof value === 'string') { + formData.append(key, value); + } else { + formData.append(key, JSON.stringify(value)); + } + } + return fetch(`${this.baseURL}bot${this.token}/${method}`, { + method: 'POST', + body: formData, + }); + } + + request(method: Telegram.BotMethod, params: T): Promise { + for (const key in params) { + if (params[key] instanceof File || params[key] instanceof Blob) { + return this.formDataRequest(method, params); + } + } + return this.jsonRequest(method, params); + } + + async requestJSON(method: Telegram.BotMethod, params: T): Promise { + return this.request(method, params).then(res => res.json() as R); + } +} + +export type TelegramBotAPI = APIClientBase & Telegram.AllBotMethods; + +export function createTelegramBotAPI(token: string): TelegramBotAPI { + const client = new APIClientBase(token); + return new Proxy(client, { + get(target, prop, receiver) { + if (prop in target) { + return Reflect.get(target, prop, receiver); + } + return (...args: any[]) => { + if (typeof prop === 'string' && prop.endsWith('WithReturns')) { + const method = prop.slice(0, -11) as Telegram.BotMethod; + return Reflect.apply(target.requestJSON, target, [method, ...args]); + } + return Reflect.apply(target.request, target, [prop as Telegram.BotMethod, ...args]); + }; + }, + }) as TelegramBotAPI; +} diff --git a/src/telegram/command.js b/src/telegram/command.js deleted file mode 100644 index 7fd572df..00000000 --- a/src/telegram/command.js +++ /dev/null @@ -1,581 +0,0 @@ -import '../types/context.js'; -import { - CONST, - CUSTOM_COMMAND, - CUSTOM_COMMAND_DESCRIPTION, - DATABASE, - ENV, - ENV_KEY_MAPPER, - mergeEnvironment, -} from '../config/env.js'; -import { - chatModelKey, - currentChatModel, - currentImageModel, - imageModelKey, - loadChatLLM, - loadImageGen, -} from '../agent/agents.js'; -import { trimUserConfig } from '../config/context.js'; -import { - sendChatActionToTelegramWithContext, - sendMessageToTelegramWithContext, - sendPhotoToTelegramWithContext, -} from './telegram.js'; -import { chatWithLLM } from './agent.js'; -import { getChatRoleWithContext } from './utils.js'; - -const commandAuthCheck = { - default(chatType) { - if (CONST.GROUP_TYPES.includes(chatType)) { - return ['administrator', 'creator']; - } - return null; - }, - shareModeGroup(chatType) { - if (CONST.GROUP_TYPES.includes(chatType)) { - // 每个人在群里有上下文的时候,不限制 - if (!ENV.GROUP_CHAT_BOT_SHARE_MODE) { - return false; - } - return ['administrator', 'creator']; - } - return null; - }, -}; - -const commandSortList = [ - '/new', - '/redo', - '/img', - '/setenv', - '/delenv', - '/version', - '/system', - '/help', -]; - -/** - * - * @callback CommandFunction - * @param {TelegramMessage} message - * @param {string} command - * @param {string} subcommand - * @param {ContextType} context - * @returns {Promise} - */ - -/** - * @callback AuthCheckFunction - * @param {string} chatType - * @returns {string[] | null} - */ - -/** - * @typedef {object} CommandHandler - * @property {string} scopes - 权限范围 - * @property {CommandFunction} fn - 处理函数 - * @property {AuthCheckFunction} [needAuth] - 权限检查函数 - */ - -/** - * @type {{[key: string]: CommandHandler}} - */ -const commandHandlers = { - '/help': { - scopes: ['all_private_chats', 'all_chat_administrators'], - fn: commandGetHelp, - }, - '/new': { - scopes: ['all_private_chats', 'all_group_chats', 'all_chat_administrators'], - fn: commandCreateNewChatContext, - }, - '/start': { - scopes: [], - fn: commandCreateNewChatContext, - }, - '/img': { - scopes: ['all_private_chats', 'all_chat_administrators'], - fn: commandGenerateImg, - }, - '/version': { - scopes: ['all_private_chats', 'all_chat_administrators'], - fn: commandFetchUpdate, - }, - '/setenv': { - scopes: [], - fn: commandUpdateUserConfig, - needAuth: commandAuthCheck.shareModeGroup, - }, - '/setenvs': { - scopes: [], - fn: commandUpdateUserConfigs, - needAuth: commandAuthCheck.shareModeGroup, - }, - '/delenv': { - scopes: [], - fn: commandDeleteUserConfig, - needAuth: commandAuthCheck.shareModeGroup, - }, - '/clearenv': { - scopes: [], - fn: commandClearUserConfig, - needAuth: commandAuthCheck.shareModeGroup, - }, - '/system': { - scopes: ['all_private_chats', 'all_chat_administrators'], - fn: commandSystem, - needAuth: commandAuthCheck.default, - }, - '/redo': { - scopes: ['all_private_chats', 'all_group_chats', 'all_chat_administrators'], - fn: commandRegenerate, - }, -}; - -/** - * /img 命令 - * @param {TelegramMessage} message - * @param {string} command - * @param {string} subcommand - * @param {ContextType} context - * @returns {Promise} - */ -async function commandGenerateImg(message, command, subcommand, context) { - if (subcommand === '') { - return sendMessageToTelegramWithContext(context)(ENV.I18N.command.help.img); - } - try { - const gen = loadImageGen(context)?.request; - if (!gen) { - return sendMessageToTelegramWithContext(context)('ERROR: Image generator not found'); - } - setTimeout(() => sendChatActionToTelegramWithContext(context)('upload_photo').catch(console.error), 0); - const img = await gen(subcommand, context); - const resp = await sendPhotoToTelegramWithContext(context)(img); - if (!resp.ok) { - return sendMessageToTelegramWithContext(context)(`ERROR: ${resp.statusText} ${await resp.text()}`); - } - return resp; - } catch (e) { - return sendMessageToTelegramWithContext(context)(`ERROR: ${e.message}`); - } -} - -/** - * /help 获取帮助信息 - * @param {TelegramMessage} message - * @param {string} command - * @param {string} subcommand - * @param {ContextType} context - * @returns {Promise} - */ -async function commandGetHelp(message, command, subcommand, context) { - let helpMsg = `${ENV.I18N.command.help.summary}\n`; - helpMsg += Object.keys(commandHandlers) - .map(key => `${key}:${ENV.I18N.command.help[key.substring(1)]}`) - .join('\n'); - helpMsg += Object.keys(CUSTOM_COMMAND) - .filter(key => !!CUSTOM_COMMAND_DESCRIPTION[key]) - .map(key => `${key}:${CUSTOM_COMMAND_DESCRIPTION[key]}`) - .join('\n'); - return sendMessageToTelegramWithContext(context)(helpMsg); -} - -/** - * /new /start 新的会话 - * @param {TelegramMessage} message - * @param {string} command - * @param {string} subcommand - * @param {ContextType} context - * @returns {Promise} - */ -async function commandCreateNewChatContext(message, command, subcommand, context) { - try { - await DATABASE.delete(context.SHARE_CONTEXT.chatHistoryKey); - - const isNewCommand = command.startsWith('/new'); - const text = ENV.I18N.command.new.new_chat_start + (isNewCommand ? '' : `(${context.CURRENT_CHAT_CONTEXT.chat_id})`); - - // 非群组消息,显示回复按钮 - if (ENV.SHOW_REPLY_BUTTON && !CONST.GROUP_TYPES.includes(context.SHARE_CONTEXT.chatType)) { - context.CURRENT_CHAT_CONTEXT.reply_markup = { - keyboard: [[{ text: '/new' }, { text: '/redo' }]], - selective: true, - resize_keyboard: true, - one_time_keyboard: false, - }; - } else { - context.CURRENT_CHAT_CONTEXT.reply_markup = { - remove_keyboard: true, - selective: true, - }; - } - - return sendMessageToTelegramWithContext(context)(text); - } catch (e) { - return sendMessageToTelegramWithContext(context)(`ERROR: ${e.message}`); - } -} - -/** - * /setenv 用户配置修改 - * @param {TelegramMessage} message - * @param {string} command - * @param {string} subcommand - * @param {ContextType} context - * @returns {Promise} - */ -async function commandUpdateUserConfig(message, command, subcommand, context) { - const kv = subcommand.indexOf('='); - if (kv === -1) { - return sendMessageToTelegramWithContext(context)(ENV.I18N.command.help.setenv); - } - let key = subcommand.slice(0, kv); - const value = subcommand.slice(kv + 1); - key = ENV_KEY_MAPPER[key] || key; - if (ENV.LOCK_USER_CONFIG_KEYS.includes(key)) { - return sendMessageToTelegramWithContext(context)(`Key ${key} is locked`); - } - if (!Object.keys(context.USER_CONFIG).includes(key)) { - return sendMessageToTelegramWithContext(context)(`Key ${key} not found`); - } - try { - context.USER_CONFIG.DEFINE_KEYS.push(key); - context.USER_CONFIG.DEFINE_KEYS = Array.from(new Set(context.USER_CONFIG.DEFINE_KEYS)); - mergeEnvironment(context.USER_CONFIG, { - [key]: value, - }); - console.log('Update user config: ', key, context.USER_CONFIG[key]); - await DATABASE.put( - context.SHARE_CONTEXT.configStoreKey, - JSON.stringify(trimUserConfig(context.USER_CONFIG)), - ); - return sendMessageToTelegramWithContext(context)('Update user config success'); - } catch (e) { - return sendMessageToTelegramWithContext(context)(`ERROR: ${e.message}`); - } -} - -/** - * /setenvs 批量用户配置修改 - * @param {TelegramMessage} message - * @param {string} command - * @param {string} subcommand - * @param {ContextType} context - * @returns {Promise} - */ -async function commandUpdateUserConfigs(message, command, subcommand, context) { - try { - const values = JSON.parse(subcommand); - const configKeys = Object.keys(context.USER_CONFIG); - for (const ent of Object.entries(values)) { - let [key, value] = ent; - key = ENV_KEY_MAPPER[key] || key; - if (ENV.LOCK_USER_CONFIG_KEYS.includes(key)) { - return sendMessageToTelegramWithContext(context)(`Key ${key} is locked`); - } - if (!configKeys.includes(key)) { - return sendMessageToTelegramWithContext(context)(`Key ${key} not found`); - } - context.USER_CONFIG.DEFINE_KEYS.push(key); - mergeEnvironment(context.USER_CONFIG, { - [key]: value, - }); - console.log('Update user config: ', key, context.USER_CONFIG[key]); - } - context.USER_CONFIG.DEFINE_KEYS = Array.from(new Set(context.USER_CONFIG.DEFINE_KEYS)); - await DATABASE.put( - context.SHARE_CONTEXT.configStoreKey, - JSON.stringify(trimUserConfig(trimUserConfig(context.USER_CONFIG))), - ); - return sendMessageToTelegramWithContext(context)('Update user config success'); - } catch (e) { - return sendMessageToTelegramWithContext(context)(`ERROR: ${e.message}`); - } -} - -/** - * /delenv 用户配置修改 - * @param {TelegramMessage} message - * @param {string} command - * @param {string} subcommand - * @param {ContextType} context - * @returns {Promise} - */ -async function commandDeleteUserConfig(message, command, subcommand, context) { - if (ENV.LOCK_USER_CONFIG_KEYS.includes(subcommand)) { - const msg = `Key ${subcommand} is locked`; - return sendMessageToTelegramWithContext(context)(msg); - } - try { - context.USER_CONFIG[subcommand] = null; - context.USER_CONFIG.DEFINE_KEYS = context.USER_CONFIG.DEFINE_KEYS.filter(key => key !== subcommand); - await DATABASE.put( - context.SHARE_CONTEXT.configStoreKey, - JSON.stringify(trimUserConfig(context.USER_CONFIG)), - ); - return sendMessageToTelegramWithContext(context)('Delete user config success'); - } catch (e) { - return sendMessageToTelegramWithContext(context)(`ERROR: ${e.message}`); - } -} - -/** - * /clearenv 清空用户配置 - * @param {TelegramMessage} message - * @param {string} command - * @param {string} subcommand - * @param {ContextType} context - * @returns {Promise} - */ -async function commandClearUserConfig(message, command, subcommand, context) { - try { - await DATABASE.put( - context.SHARE_CONTEXT.configStoreKey, - JSON.stringify({}), - ); - return sendMessageToTelegramWithContext(context)('Clear user config success'); - } catch (e) { - return sendMessageToTelegramWithContext(context)(`ERROR: ${e.message}`); - } -} - -/** - * /version 获得更新信息 - * @param {TelegramMessage} message - * @param {string} command - * @param {string} subcommand - * @param {ContextType} context - * @returns {Promise} - */ -async function commandFetchUpdate(message, command, subcommand, context) { - const current = { - ts: ENV.BUILD_TIMESTAMP, - sha: ENV.BUILD_VERSION, - }; - - try { - const info = `https://raw.githubusercontent.com/TBXark/ChatGPT-Telegram-Workers/${ENV.UPDATE_BRANCH}/dist/buildinfo.json`; - const online = await fetch(info).then(r => r.json()); - const timeFormat = (ts) => { - return new Date(ts * 1000).toLocaleString('en-US', {}); - }; - if (current.ts < online.ts) { - return sendMessageToTelegramWithContext(context)(`New version detected: ${online.sha}(${timeFormat(online.ts)})\nCurrent version: ${current.sha}(${timeFormat(current.ts)})`); - } else { - return sendMessageToTelegramWithContext(context)(`Current version: ${current.sha}(${timeFormat(current.ts)}) is up to date`); - } - } catch (e) { - return sendMessageToTelegramWithContext(context)(`ERROR: ${e.message}`); - } -} - -/** - * /system 获得系统信息 - * @param {TelegramMessage} message - * @param {string} command - * @param {string} subcommand - * @param {ContextType} context - * @returns {Promise} - */ -async function commandSystem(message, command, subcommand, context) { - const chatAgent = loadChatLLM(context)?.name; - const imageAgent = loadImageGen(context)?.name; - const agent = { - AI_PROVIDER: chatAgent, - AI_IMAGE_PROVIDER: imageAgent, - }; - if (chatModelKey(chatAgent)) { - agent[chatModelKey(chatAgent)] = currentChatModel(chatAgent, context); - } - if (imageModelKey(imageAgent)) { - agent[imageModelKey(imageAgent)] = currentImageModel(imageAgent, context); - } - let msg = `AGENT: ${JSON.stringify(agent, null, 2)}\n`; - if (ENV.DEV_MODE) { - const shareCtx = { ...context.SHARE_CONTEXT }; - shareCtx.currentBotToken = '******'; - context.USER_CONFIG.OPENAI_API_KEY = ['******']; - context.USER_CONFIG.AZURE_API_KEY = '******'; - context.USER_CONFIG.AZURE_COMPLETIONS_API = '******'; - context.USER_CONFIG.AZURE_DALLE_API = '******'; - context.USER_CONFIG.CLOUDFLARE_ACCOUNT_ID = '******'; - context.USER_CONFIG.CLOUDFLARE_TOKEN = '******'; - context.USER_CONFIG.GOOGLE_API_KEY = '******'; - context.USER_CONFIG.MISTRAL_API_KEY = '******'; - context.USER_CONFIG.COHERE_API_KEY = '******'; - context.USER_CONFIG.ANTHROPIC_API_KEY = '******'; - const config = trimUserConfig(context.USER_CONFIG); - msg = `
\n${msg}`;
-        msg += `USER_CONFIG: ${JSON.stringify(config, null, 2)}\n`;
-        msg += `CHAT_CONTEXT: ${JSON.stringify(context.CURRENT_CHAT_CONTEXT, null, 2)}\n`;
-        msg += `SHARE_CONTEXT: ${JSON.stringify(shareCtx, null, 2)}\n`;
-        msg += '
'; - } - context.CURRENT_CHAT_CONTEXT.parse_mode = 'HTML'; - return sendMessageToTelegramWithContext(context)(msg); -} - -/** - * /redo 重新生成上一条消息 - * @param {TelegramMessage} message - * @param {string} command - * @param {string} subcommand - * @param {ContextType} context - * @returns {Promise} - */ -async function commandRegenerate(message, command, subcommand, context) { - const mf = (history, text) => { - let nextText = text; - if (!(history && Array.isArray(history) && history.length > 0)) { - throw new Error('History not found'); - } - const historyCopy = structuredClone(history); - while (true) { - const data = historyCopy.pop(); - if (data === undefined || data === null) { - break; - } else if (data.role === 'user') { - if (text === '' || text === undefined || text === null) { - nextText = data.content; - } - break; - } - } - if (subcommand) { - nextText = subcommand; - } - return { history: historyCopy, message: nextText }; - }; - return chatWithLLM({ message: null }, context, mf); -} - -/** - * /echo 回显消息 - * @param {TelegramMessage} message - * @param {string} command - * @param {string} subcommand - * @param {ContextType} context - * @returns {Promise} - */ -async function commandEcho(message, command, subcommand, context) { - let msg = '
';
-    msg += JSON.stringify({ message }, null, 2);
-    msg += '
'; - context.CURRENT_CHAT_CONTEXT.parse_mode = 'HTML'; - return sendMessageToTelegramWithContext(context)(msg); -} - -/** - * 处理命令消息 - * @param {TelegramMessage} message - * @param {ContextType} context - * @returns {Promise} - */ -export async function handleCommandMessage(message, context) { - if (ENV.DEV_MODE) { - commandHandlers['/echo'] = { - help: '[DEBUG ONLY] echo message', - scopes: ['all_private_chats', 'all_chat_administrators'], - fn: commandEcho, - needAuth: commandAuthCheck.default, - }; - } - // 触发自定义命令 替换为对应的命令 - if (CUSTOM_COMMAND[message.text]) { - message.text = CUSTOM_COMMAND[message.text]; - } - for (const key in commandHandlers) { - if (message.text === key || message.text.startsWith(`${key} `)) { - const command = commandHandlers[key]; - try { - // 如果存在权限条件 - if (command.needAuth) { - const roleList = command.needAuth(context.SHARE_CONTEXT.chatType); - if (roleList) { - // 获取身份并判断 - const chatRole = await getChatRoleWithContext(context); - if (chatRole === null) { - return sendMessageToTelegramWithContext(context)('ERROR: Get chat role failed'); - } - if (!roleList.includes(chatRole)) { - return sendMessageToTelegramWithContext(context)(`ERROR: Permission denied, need ${roleList.join(' or ')}`); - } - } - } - } catch (e) { - return sendMessageToTelegramWithContext(context)(`ERROR: ${e.message}`); - } - const subcommand = message.text.substring(key.length).trim(); - try { - return await command.fn(message, key, subcommand, context); - } catch (e) { - return sendMessageToTelegramWithContext(context)(`ERROR: ${e.message}`); - } - } - } - return null; -} - -/** - * 绑定命令到Telegram - * @param {string} token - * @returns {Promise<{result: {}, ok: boolean}>} - */ -export async function bindCommandForTelegram(token) { - const scopeCommandMap = { - all_private_chats: [], - all_group_chats: [], - all_chat_administrators: [], - }; - for (const key of commandSortList) { - if (ENV.HIDE_COMMAND_BUTTONS.includes(key)) { - continue; - } - if (Object.prototype.hasOwnProperty.call(commandHandlers, key) && commandHandlers[key].scopes) { - for (const scope of commandHandlers[key].scopes) { - if (!scopeCommandMap[scope]) { - scopeCommandMap[scope] = []; - } - scopeCommandMap[scope].push(key); - } - } - } - - const result = {}; - for (const scope in scopeCommandMap) { - result[scope] = await fetch( - `https://api.telegram.org/bot${token}/setMyCommands`, - { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - }, - body: JSON.stringify({ - commands: scopeCommandMap[scope].map(command => ({ - command, - description: ENV.I18N.command.help[command.substring(1)] || '', - })), - scope: { - type: scope, - }, - }), - }, - ).then(res => res.json()); - } - return { ok: true, result }; -} - -/** - * 获取所有命令的描述 - * @returns {{description: *, command: *}[]} - */ -export function commandsDocument() { - return Object.keys(commandHandlers).map((key) => { - return { - command: key, - description: ENV.I18N.command.help[key.substring(1)], - }; - }); -} diff --git a/src/telegram/command/auth.ts b/src/telegram/command/auth.ts new file mode 100644 index 00000000..fbad38f6 --- /dev/null +++ b/src/telegram/command/auth.ts @@ -0,0 +1,43 @@ +import type * as Telegram from 'telegram-bot-api-types'; +import type { WorkerContext } from '../../config/context'; +import { createTelegramBotAPI } from '../api'; +import { ENV } from '../../config/env'; + +export async function loadChatRoleWithContext(message: Telegram.Message, context: WorkerContext): Promise { + const { groupAdminsKey } = context.SHARE_CONTEXT; + + const chatId = message.chat.id; + const speakerId = message.from?.id || chatId; + + if (!groupAdminsKey) { + return null; + } + + let groupAdmin: Telegram.ChatMember[] | null = null; + try { + groupAdmin = JSON.parse(await ENV.DATABASE.get(groupAdminsKey)); + } catch (e) { + console.error(e); + } + if (groupAdmin === null || !Array.isArray(groupAdmin) || groupAdmin.length === 0) { + const api = createTelegramBotAPI(context.SHARE_CONTEXT.botToken); + const result = await api.getChatAdministratorsWithReturns({ chat_id: chatId }); + if (result == null) { + return null; + } + groupAdmin = result.result; + // 缓存120s + await ENV.DATABASE.put( + groupAdminsKey, + JSON.stringify(groupAdmin), + { expiration: (Date.now() / 1000) + 120 }, + ); + } + for (let i = 0; i < groupAdmin.length; i++) { + const user = groupAdmin[i]; + if (`${user.user?.id}` === `${speakerId}`) { + return user.status; + } + } + return 'member'; +} diff --git a/src/telegram/command/index.ts b/src/telegram/command/index.ts new file mode 100644 index 00000000..0e938e34 --- /dev/null +++ b/src/telegram/command/index.ts @@ -0,0 +1,167 @@ +import type * as Telegram from 'telegram-bot-api-types'; +import type { WorkerContext } from '../../config/context'; +import type { RequestTemplate } from '../../plugins/template'; +import { executeRequest, formatInput } from '../../plugins/template'; +import { MessageSender } from '../utils/send'; +import { ENV } from '../../config/env'; +import type { CommandHandler } from './types'; +import { + ClearEnvCommandHandler, + DelEnvCommandHandler, + EchoCommandHandler, + HelpCommandHandler, + ImgCommandHandler, + NewCommandHandler, + RedoCommandHandler, + SetEnvCommandHandler, + SetEnvsCommandHandler, + StartCommandHandler, + SystemCommandHandler, + VersionCommandHandler, +} from './system'; +import { loadChatRoleWithContext } from './auth'; + +const SYSTEM_COMMANDS: CommandHandler[] = [ + new StartCommandHandler(), + new NewCommandHandler(), + new RedoCommandHandler(), + new ImgCommandHandler(), + new SetEnvCommandHandler(), + new SetEnvsCommandHandler(), + new DelEnvCommandHandler(), + new ClearEnvCommandHandler(), + new VersionCommandHandler(), + new SystemCommandHandler(), + new HelpCommandHandler(), +]; + +async function handleSystemCommand(message: Telegram.Message, raw: string, command: CommandHandler, context: WorkerContext): Promise { + const sender = MessageSender.from(context.SHARE_CONTEXT.botToken, message); + try { + // 如果存在权限条件 + if (command.needAuth) { + const roleList = command.needAuth(message.chat.type); + if (roleList) { + // 获取身份并判断 + const chatRole = await loadChatRoleWithContext(message, context); + if (chatRole === null) { + return sender.sendPlainText('ERROR: Get chat role failed'); + } + if (!roleList.includes(chatRole)) { + return sender.sendPlainText(`ERROR: Permission denied, need ${roleList.join(' or ')}`); + } + } + } + } catch (e) { + return sender.sendPlainText(`ERROR: ${(e as Error).message}`); + } + const subcommand = raw.substring(command.command.length).trim(); + try { + return await command.handle(message, subcommand, context); + } catch (e) { + return sender.sendPlainText(`ERROR: ${(e as Error).message}`); + } +} + +async function handlePluginCommand(message: Telegram.Message, command: string, raw: string, template: RequestTemplate, context: WorkerContext): Promise { + const sender = MessageSender.from(context.SHARE_CONTEXT.botToken, message); + try { + const subcommand = raw.substring(command.length).trim(); + const DATA = formatInput(subcommand, template.input?.type); + const { type, content } = await executeRequest(template, { + DATA, + ENV: ENV.PLUGINS_ENV, + }); + if (type === 'image') { + return sender.sendPhoto(content); + } + switch (type) { + case 'html': + return sender.sendRichText(content, 'HTML'); + case 'markdown': + return sender.sendRichText(content, 'Markdown'); + case 'text': + default: + return sender.sendPlainText(content); + } + } catch (e) { + const help = ENV.PLUGINS_COMMAND[command].description; + return sender.sendPlainText(`ERROR: ${(e as Error).message}${help ? `\n${help}` : ''}`); + } +} + +export async function handleCommandMessage(message: Telegram.Message, context: WorkerContext): Promise { + let text = (message.text || message.caption || '').trim(); + + if (ENV.CUSTOM_COMMAND[text]) { + // 替换自定义命令为系统命令 + text = ENV.CUSTOM_COMMAND[text].value; + } + + if (ENV.DEV_MODE) { + // 插入调试命令 + SYSTEM_COMMANDS.push(new EchoCommandHandler()); + } + + // 查找插件命令 + for (const key in ENV.PLUGINS_COMMAND) { + if (text === key || text.startsWith(`${key} `)) { + let template = ENV.PLUGINS_COMMAND[key].value.trim(); + if (template.startsWith('http')) { + template = await fetch(template).then(r => r.text()); + } + return await handlePluginCommand(message, key, text, JSON.parse(template), context); + } + } + + // 查找系统命令 + for (const cmd of SYSTEM_COMMANDS) { + if (text === cmd.command || text.startsWith(`${cmd.command} `)) { + return await handleSystemCommand(message, text, cmd, context); + } + } + return null; +} + +export function commandsBindScope(): Record { + const scopeCommandMap: Record = { + all_private_chats: [], + all_group_chats: [], + all_chat_administrators: [], + }; + for (const cmd of SYSTEM_COMMANDS) { + if (ENV.HIDE_COMMAND_BUTTONS.includes(cmd.command)) { + continue; + } + if (cmd.scopes) { + for (const scope of cmd.scopes) { + if (!scopeCommandMap[scope]) { + scopeCommandMap[scope] = []; + } + scopeCommandMap[scope].push(cmd); + } + } + } + const result: Record = {}; + for (const scope in scopeCommandMap) { + result[scope] = { + commands: scopeCommandMap[scope].map(command => ({ + command: command.command, + description: ENV.I18N.command.help[command.command.substring(1)] || '', + })).filter(item => item.description !== ''), + scope: { + type: scope, + }, + }; + } + return result; +} + +export function commandsDocument(): { description: string; command: string }[] { + return SYSTEM_COMMANDS.map((command) => { + return { + command: command.command, + description: ENV.I18N.command.help[command.command.substring(1)] || '', + }; + }).filter(item => item.description !== ''); +} diff --git a/src/telegram/command/system.ts b/src/telegram/command/system.ts new file mode 100644 index 00000000..258b5892 --- /dev/null +++ b/src/telegram/command/system.ts @@ -0,0 +1,344 @@ +import type * as Telegram from 'telegram-bot-api-types'; +import type { WorkerContext } from '../../config/context'; +import { isTelegramChatTypeGroup } from '../utils/utils'; +import type { HistoryItem, HistoryModifierResult } from '../../agent/types'; +import { chatWithLLM } from '../handler/chat'; +import { loadChatLLM, loadImageGen } from '../../agent'; +import { createTelegramBotAPI } from '../api'; +import { MessageSender } from '../utils/send'; +import { ConfigMerger } from '../../config/merger'; +import { ENV, ENV_KEY_MAPPER } from '../../config/env'; +import type { CommandHandler } from './types'; + +export const COMMAND_AUTH_CHECKER = { + default(chatType: string): string[] | null { + if (isTelegramChatTypeGroup(chatType)) { + return ['administrator', 'creator']; + } + return null; + }, + shareModeGroup(chatType: string): string[] | null { + if (isTelegramChatTypeGroup(chatType)) { + // 每个人在群里有上下文的时候,不限制 + if (!ENV.GROUP_CHAT_BOT_SHARE_MODE) { + return null; + } + return ['administrator', 'creator']; + } + return null; + }, +}; + +export class ImgCommandHandler implements CommandHandler { + command = '/img'; + scopes = ['all_private_chats', 'all_chat_administrators']; + handle = async (message: Telegram.Message, subcommand: string, context: WorkerContext): Promise => { + const sender = MessageSender.from(context.SHARE_CONTEXT.botToken, message); + if (subcommand === '') { + return sender.sendPlainText(ENV.I18N.command.help.img); + } + try { + const api = createTelegramBotAPI(context.SHARE_CONTEXT.botToken); + const agent = loadImageGen(context.USER_CONFIG); + if (!agent) { + return sender.sendPlainText('ERROR: Image generator not found'); + } + setTimeout(() => api.sendChatAction({ + chat_id: message.chat.id, + action: 'upload_photo', + }).catch(console.error), 0); + const img = await agent.request(subcommand, context.USER_CONFIG); + const resp = await sender.sendPhoto(img); + if (!resp.ok) { + return sender.sendPlainText(`ERROR: ${resp.statusText} ${await resp.text()}`); + } + return resp; + } catch (e) { + return sender.sendPlainText(`ERROR: ${(e as Error).message}`); + } + }; +} + +export class HelpCommandHandler implements CommandHandler { + command = '/help'; + scopes = ['all_private_chats', 'all_chat_administrators']; + handle = async (message: Telegram.Message, subcommand: string, context: WorkerContext): Promise => { + const sender = MessageSender.from(context.SHARE_CONTEXT.botToken, message); + let helpMsg = `${ENV.I18N.command.help.summary}\n`; + for (const [k, v] of Object.entries(ENV.I18N.command.help)) { + if (k === 'summary') { + continue; + } + helpMsg += `/${k}:${v}\n`; + } + for (const [k, v] of Object.entries(ENV.CUSTOM_COMMAND)) { + if (v.description) { + helpMsg += `${k}:${v.description}\n`; + } + } + for (const [k, v] of Object.entries(ENV.PLUGINS_COMMAND)) { + if (v.description) { + helpMsg += `${k}:${v.description}\n`; + } + } + return sender.sendPlainText(helpMsg); + }; +} + +class BaseNewCommandHandler { + static async handle(showID: boolean, message: Telegram.Message, subcommand: string, context: WorkerContext): Promise { + await ENV.DATABASE.delete(context.SHARE_CONTEXT.chatHistoryKey); + const text = ENV.I18N.command.new.new_chat_start + (showID ? `(${message.chat.id})` : ''); + const params: Telegram.SendMessageParams = { + chat_id: message.chat.id, + text, + }; + if (ENV.SHOW_REPLY_BUTTON && !isTelegramChatTypeGroup(message.chat.type)) { + params.reply_markup = { + keyboard: [[{ text: '/new' }, { text: '/redo' }]], + selective: true, + resize_keyboard: true, + one_time_keyboard: false, + }; + } else { + params.reply_markup = { + remove_keyboard: true, + selective: true, + }; + } + return createTelegramBotAPI(context.SHARE_CONTEXT.botToken).sendMessage(params); + } +} + +export class NewCommandHandler extends BaseNewCommandHandler implements CommandHandler { + command = '/new'; + scopes = ['all_private_chats', 'all_group_chats', 'all_chat_administrators']; + handle = async (message: Telegram.Message, subcommand: string, context: WorkerContext): Promise => { + return BaseNewCommandHandler.handle(false, message, subcommand, context); + }; +} + +export class StartCommandHandler extends BaseNewCommandHandler implements CommandHandler { + command = '/start'; + handle = async (message: Telegram.Message, subcommand: string, context: WorkerContext): Promise => { + return BaseNewCommandHandler.handle(true, message, subcommand, context); + }; +} + +export class SetEnvCommandHandler implements CommandHandler { + command = '/setenv'; + needAuth = COMMAND_AUTH_CHECKER.shareModeGroup; + handle = async (message: Telegram.Message, subcommand: string, context: WorkerContext): Promise => { + const sender = MessageSender.from(context.SHARE_CONTEXT.botToken, message); + const kv = subcommand.indexOf('='); + if (kv === -1) { + return sender.sendPlainText(ENV.I18N.command.help.setenv); + } + let key = subcommand.slice(0, kv); + const value = subcommand.slice(kv + 1); + key = ENV_KEY_MAPPER[key] || key; + if (ENV.LOCK_USER_CONFIG_KEYS.includes(key)) { + return sender.sendPlainText(`Key ${key} is locked`); + } + if (!Object.keys(context.USER_CONFIG).includes(key)) { + return sender.sendPlainText(`Key ${key} not found`); + } + try { + context.USER_CONFIG.DEFINE_KEYS.push(key); + context.USER_CONFIG.DEFINE_KEYS = Array.from(new Set(context.USER_CONFIG.DEFINE_KEYS)); + ConfigMerger.merge(context.USER_CONFIG, { + [key]: value, + }); + console.log('Update user config: ', key, context.USER_CONFIG[key]); + await ENV.DATABASE.put( + context.SHARE_CONTEXT.configStoreKey, + JSON.stringify(context.USER_CONFIG.trim(ENV.LOCK_USER_CONFIG_KEYS)), + ); + return sender.sendPlainText('Update user config success'); + } catch (e) { + return sender.sendPlainText(`ERROR: ${(e as Error).message}`); + } + }; +} + +export class SetEnvsCommandHandler implements CommandHandler { + command = '/setenvs'; + needAuth = COMMAND_AUTH_CHECKER.shareModeGroup; + handle = async (message: Telegram.Message, subcommand: string, context: WorkerContext): Promise => { + const sender = MessageSender.from(context.SHARE_CONTEXT.botToken, message); + try { + const values = JSON.parse(subcommand); + const configKeys = Object.keys(context.USER_CONFIG); + for (const ent of Object.entries(values)) { + let [key, value] = ent; + key = ENV_KEY_MAPPER[key] || key; + if (ENV.LOCK_USER_CONFIG_KEYS.includes(key)) { + return sender.sendPlainText(`Key ${key} is locked`); + } + if (!configKeys.includes(key)) { + return sender.sendPlainText(`Key ${key} not found`); + } + context.USER_CONFIG.DEFINE_KEYS.push(key); + ConfigMerger.merge(context.USER_CONFIG, { + [key]: value, + }); + console.log('Update user config: ', key, context.USER_CONFIG[key]); + } + context.USER_CONFIG.DEFINE_KEYS = Array.from(new Set(context.USER_CONFIG.DEFINE_KEYS)); + await ENV.DATABASE.put( + context.SHARE_CONTEXT.configStoreKey, + JSON.stringify(context.USER_CONFIG.trim(ENV.LOCK_USER_CONFIG_KEYS)), + ); + return sender.sendPlainText('Update user config success'); + } catch (e) { + return sender.sendPlainText(`ERROR: ${(e as Error).message}`); + } + }; +} + +export class DelEnvCommandHandler implements CommandHandler { + command = '/delenv'; + needAuth = COMMAND_AUTH_CHECKER.shareModeGroup; + handle = async (message: Telegram.Message, subcommand: string, context: WorkerContext): Promise => { + const sender = MessageSender.from(context.SHARE_CONTEXT.botToken, message); + if (ENV.LOCK_USER_CONFIG_KEYS.includes(subcommand)) { + const msg = `Key ${subcommand} is locked`; + return sender.sendPlainText(msg); + } + try { + context.USER_CONFIG[subcommand] = null; + context.USER_CONFIG.DEFINE_KEYS = context.USER_CONFIG.DEFINE_KEYS.filter(key => key !== subcommand); + await ENV.DATABASE.put( + context.SHARE_CONTEXT.configStoreKey, + JSON.stringify(context.USER_CONFIG.trim(ENV.LOCK_USER_CONFIG_KEYS)), + ); + return sender.sendPlainText('Delete user config success'); + } catch (e) { + return sender.sendPlainText(`ERROR: ${(e as Error).message}`); + } + }; +} + +export class ClearEnvCommandHandler implements CommandHandler { + command = '/clearenv'; + needAuth = COMMAND_AUTH_CHECKER.shareModeGroup; + handle = async (message: Telegram.Message, subcommand: string, context: WorkerContext): Promise => { + const sender = MessageSender.from(context.SHARE_CONTEXT.botToken, message); + try { + await ENV.DATABASE.put( + context.SHARE_CONTEXT.configStoreKey, + JSON.stringify({}), + ); + return sender.sendPlainText('Clear user config success'); + } catch (e) { + return sender.sendPlainText(`ERROR: ${(e as Error).message}`); + } + ; + }; +} + +export class VersionCommandHandler implements CommandHandler { + command = '/version'; + scopes = ['all_private_chats', 'all_chat_administrators']; + handle = async (message: Telegram.Message, subcommand: string, context: WorkerContext): Promise => { + const sender = MessageSender.from(context.SHARE_CONTEXT.botToken, message); + const current = { + ts: ENV.BUILD_TIMESTAMP, + sha: ENV.BUILD_VERSION, + }; + try { + const info = `https://raw.githubusercontent.com/TBXark/ChatGPT-Telegram-Workers/${ENV.UPDATE_BRANCH}/dist/buildinfo.json`; + const online = await fetch(info).then(r => r.json()) as { ts: number; sha: string }; + const timeFormat = (ts: number): string => { + return new Date(ts * 1000).toLocaleString('en-US', {}); + }; + if (current.ts < online.ts) { + const text = `New version detected: ${online.sha}(${timeFormat(online.ts)})\nCurrent version: ${current.sha}(${timeFormat(current.ts)})`; + return sender.sendPlainText(text); + } else { + const text = `Current version: ${current.sha}(${timeFormat(current.ts)}) is up to date`; + return sender.sendPlainText(text); + } + } catch (e) { + return sender.sendPlainText(`ERROR: ${(e as Error).message}`); + } + }; +} + +export class SystemCommandHandler implements CommandHandler { + command = '/system'; + scopes = ['all_private_chats', 'all_chat_administrators']; + handle = async (message: Telegram.Message, subcommand: string, context: WorkerContext): Promise => { + const sender = MessageSender.from(context.SHARE_CONTEXT.botToken, message); + const chatAgent = loadChatLLM(context.USER_CONFIG); + const imageAgent = loadImageGen(context.USER_CONFIG); + const agent = { + AI_PROVIDER: chatAgent?.name, + [chatAgent?.modelKey || 'AI_PROVIDER_NOT_FOUND']: chatAgent?.model(context.USER_CONFIG), + AI_IMAGE_PROVIDER: imageAgent?.name, + [imageAgent?.modelKey || 'AI_IMAGE_PROVIDER_NOT_FOUND']: imageAgent?.model(context.USER_CONFIG), + }; + let msg = `AGENT: ${JSON.stringify(agent, null, 2)}\n`; + if (ENV.DEV_MODE) { + const shareCtx = { ...context.SHARE_CONTEXT }; + shareCtx.botToken = '******'; + context.USER_CONFIG.OPENAI_API_KEY = ['******']; + context.USER_CONFIG.AZURE_API_KEY = '******'; + context.USER_CONFIG.AZURE_COMPLETIONS_API = '******'; + context.USER_CONFIG.AZURE_DALLE_API = '******'; + context.USER_CONFIG.CLOUDFLARE_ACCOUNT_ID = '******'; + context.USER_CONFIG.CLOUDFLARE_TOKEN = '******'; + context.USER_CONFIG.GOOGLE_API_KEY = '******'; + context.USER_CONFIG.MISTRAL_API_KEY = '******'; + context.USER_CONFIG.COHERE_API_KEY = '******'; + context.USER_CONFIG.ANTHROPIC_API_KEY = '******'; + const config = context.USER_CONFIG.trim(ENV.LOCK_USER_CONFIG_KEYS); + msg = `
\n${msg}`;
+            msg += `USER_CONFIG: ${JSON.stringify(config, null, 2)}\n`;
+            msg += `CHAT_CONTEXT: ${JSON.stringify(sender.context || {}, null, 2)}\n`;
+            msg += `SHARE_CONTEXT: ${JSON.stringify(shareCtx, null, 2)}\n`;
+            msg += '
'; + } + return sender.sendRichText(msg, 'HTML'); + }; +} + +export class RedoCommandHandler implements CommandHandler { + command = '/redo'; + scopes = ['all_private_chats', 'all_group_chats', 'all_chat_administrators']; + handle = async (message: Telegram.Message, subcommand: string, context: WorkerContext): Promise => { + const mf = (history: HistoryItem[], text: string | null): HistoryModifierResult => { + let nextText = text; + if (!(history && Array.isArray(history) && history.length > 0)) { + throw new Error('History not found'); + } + const historyCopy = structuredClone(history); + while (true) { + const data = historyCopy.pop(); + if (data === undefined || data === null) { + break; + } else if (data.role === 'user') { + if (text === '' || text === undefined || text === null) { + nextText = data.content || null; + } + break; + } + } + if (subcommand) { + nextText = subcommand; + } + return { history: historyCopy, message: nextText }; + }; + return chatWithLLM(message, { message: null }, context, mf); + }; +} + +export class EchoCommandHandler implements CommandHandler { + command = '/echo'; + handle = (message: Telegram.Message, subcommand: string, context: WorkerContext): Promise => { + let msg = '
';
+        msg += JSON.stringify({ message }, null, 2);
+        msg += '
'; + return MessageSender.from(context.SHARE_CONTEXT.botToken, message).sendRichText(msg, 'HTML'); + }; +} diff --git a/src/telegram/command/types.ts b/src/telegram/command/types.ts new file mode 100644 index 00000000..f251121d --- /dev/null +++ b/src/telegram/command/types.ts @@ -0,0 +1,9 @@ +import type * as Telegram from 'telegram-bot-api-types'; +import type { WorkerContext } from '../../config/context'; + +export interface CommandHandler { + command: string; + scopes?: string[]; + handle: (message: Telegram.Message, subcommand: string, context: WorkerContext) => Promise; + needAuth?: (chatType: string) => string[] | null; +} diff --git a/src/telegram/handler/chat.ts b/src/telegram/handler/chat.ts new file mode 100644 index 00000000..9f0ba583 --- /dev/null +++ b/src/telegram/handler/chat.ts @@ -0,0 +1,111 @@ +import type * as Telegram from 'telegram-bot-api-types'; +import { loadChatLLM } from '../../agent'; +import type { StreamResultHandler } from '../../agent/chat'; +import { requestCompletionsFromLLM } from '../../agent/chat'; +import type { HistoryModifier, LLMChatRequestParams } from '../../agent/types'; +import type { WorkerContext } from '../../config/context'; +import { MessageSender } from '../utils/send'; +import { uploadImageToTelegraph } from '../../utils/image'; +import { createTelegramBotAPI } from '../api'; +import { ENV } from '../../config/env'; +import type { MessageHandler } from './types'; + +export async function chatWithLLM(message: Telegram.Message, params: LLMChatRequestParams, context: WorkerContext, modifier: HistoryModifier | null): Promise { + const sender = MessageSender.from(context.SHARE_CONTEXT.botToken, message); + try { + try { + const msg = await sender.sendPlainText('...').then(r => r.json()) as Telegram.ResponseWithMessage; + sender.update({ + message_id: msg.result.message_id, + }); + } catch (e) { + console.error(e); + } + const api = createTelegramBotAPI(context.SHARE_CONTEXT.botToken); + setTimeout(() => api.sendChatAction({ + chat_id: message.chat.id, + action: 'typing', + }).catch(console.error), 0); + let onStream: StreamResultHandler | null = null; + let nextEnableTime: number | null = null; + if (ENV.STREAM_MODE) { + onStream = async (text: string): Promise => { + try { + // 判断是否需要等待 + if (nextEnableTime && nextEnableTime > Date.now()) { + return; + } + const resp = await sender.sendPlainText(text); + // 判断429 + if (resp.status === 429) { + // 获取重试时间 + const retryAfter = Number.parseInt(resp.headers.get('Retry-After') || ''); + if (retryAfter) { + nextEnableTime = Date.now() + retryAfter * 1000; + return; + } + } + nextEnableTime = null; + if (resp.ok) { + const respJson = await resp.json() as Telegram.ResponseWithMessage; + sender.update({ + message_id: respJson.result.message_id, + }); + } + } catch (e) { + console.error(e); + } + }; + } + + const agent = loadChatLLM(context.USER_CONFIG); + if (agent === null) { + return sender.sendPlainText('LLM is not enable'); + } + const answer = await requestCompletionsFromLLM(params, context, agent, modifier, onStream); + if (nextEnableTime !== null && nextEnableTime > Date.now()) { + await new Promise(resolve => setTimeout(resolve, (nextEnableTime ?? 0) - Date.now())); + } + return sender.sendRichText(answer); + } catch (e) { + let errMsg = `Error: ${(e as Error).message}`; + if (errMsg.length > 2048) { + // 裁剪错误信息 最长2048 + errMsg = errMsg.substring(0, 2048); + } + return sender.sendPlainText(errMsg); + } +} + +function findPhotoFileID(photos: Telegram.PhotoSize[], offset: number): string { + let sizeIndex = 0; + if (offset >= 0) { + sizeIndex = offset; + } else if (offset < 0) { + sizeIndex = photos.length + offset; + } + sizeIndex = Math.max(0, Math.min(sizeIndex, photos.length - 1)); + return photos[sizeIndex].file_id; +} + +export class ChatHandler implements MessageHandler { + handle = async (message: Telegram.Message, context: WorkerContext): Promise => { + const params: LLMChatRequestParams = { + message: message.text || message.caption || '', + }; + + if (message.photo && message.photo.length > 0) { + const id = findPhotoFileID(message.photo, ENV.TELEGRAM_PHOTO_SIZE_OFFSET); + const api = createTelegramBotAPI(context.SHARE_CONTEXT.botToken); + const file = await api.getFileWithReturns({ file_id: id }); + let url = file.result.file_path; + if (url) { + if (ENV.TELEGRAPH_ENABLE) { + url = await uploadImageToTelegraph(url); + } + params.images = [url]; + } + } + return chatWithLLM(message, params, context, null); + }; +} diff --git a/src/telegram/handler/group.ts b/src/telegram/handler/group.ts new file mode 100644 index 00000000..b990c62b --- /dev/null +++ b/src/telegram/handler/group.ts @@ -0,0 +1,92 @@ +import type * as Telegram from 'telegram-bot-api-types'; +import type { WorkerContext } from '../../config/context'; +import { isTelegramChatTypeGroup } from '../utils/utils'; +import { createTelegramBotAPI } from '../api'; +import { ENV } from '../../config/env'; +import type { MessageHandler } from './types'; + +function checkMention(content: string, entities: Telegram.MessageEntity[], botName: string, botId: number): { + isMention: boolean; + content: string; +} { + let isMention = false; + for (const entity of entities) { + const entityStr = content.slice(entity.offset, entity.offset + entity.length); + switch (entity.type) { + case 'mention': // "mention"适用于有用户名的普通用户 + if (entityStr === `@${botName}`) { + isMention = true; + content = content.slice(0, entity.offset) + content.slice(entity.offset + entity.length); + } + break; + case 'text_mention': // "text_mention"适用于没有用户名的用户或需要通过ID提及用户的情况 + if (`${entity.user?.id}` === `${botId}`) { + isMention = true; + content = content.slice(0, entity.offset) + content.slice(entity.offset + entity.length); + } + break; + case 'bot_command': // "bot_command"适用于命令 + if (entityStr.endsWith(`@${botName}`)) { + isMention = true; + const newEntityStr = entityStr.replace(`@${botName}`, ''); + content = content.slice(0, entity.offset) + newEntityStr + content.slice(entity.offset + entity.length); + } + break; + default: + break; + } + } + return { + isMention, + content, + }; +} + +export class GroupMention implements MessageHandler { + handle = async (message: Telegram.Message, context: WorkerContext): Promise => { + // 非群组消息不作判断,交给下一个中间件处理 + if (!isTelegramChatTypeGroup(message.chat.type)) { + return null; + } + + // 处理回复消息, 如果回复的是当前机器人的消息交给下一个中间件处理 + const replyMe = `${message.reply_to_message?.from?.id}` === `${context.SHARE_CONTEXT.botId}`; + if (replyMe) { + return null; + } + + // 处理群组消息,过滤掉AT部分 + let botName = context.SHARE_CONTEXT.botName; + if (!botName) { + const res = await createTelegramBotAPI(context.SHARE_CONTEXT.botToken).getMeWithReturns(); + botName = res.result.username || null; + context.SHARE_CONTEXT.botName = botName; + } + if (!botName) { + throw new Error('Not set bot name'); + } + let isMention = false; + // 检查text中是否有机器人的提及 + if (message.text && message.entities) { + const res = checkMention(message.text, message.entities, botName, context.SHARE_CONTEXT.botId); + isMention = res.isMention; + message.text = res.content.trim(); + } + // 检查caption中是否有机器人的提及 + if (message.caption && message.caption_entities) { + const res = checkMention(message.caption, message.caption_entities, botName, context.SHARE_CONTEXT.botId); + isMention = res.isMention || isMention; + message.caption = res.content.trim(); + } + if (!isMention) { + throw new Error('Not mention'); + } + + if (ENV.EXTRA_MESSAGE_CONTEXT && !replyMe && message.reply_to_message && message.reply_to_message.text) { + if (message.text) { + message.text = `${message.reply_to_message.text}\n${message.text}`; + } + } + return null; + }; +} diff --git a/src/telegram/handler/handlers.ts b/src/telegram/handler/handlers.ts new file mode 100644 index 00000000..5fdd3c8f --- /dev/null +++ b/src/telegram/handler/handlers.ts @@ -0,0 +1,116 @@ +import type * as Telegram from 'telegram-bot-api-types'; +import type { WorkerContext } from '../../config/context'; +import { handleCommandMessage } from '../command'; +import { MessageSender } from '../utils/send'; +import { isTelegramChatTypeGroup } from '../utils/utils'; +import { ENV } from '../../config/env'; +import type { MessageHandler } from './types'; + +export class SaveLastMessage implements MessageHandler { + handle = async (message: Telegram.Message, context: WorkerContext): Promise => { + if (!ENV.DEBUG_MODE) { + return null; + } + const lastMessageKey = `last_message:${context.SHARE_CONTEXT.chatHistoryKey}`; + await ENV.DATABASE.put(lastMessageKey, JSON.stringify(message), { expirationTtl: 3600 }); + return null; + }; +} + +export class OldMessageFilter implements MessageHandler { + handle = async (message: Telegram.Message, context: WorkerContext): Promise => { + if (!ENV.SAFE_MODE) { + return null; + } + let idList = []; + try { + idList = JSON.parse(await ENV.DATABASE.get(context.SHARE_CONTEXT.lastMessageKey).catch(() => '[]')) || []; + } catch (e) { + console.error(e); + } + // 保存最近的100条消息,如果存在则忽略,如果不存在则保存 + if (idList.includes(message.message_id)) { + throw new Error('Ignore old message'); + } else { + idList.push(message.message_id); + if (idList.length > 100) { + idList.shift(); + } + await ENV.DATABASE.put(context.SHARE_CONTEXT.lastMessageKey, JSON.stringify(idList)); + } + return null; + }; +} + +export class EnvChecker implements MessageHandler { + handle = async (message: Telegram.Message, context: WorkerContext): Promise => { + if (!ENV.DATABASE) { + return MessageSender + .from(context.SHARE_CONTEXT.botToken, message) + .sendPlainText('DATABASE Not Set'); + } + return null; + }; +} + +export class WhiteListFilter implements MessageHandler { + handle = async (message: Telegram.Message, context: WorkerContext): Promise => { + if (ENV.I_AM_A_GENEROUS_PERSON) { + return null; + } + const sender = MessageSender.from(context.SHARE_CONTEXT.botToken, message); + const text = `You are not in the white list, please contact the administrator to add you to the white list. Your chat_id: ${message.chat.id}`; + + // 判断私聊消息 + if (message.chat.type === 'private') { + // 白名单判断 + if (!ENV.CHAT_WHITE_LIST.includes(`${message.chat.id}`)) { + return sender.sendPlainText(text); + } + return null; + } + + // 判断群组消息 + if (isTelegramChatTypeGroup(message.chat.type)) { + // 未打开群组机器人开关,直接忽略 + if (!ENV.GROUP_CHAT_BOT_ENABLE) { + throw new Error('Not support'); + } + // 白名单判断 + if (!ENV.CHAT_GROUP_WHITE_LIST.includes(`${message.chat.id}`)) { + return sender.sendPlainText(text); + } + return null; + } + + return sender.sendPlainText( + `Not support chat type: ${message.chat.type}`, + ); + }; +} + +export class MessageFilter implements MessageHandler { + // eslint-disable-next-line unused-imports/no-unused-vars + handle = async (message: Telegram.Message, context: WorkerContext): Promise => { + if (message.text) { + return null;// 纯文本消息 + } + if (message.caption) { + return null;// 图文消息 + } + if (message.photo) { + return null;// 图片消息 + } + throw new Error('Not supported message type'); + }; +} + +export class CommandHandler implements MessageHandler { + handle = async (message: Telegram.Message, context: WorkerContext): Promise => { + if (message.text || message.caption) { + return await handleCommandMessage(message, context); + } + // 非文本消息不作处理 + return null; + }; +} diff --git a/src/telegram/handler/index.ts b/src/telegram/handler/index.ts new file mode 100644 index 00000000..a376aa65 --- /dev/null +++ b/src/telegram/handler/index.ts @@ -0,0 +1,64 @@ +import type * as Telegram from 'telegram-bot-api-types'; +import { WorkerContext } from '../../config/context'; +import { ChatHandler } from './chat'; +import { GroupMention } from './group'; +import type { MessageHandler } from './types'; +import { + CommandHandler, + EnvChecker, + MessageFilter, + OldMessageFilter, + SaveLastMessage, + WhiteListFilter, +} from './handlers'; + +function loadMessage(body: Telegram.Update): Telegram.Message { + if (body.edited_message) { + throw new Error('Ignore edited message'); + } + if (body.message) { + return body?.message; + } else { + throw new Error('Invalid message'); + } +} + +// 消息处理中间件 +const SHARE_HANDLER: MessageHandler[] = [ + // 检查环境是否准备好: DATABASE + new EnvChecker(), + // 过滤非白名单用户, 提前过滤减少KV消耗 + new WhiteListFilter(), + // 过滤不支持的消息(抛出异常结束消息处理) + new MessageFilter(), + // 处理群消息,判断是否需要响应此条消息 + new GroupMention(), + // 忽略旧消息 + new OldMessageFilter(), + // DEBUG: 保存最后一条消息,按照需求自行调整此中间件位置 + new SaveLastMessage(), + // 处理命令消息 + new CommandHandler(), + // 与llm聊天 + new ChatHandler(), +]; + +export async function handleUpdate(token: string, update: Telegram.Update): Promise { + const message = loadMessage(update); + const context = await WorkerContext.from(token, message); + + for (const handler of SHARE_HANDLER) { + try { + const result = await handler.handle(message, context); + if (result) { + return result; + } + } catch (e) { + return new Response(JSON.stringify({ + message: (e as Error).message, + stack: (e as Error).stack, + }), { status: 500 }); + } + } + return null; +} diff --git a/src/telegram/handler/types.ts b/src/telegram/handler/types.ts new file mode 100644 index 00000000..3de7294b --- /dev/null +++ b/src/telegram/handler/types.ts @@ -0,0 +1,10 @@ +import type * as Telegram from 'telegram-bot-api-types'; +import type { WorkerContext } from '../../config/context'; + +// 中间件定义 function (message: TelegramMessage, context: Context): Promise +// 1. 当函数抛出异常时,结束消息处理,返回异常信息 +// 2. 当函数返回 Response 对象时,结束消息处理,返回 Response 对象 +// 3. 当函数返回 null 时,继续下一个中间件处理 +export interface MessageHandler { + handle: (message: Telegram.Message, context: WorkerContext) => Promise; +} diff --git a/src/telegram/message.js b/src/telegram/message.js deleted file mode 100644 index ebcca80a..00000000 --- a/src/telegram/message.js +++ /dev/null @@ -1,298 +0,0 @@ -import { CONST, DATABASE, ENV } from '../config/env.js'; -import { Context } from '../config/context.js'; -import { uploadImageToTelegraph } from '../utils/image.js'; -import { errorToString } from '../utils/utils.js'; -import { getBotName, getFileLink, sendMessageToTelegramWithContext } from './telegram.js'; -import { handleCommandMessage } from './command.js'; - -import '../types/telegram.js'; -import { checkMention, findPhotoFileID } from './utils.js'; -import { chatWithLLM } from './agent.js'; - -/** - * 初始化聊天上下文 - * @param {TelegramMessage} message - * @param {ContextType} context - * @returns {Promise} - */ -async function msgInitChatContext(message, context) { - await context.initContext(message); - return null; -} - -/** - * 保存最后一条消息 - * @param {TelegramMessage} message - * @param {ContextType} context - * @returns {Promise} - */ -async function msgSaveLastMessage(message, context) { - if (ENV.DEBUG_MODE) { - const lastMessageKey = `last_message:${context.SHARE_CONTEXT.chatHistoryKey}`; - await DATABASE.put(lastMessageKey, JSON.stringify(message), { expirationTtl: 3600 }); - } - return null; -} - -/** - * 忽略旧的消息 - * @param {TelegramMessage} message - * @param {ContextType} context - * @returns {Promise} - */ -async function msgIgnoreOldMessage(message, context) { - if (ENV.SAFE_MODE) { - let idList = []; - try { - idList = JSON.parse(await DATABASE.get(context.SHARE_CONTEXT.chatLastMessageIdKey).catch(() => '[]')) || []; - } catch (e) { - console.error(e); - } - // 保存最近的100条消息,如果存在则忽略,如果不存在则保存 - if (idList.includes(message.message_id)) { - throw new Error('Ignore old message'); - } else { - idList.push(message.message_id); - if (idList.length > 100) { - idList.shift(); - } - await DATABASE.put(context.SHARE_CONTEXT.chatLastMessageIdKey, JSON.stringify(idList)); - } - } - return null; -} - -/** - * 检查环境变量是否设置 - * @param {TelegramMessage} message - * @param {ContextType} context - * @returns {Promise} - */ -async function msgCheckEnvIsReady(message, context) { - if (!DATABASE) { - return sendMessageToTelegramWithContext(context)('DATABASE Not Set'); - } - return null; -} - -/** - * 过滤非白名单用户 - * @param {TelegramMessage} message - * @param {ContextType} context - * @returns {Promise} - */ -async function msgFilterWhiteList(message, context) { - if (ENV.I_AM_A_GENEROUS_PERSON) { - return null; - } - // 判断私聊消息 - if (context.SHARE_CONTEXT.chatType === 'private') { - // 白名单判断 - if (!ENV.CHAT_WHITE_LIST.includes(`${context.CURRENT_CHAT_CONTEXT.chat_id}`)) { - return sendMessageToTelegramWithContext(context)( - `You are not in the white list, please contact the administrator to add you to the white list. Your chat_id: ${context.CURRENT_CHAT_CONTEXT.chat_id}`, - ); - } - return null; - } - - // 判断群组消息 - if (CONST.GROUP_TYPES.includes(context.SHARE_CONTEXT.chatType)) { - // 未打开群组机器人开关,直接忽略 - if (!ENV.GROUP_CHAT_BOT_ENABLE) { - throw new Error('Not support'); - } - // 白名单判断 - if (!ENV.CHAT_GROUP_WHITE_LIST.includes(`${context.CURRENT_CHAT_CONTEXT.chat_id}`)) { - return sendMessageToTelegramWithContext(context)( - `Your group are not in the white list, please contact the administrator to add you to the white list. Your chat_id: ${context.CURRENT_CHAT_CONTEXT.chat_id}`, - ); - } - return null; - } - return sendMessageToTelegramWithContext(context)( - `Not support chat type: ${context.SHARE_CONTEXT.chatType}`, - ); -} - -/** - * 过滤不支持的消息 - * @param {TelegramMessage} message - * @param {ContextType} context - * @returns {Promise} - */ -// eslint-disable-next-line unused-imports/no-unused-vars -async function msgFilterUnsupportedMessage(message, context) { - if (message.text) { - return null;// 纯文本消息 - } - if (message.caption) { - return null;// 图文消息 - } - if (message.photo) { - return null;// 图片消息 - } - throw new Error('Not supported message type'); -} - -/** - * 处理群消息 - * @param {TelegramMessage} message - * @param {ContextType} context - * @returns {Promise} - */ -async function msgHandleGroupMessage(message, context) { - // 非群组消息不作判断,交给下一个中间件处理 - if (!CONST.GROUP_TYPES.includes(context.SHARE_CONTEXT.chatType)) { - return null; - } - - // 处理回复消息, 如果回复的是当前机器人的消息交给下一个中间件处理 - if (message.reply_to_message) { - if (`${message.reply_to_message.from.id}` === context.SHARE_CONTEXT.currentBotId) { - return null; - } else if (ENV.EXTRA_MESSAGE_CONTEXT) { - context.SHARE_CONTEXT.extraMessageContext = message.reply_to_message; - } - } - - // 处理群组消息,过滤掉AT部分 - let botName = context.SHARE_CONTEXT.currentBotName; - if (!botName) { - botName = await getBotName(context.SHARE_CONTEXT.currentBotToken); - context.SHARE_CONTEXT.currentBotName = botName; - } - if (!botName) { - throw new Error('Not set bot name'); - } - let isMention = false; - // 检查text中是否有机器人的提及 - if (message.text && message.entities) { - const res = checkMention(message.text, message.entities, botName, context.SHARE_CONTEXT.currentBotId); - isMention = res.isMention; - message.text = res.content.trim(); - } - // 检查caption中是否有机器人的提及 - if (message.caption && message.caption_entities) { - const res = checkMention(message.caption, message.caption_entities, botName, context.SHARE_CONTEXT.currentBotId); - isMention = res.isMention || isMention; - message.caption = res.content.trim(); - } - if (!isMention) { - throw new Error('Not mention'); - } - return null; -} - -/** - * 响应命令消息 - * @param {TelegramMessage} message - * @param {ContextType} context - * @returns {Promise} - */ -async function msgHandleCommand(message, context) { - if (!message.text) { - // 非文本消息不作处理 - return null; - } - return await handleCommandMessage(message, context); -} - -/** - * 与llm聊天 - * @param {TelegramMessage} message - * @param {ContextType} context - * @returns {Promise} - */ -async function msgChatWithLLM(message, context) { - /** - * @type {LlmRequestParams} - */ - const params = { - message: message.text || message.caption || '', - }; - if (ENV.EXTRA_MESSAGE_CONTEXT && context.SHARE_CONTEXT.extraMessageContext) { - const extra = context.SHARE_CONTEXT.extraMessageContext.text || context.SHARE_CONTEXT.extraMessageContext.caption || ''; - if (extra) { - params.message = `${extra}\n${params.message}`; - } - } - - if (message.photo && message.photo.length > 0) { - const id = findPhotoFileID(message.photo, ENV.TELEGRAM_PHOTO_SIZE_OFFSET); - let url = await getFileLink(id, context.SHARE_CONTEXT.currentBotToken); - if (ENV.TELEGRAPH_ENABLE) { - url = await uploadImageToTelegraph(url); - } - params.images = [url]; - } - return chatWithLLM(params, context, null); -} - -/** - * 加载真实TG消息 - * @param {TelegramWebhookRequest} body - * @returns {TelegramMessage} - */ -function loadMessage(body) { - if (body?.edited_message) { - throw new Error('Ignore edited message'); - } - if (body?.message) { - return body?.message; - } else { - throw new Error('Invalid message'); - } -} - -/** - * 处理消息 - * @param {string} token - * @param {TelegramWebhookRequest} body - * @returns {Promise} - */ -export async function handleMessage(token, body) { - const context = new Context(); - context.initTelegramContext(token); - const message = loadMessage(body); - - // 中间件定义 function (message: TelegramMessage, context: Context): Promise - // 1. 当函数抛出异常时,结束消息处理,返回异常信息 - // 2. 当函数返回 Response 对象时,结束消息处理,返回 Response 对象 - // 3. 当函数返回 null 时,继续下一个中间件处理 - - // 消息处理中间件 - const handlers = [ - // 初始化聊天上下文: 生成chat_id, reply_to_message_id(群组消息), SHARE_CONTEXT - msgInitChatContext, - // 检查环境是否准备好: DATABASE - msgCheckEnvIsReady, - // 过滤非白名单用户, 提前过滤减少KV消耗 - msgFilterWhiteList, - // 过滤不支持的消息(抛出异常结束消息处理) - msgFilterUnsupportedMessage, - // 处理群消息,判断是否需要响应此条消息 - msgHandleGroupMessage, - // 忽略旧消息 - msgIgnoreOldMessage, - // DEBUG: 保存最后一条消息,按照需求自行调整此中间件位置 - msgSaveLastMessage, - // 处理命令消息 - msgHandleCommand, - // 与llm聊天 - msgChatWithLLM, - ]; - - for (const handler of handlers) { - try { - const result = await handler(message, context); - if (result) { - return result; - } - } catch (e) { - console.error(e); - return new Response(errorToString(e), { status: 500 }); - } - } - return null; -} diff --git a/src/telegram/telegram.js b/src/telegram/telegram.js deleted file mode 100644 index a6a868f8..00000000 --- a/src/telegram/telegram.js +++ /dev/null @@ -1,239 +0,0 @@ -import { ENV } from '../config/env.js'; -import { escape } from '../utils/md2tgmd.js'; -import '../types/context.js'; -import '../types/telegram.js'; - -// Telegram函数 -// 1. 需要判断请求状态的返回Promise -// 2. 无需判断请求结果的返回Promise -// 3. 有具体数据处理需求的返回具体数据类型的Promise -// 4. 默认返回Promise - -/** - * @param {string} method - * @param {string} token - * @param {object} body - * @returns {Promise} - */ -async function sendTelegramRequest(method, token, body = null) { - const headers = {}; - if (!(body instanceof FormData)) { - headers['Content-Type'] = 'application/json'; - } - return fetch( - `${ENV.TELEGRAM_API_DOMAIN}/bot${token}/${method}`, - { - method: 'POST', - headers, - body: body && ((body instanceof FormData) ? body : JSON.stringify(body)), - }, - ); -} - -/** - * @param {string} message - * @param {string} token - * @param {object} context - * @returns {Promise} - */ -async function sendMessage(message, token, context) { - const body = { - text: message, - }; - for (const key of Object.keys(context)) { - if (context[key] !== undefined && context[key] !== null) { - body[key] = context[key]; - } - } - let method = 'sendMessage'; - if (context?.message_id) { - method = 'editMessageText'; - } - return sendTelegramRequest(method, token, body); -} - -/** - * @param {string} message - * @param {string} token - * @param {CurrentChatContextType} context - * @returns {Promise} - */ -export async function sendMessageToTelegram(message, token, context) { - const chatContext = context; - const originMessage = message; - const limit = 4096; - - if (chatContext.parse_mode === 'MarkdownV2') { - message = escape(message); - } - - if (message.length <= limit) { - const resp = await sendMessage(message, token, chatContext); - if (resp.status === 200) { - return resp; - } else { - message = originMessage; - // 可能格式错乱导致发送失败,使用纯文本格式发送 - chatContext.parse_mode = null; - return await sendMessage(message, token, chatContext); - } - } - message = originMessage; - // 拆分消息后可能导致markdown格式错乱,所以采用纯文本模式发送 - chatContext.parse_mode = null; - let lastMessageResponse = null; - for (let i = 0; i < message.length; i += limit) { - const msg = message.slice(i, Math.min(i + limit, message.length)); - if (i > 0) { - chatContext.message_id = null; - } - lastMessageResponse = await sendMessage(msg, token, chatContext); - if (lastMessageResponse.status !== 200) { - break; - } - } - return lastMessageResponse; -} - -/** - * 发送图片消息到Telegram - * @param {string | Blob} photo - * @param {string} token - * @param {CurrentChatContextType} context - * @returns {Promise} - */ -export async function sendPhotoToTelegram(photo, token, context) { - if (typeof photo === 'string') { - const body = { - photo, - }; - for (const key of Object.keys(context)) { - if (context[key] !== undefined && context[key] !== null) { - body[key] = context[key]; - } - } - return sendTelegramRequest('sendPhoto', token, body); - } else { - const body = new FormData(); - body.append('photo', photo, 'photo.png'); - for (const key of Object.keys(context)) { - if (context[key] !== undefined && context[key] !== null) { - body.append(key, `${context[key]}`); - } - } - return sendTelegramRequest('sendPhoto', token, body); - } -} - -/** - * 发送聊天动作到TG - * @param {string} action - * @param {string} token - * @param {string | number} chatId - * @returns {Promise} - */ -export async function sendChatActionToTelegram(action, token, chatId) { - return sendTelegramRequest('sendChatAction', token, { - chat_id: chatId, - action, - }); -} - -/** - * 绑定WebHook - * @param {string} token - * @param {string} url - * @returns {Promise} - */ -export async function bindTelegramWebHook(token, url) { - return sendTelegramRequest('setWebhook', token, { url }); -} - -/** - * 删除WebHook - * @param {string} token - * @returns {Promise} - */ -export async function deleteTelegramWebHook(token) { - return sendTelegramRequest('deleteWebhook', token); -} - -/** - * 获取更新 - * @param {string} token - * @param {number} offset - * @returns {Promise<{result: TelegramWebhookRequest[]}>} - */ -export async function getTelegramUpdates(token, offset) { - return sendTelegramRequest('getUpdates', token, { offset }) - .then(res => res.json()); -} - -/** - * 获取群组管理员信息 - * @param {string | number} chatId - * @param {string} token - * @returns {Promise<{result: object[]}>} - */ -export async function getChatAdministrators(chatId, token) { - return sendTelegramRequest('getChatAdministrators', token, { chat_id: chatId }) - .then(res => res.json()).catch(() => null); -} - -/** - * 获取机器人名称 - * @param {string} token - * @returns {Promise} - */ -export async function getBotName(token) { - const { result: { username } } = await sendTelegramRequest('getMe', token) - .then(res => res.json()); - return username; -} - -/** - * 获取文件链接 - * @param {string} fileId - * @param {string} token - * @returns {Promise} - */ -export async function getFileLink(fileId, token) { - try { - const { result: { file_path } } = await sendTelegramRequest('getFile', token, { file_id: fileId }) - .then(res => res.json()); - return `https://api.telegram.org/file/bot${token}/${file_path}`; - } catch (e) { - console.error(e); - } - return ''; -} - -/** - * @param {ContextType} context - * @returns {function(string): Promise} - */ -export function sendMessageToTelegramWithContext(context) { - return async (message) => { - return sendMessageToTelegram(message, context.SHARE_CONTEXT.currentBotToken, context.CURRENT_CHAT_CONTEXT); - }; -} - -/** - * @param {ContextType} context - * @returns {function(string): Promise} - */ -export function sendPhotoToTelegramWithContext(context) { - return (url) => { - return sendPhotoToTelegram(url, context.SHARE_CONTEXT.currentBotToken, context.CURRENT_CHAT_CONTEXT); - }; -} - -/** - * @param {ContextType} context - * @returns {function(string): Promise} - */ -export function sendChatActionToTelegramWithContext(context) { - return (action) => { - return sendChatActionToTelegram(action, context.SHARE_CONTEXT.currentBotToken, context.CURRENT_CHAT_CONTEXT.chat_id); - }; -} diff --git a/src/telegram/utils.js b/src/telegram/utils.js deleted file mode 100644 index b0d6b3c7..00000000 --- a/src/telegram/utils.js +++ /dev/null @@ -1,106 +0,0 @@ -import '../types/context.js'; -import { DATABASE } from '../config/env.js'; -import { getChatAdministrators } from './telegram.js'; - -/** - * @param {string} content - * @param {TelegramMessageEntity[]} entities - * @param {string} botName - * @param {TelegramID} botId - * @returns {{isMention: boolean, content}} - */ -export function checkMention(content, entities, botName, botId) { - let isMention = false; - for (const entity of entities) { - const entityStr = content.slice(entity.offset, entity.offset + entity.length); - switch (entity.type) { - case 'mention': // "mention"适用于有用户名的普通用户 - if (entityStr === `@${botName}`) { - isMention = true; - content = content.slice(0, entity.offset) + content.slice(entity.offset + entity.length); - } - break; - case 'text_mention': // "text_mention"适用于没有用户名的用户或需要通过ID提及用户的情况 - if (`${entity.user.id}` === `${botId}`) { - isMention = true; - content = content.slice(0, entity.offset) + content.slice(entity.offset + entity.length); - } - break; - case 'bot_command': // "bot_command"适用于命令 - if (entityStr.endsWith(`@${botName}`)) { - isMention = true; - const newEntityStr = entityStr.replace(`@${botName}`, ''); - content = content.slice(0, entity.offset) + newEntityStr + content.slice(entity.offset + entity.length); - } - break; - default: - break; - } - } - return { - isMention, - content, - }; -} - -/** - * @param {TelegramPhoto[]} photos - * @param {number} offset - * @returns {string|*} - */ -export function findPhotoFileID(photos, offset) { - let sizeIndex = 0; - if (offset >= 0) { - sizeIndex = offset; - } else if (offset < 0) { - sizeIndex = photos.length + offset; - } - sizeIndex = Math.max(0, Math.min(sizeIndex, photos.length - 1)); - return photos[sizeIndex].file_id; -}; - -/** - * 获取用户在群中的角色 - * @param {ContextType} context - * @returns {Promise} - */ -export async function getChatRoleWithContext(context) { - const { - chatId, - speakerId, - groupAdminKey, - currentBotToken: token, - allMemberAreAdmin, - } = context.SHARE_CONTEXT; - - if (allMemberAreAdmin) { - return 'administrator'; - } - - let groupAdmin; - try { - groupAdmin = JSON.parse(await DATABASE.get(groupAdminKey)); - } catch (e) { - console.error(e); - } - if (!groupAdmin || !Array.isArray(groupAdmin) || groupAdmin.length === 0) { - const { result } = await getChatAdministrators(chatId, token); - if (result == null) { - return null; - } - groupAdmin = result; - // 缓存120s - await DATABASE.put( - groupAdminKey, - JSON.stringify(groupAdmin), - { expiration: (Date.now() / 1000) + 120 }, - ); - } - for (let i = 0; i < groupAdmin.length; i++) { - const user = groupAdmin[i]; - if (`${user.user.id}` === `${speakerId}`) { - return user.status; - } - } - return 'member'; -} diff --git a/src/utils/md2tgmd.js b/src/telegram/utils/md2tgmd.ts similarity index 78% rename from src/utils/md2tgmd.js rename to src/telegram/utils/md2tgmd.ts index 48c37b4d..6a92a61f 100644 --- a/src/utils/md2tgmd.js +++ b/src/telegram/utils/md2tgmd.ts @@ -1,23 +1,18 @@ /* eslint-disable regexp/no-super-linear-backtracking */ -/* eslint-disable regexp/no-unused-capturing-group */ + const escapeChars = /([_*[\]()\\~`>#+\-=|{}.!])/g; -/** - * 分割代码块文本 适配嵌套代码块 - * @param {string} text - * @returns {string} text - */ -export function escape(text) { +export function escape(text: string): string { const lines = text.split('\n'); - const stack = []; - const result = []; - let linetrim = ''; + const stack: number[] = []; + const result: string[] = []; + let lineTrim = ''; for (const [i, line] of lines.entries()) { - linetrim = line.trim(); - let startIndex; - if (/^```.+/.test(linetrim)) { + lineTrim = line.trim(); + let startIndex: number | undefined = 0; + if (/^```.+/.test(lineTrim)) { stack.push(i); - } else if (linetrim === '```') { + } else if (lineTrim === '```') { if (stack.length) { startIndex = stack.pop(); if (!stack.length) { @@ -41,20 +36,14 @@ export function escape(text) { return result.join('\n'); } -/** - * 处理转义 - * @param {string} text - * @param {string} type - * @returns {string} text - */ -function handleEscape(text, type = 'text') { +function handleEscape(text: string, type: string = 'text'): string { if (!text.trim()) { return text; } if (type === 'text') { text = text .replace(escapeChars, '\\$1') - // force all characters that need to be escaped to be escaped once. + // force all characters that need to be escaped to be escaped once. .replace(/\\\*\\\*(.*?[^\\])\\\*\\\*/g, '*$1*') // bold .replace(/\\_\\_(.*?[^\\])\\_\\_/g, '__$1__') // underline .replace(/\\_(.*?[^\\])\\_/g, '_$1_') // italic diff --git a/src/telegram/utils/send.ts b/src/telegram/utils/send.ts new file mode 100644 index 00000000..20c08cf5 --- /dev/null +++ b/src/telegram/utils/send.ts @@ -0,0 +1,163 @@ +import type * as Telegram from 'telegram-bot-api-types'; +import type { TelegramBotAPI } from '../api'; +import { createTelegramBotAPI } from '../api'; + +import { ENV } from '../../config/env'; + +class MessageContext implements Record { + chat_id: number; + message_id: number | null = null; // 当前发生的消息,用于后续编辑 + reply_to_message_id: number | null; + parse_mode: Telegram.ParseMode | null = null; + allow_sending_without_reply: boolean | null = null; + disable_web_page_preview: boolean | null = null; + + constructor(message: Telegram.Message) { + this.chat_id = message.chat.id; + if (message.chat.type === 'group' || message.chat.type === 'supergroup') { + this.reply_to_message_id = message.message_id; + this.allow_sending_without_reply = true; + } else { + this.reply_to_message_id = null; + } + } +} + +export class MessageSender { + api: TelegramBotAPI; + context: MessageContext; + + constructor(token: string, context: MessageContext) { + this.api = createTelegramBotAPI(token); + this.context = context; + } + + static from(token: string, message: Telegram.Message): MessageSender { + return new MessageSender(token, new MessageContext(message)); + } + + with(message: Telegram.Message): MessageSender { + this.context = new MessageContext(message); + return this; + } + + update(context: MessageContext | Record): MessageSender { + if (!this.context) { + this.context = context as any; + return this; + } + for (const key in context) { + (this.context as any)[key] = (context as any)[key]; + } + return this; + } + + private async sendMessage(message: string, context: MessageContext): Promise { + if (context?.message_id) { + const params: Telegram.EditMessageTextParams = { + chat_id: context.chat_id, + message_id: context.message_id, + parse_mode: context.parse_mode || undefined, + text: message, + }; + if (context.disable_web_page_preview) { + params.link_preview_options = { + is_disabled: true, + }; + } + return this.api.editMessageText(params); + } else { + const params: Telegram.SendMessageParams = { + chat_id: context.chat_id, + parse_mode: context.parse_mode || undefined, + text: message, + }; + if (context.reply_to_message_id) { + params.reply_parameters = { + message_id: context.reply_to_message_id, + chat_id: context.chat_id, + allow_sending_without_reply: context.allow_sending_without_reply || undefined, + }; + } + if (context.disable_web_page_preview) { + params.link_preview_options = { + is_disabled: true, + }; + } + return this.api.sendMessage(params); + }; + } + + private async sendLongMessage(message: string, context: MessageContext): Promise { + const chatContext = { ...context }; + const originMessage = message; + const limit = 4096; + if (message.length <= limit) { + const resp = await this.sendMessage(message, chatContext); + if (resp.status === 200) { + return resp; + } else { + message = originMessage; + // 可能格式错乱导致发送失败,使用纯文本格式发送 + chatContext.parse_mode = null; + return await this.sendMessage(message, chatContext); + } + } + message = originMessage; + // 拆分消息后可能导致markdown格式错乱,所以采用纯文本模式发送 + chatContext.parse_mode = null; + let lastMessageResponse = null; + for (let i = 0; i < message.length; i += limit) { + const msg = message.slice(i, Math.min(i + limit, message.length)); + if (i > 0) { + chatContext.message_id = null; + } + lastMessageResponse = await this.sendMessage(msg, chatContext); + if (lastMessageResponse.status !== 200) { + break; + } + } + if (lastMessageResponse === null) { + throw new Error('Send message failed'); + } + return lastMessageResponse; + } + + sendRichText(message: string, parseMode: Telegram.ParseMode | null = (ENV.DEFAULT_PARSE_MODE as Telegram.ParseMode)): Promise { + if (!this.context) { + throw new Error('Message context not set'); + } + return this.sendLongMessage(message, { + ...this.context, + parse_mode: parseMode, + }); + } + + sendPlainText(message: string): Promise { + if (!this.context) { + throw new Error('Message context not set'); + } + return this.sendLongMessage(message, { + ...this.context, + parse_mode: null, + }); + } + + sendPhoto(photo: string | Blob): Promise { + if (!this.context) { + throw new Error('Message context not set'); + } + const params: Telegram.SendPhotoParams = { + chat_id: this.context.chat_id, + photo, + }; + if (this.context.reply_to_message_id) { + params.reply_parameters = { + message_id: this.context.reply_to_message_id, + chat_id: this.context.chat_id, + allow_sending_without_reply: this.context.allow_sending_without_reply || undefined, + }; + } + return this.api.sendPhoto(params); + } +} diff --git a/src/telegram/utils/utils.ts b/src/telegram/utils/utils.ts new file mode 100644 index 00000000..68383541 --- /dev/null +++ b/src/telegram/utils/utils.ts @@ -0,0 +1,3 @@ +export function isTelegramChatTypeGroup(type: string): boolean { + return type === 'group' || type === 'supergroup'; +} diff --git a/src/types/agent.js b/src/types/agent.js deleted file mode 100644 index 005875df..00000000 --- a/src/types/agent.js +++ /dev/null @@ -1,66 +0,0 @@ -/** - * @typedef {object} LlmRequestParams - * @property {?string} [message] - 输入文本 - * @property {string[]} [images] - 图片 - */ - -/** - * @typedef {LlmRequestParams} LlmParams - * @property {?string} [prompt] - 提示 - * @property {HistoryItem[]} [history] - 历史记录 - */ - -/** - * @callback IsAgentEnable - * @param {ContextType} context - * @returns {boolean} - */ - -/** - * @callback AgentTextHandler - * @param {string} text - * @returns {Promise} - */ - -/** - * @callback ChatAgentRequest - * @param {LlmParams} params - * @param {ContextType} context - * @param {AgentTextHandler} onStream - * @returns {Promise} - */ - -/** - * @typedef {object} ChatAgent - * @property {string} name - * @property {IsAgentEnable} enable - * @property {ChatAgentRequest} request - */ - -/** - * @callback ImageAgentRequest - * @param {string} prompt - * @param {ContextType} context - * @returns {Promise} - */ - -/** - * @typedef {object} ImageAgent - * @property {string} name - * @property {IsAgentEnable} enable - * @property {ImageAgentRequest} request - */ - -/** - * @typedef {object} HistoryItem - * @property {string} role - * @property {string} content - * @property {string[]} [images] - 图片 - */ - -/** - * @typedef {object} LlmModifierResult - * @property {HistoryItem[]} history - * @property {string} message - * @typedef {function(HistoryItem[], string): LlmModifierResult} LlmModifier - */ diff --git a/src/types/context.js b/src/types/context.js deleted file mode 100644 index 91b0cb4d..00000000 --- a/src/types/context.js +++ /dev/null @@ -1,86 +0,0 @@ -/** - * 用于保存用户配置 - * @typedef {object} UserConfigType - * @property {string[]} DEFINE_KEYS - * @property {string} AI_PROVIDER - * @property {string} AI_IMAGE_PROVIDER - * @property {?string} SYSTEM_INIT_MESSAGE - * @property {string} SYSTEM_INIT_MESSAGE_ROLE - * @property {string[]} OPENAI_API_KEY - * @property {string} OPENAI_CHAT_MODEL - * @property {string} OPENAI_API_BASE - * @property {object} OPENAI_API_EXTRA_PARAMS - * @property {string} DALL_E_MODEL - * @property {string} DALL_E_IMAGE_SIZE - * @property {string} DALL_E_IMAGE_QUALITY - * @property {string} DALL_E_IMAGE_STYLE - * @property {?string} AZURE_API_KEY - * @property {?string} AZURE_COMPLETIONS_API - * @property {?string} AZURE_DALLE_API - * @property {?string} CLOUDFLARE_ACCOUNT_ID - * @property {?string} CLOUDFLARE_TOKEN - * @property {string} WORKERS_CHAT_MODEL - * @property {string} WORKERS_IMAGE_MODEL - * @property {?string} GOOGLE_API_KEY - * @property {string} GOOGLE_COMPLETIONS_API - * @property {string} GOOGLE_COMPLETIONS_MODEL - * @property {?string} MISTRAL_API_KEY - * @property {string} MISTRAL_API_BASE - * @property {string} MISTRAL_CHAT_MODEL - * @property {?string} COHERE_API_KEY - * @property {string} COHERE_API_BASE - * @property {string} COHERE_CHAT_MODEL - * @property {?string} ANTHROPIC_API_KEY - * @property {string} ANTHROPIC_API_BASE - * @property {string} ANTHROPIC_CHAT_MODEL - */ - -/** - * 用于保存全局使用的临时变量 - * @typedef {object} ShareContextType - * @property {?string} currentBotId - 当前机器人 ID - * @property {?string} currentBotToken - 当前机器人 Token - * @property {?string} currentBotName - 当前机器人名称: xxx_bot - * @property {?string} chatHistoryKey - history:chat_id:bot_id:$from_id - * @property {?string} chatLastMessageIdKey - last_message_id:$chatHistoryKey - * @property {?string} configStoreKey - user_config:chat_id:bot_id:$from_id - * @property {?string} groupAdminKey - group_admin:group_id - * @property {?string} usageKey - usage:bot_id - * @property {?string} chatType - 会话场景, private/group/supergroup 等, 来源 message.chat.type - * @property {?TelegramID} chatId - 会话 id, private 场景为发言人 id, group/supergroup 场景为群组 id - * @property {?TelegramID} speakerId - 发言人 id - * @property {?TelegramMessage} extraMessageContext - 额外消息上下文 - * @property {boolean} allMemberAreAdmin - 是否所有成员都是管理员 - */ - -/** - * 用于保存发起telegram请求的聊天上下文 - * @typedef {object} CurrentChatContextType - * @property {?TelegramID} chat_id - * @property {?TelegramID} reply_to_message_id - 如果是群组,这个值为消息ID,否则为null - * @property {?string} parse_mode - * @property {?TelegramID} message_id - 编辑消息的ID - * @property {?object} reply_markup - 回复键盘 - * @property {?boolean} allow_sending_without_reply - * @property {?boolean} disable_web_page_preview - */ - -/** - * @typedef {object} ContextType - * @property {UserConfigType} USER_CONFIG - 用户配置 - * @property {CurrentChatContextType} CURRENT_CHAT_CONTEXT - 当前聊天上下文 - * @property {ShareContextType} SHARE_CONTEXT - 共享上下文 - * @property {function(TelegramMessage): Promise} initContext - */ - -/** - * @typedef {object} APIGuard - * @property {(request: Request) => Promise} fetch - */ - -/** - * @typedef {object} KVNamespace - * @property {(key: string) => Promise} get - * @property {(key: string, value: any, options?: {expirationTtl?: number, expiration?: number}) => Promise} put - * @property {(key: string) => Promise} delete - */ diff --git a/src/types/i18n.js b/src/types/i18n.js deleted file mode 100644 index 14a6c832..00000000 --- a/src/types/i18n.js +++ /dev/null @@ -1,23 +0,0 @@ -/** - * @typedef {object} I18n - * @property {object} env - * @property {string} env.system_init_message - * @property {object} command - * @property {string} command.help.summary - * @property {string} command.help.help - * @property {string} command.help.new - * @property {string} command.help.start - * @property {string} command.help.img - * @property {string} command.help.version - * @property {string} command.help.setenv - * @property {string} command.help.setenvs - * @property {string} command.help.delenv - * @property {string} command.help.system - * @property {string} command.help.redo - * @property {string} command.help.echo - * @property {string} command.new.new_chat_start - */ - -/** - * @typedef {function (string): I18n} I18nGenerator - */ diff --git a/src/types/telegram.js b/src/types/telegram.js deleted file mode 100644 index 199b88a8..00000000 --- a/src/types/telegram.js +++ /dev/null @@ -1,67 +0,0 @@ -/** - * @typedef {(string|number)} TelegramID - */ - -/** - * @typedef {object} TelegramBaseFile - * @property {string} file_id - Unique identifier for this file. - * @property {string} file_unique_id - Unique identifier for this file, which is supposed to be the same over time and for different bots. - * @property {number} file_size - Optional. File size, if known. - * @typedef {TelegramBaseFile} TelegramPhoto - * @property {number} width - Photo width. - * @property {number} height - Photo height. - * @typedef {TelegramBaseFile} TelegramVoice - * @property {number} duration - Duration of the audio in seconds. - * @property {string} mime_type - Optional. MIME type of the file as defined by sender. - */ - -/** - * @typedef {object} TelegramUser - * @property {TelegramID} id - The ID of the user. - * @property {boolean} is_bot - True, if the user is a bot. - * @property {string} first_name - The first name of the user. - * @property {string} [last_name] - The last name of the user. - * @property {string} [username] - The username of the user. - * @property {string} [language_code] - The language code of the user. - */ - -/** - * @typedef {object} TelegramChat - * @property {TelegramID} id - The ID of the chat. - * @property {string} type - The type of the chat. - * @property {boolean} is_forum - True, if the chat is a forum. - * @property {boolean} all_members_are_administrators - True, if all members of the chat are administrators. - */ - -/** - * @typedef {object} TelegramMessageEntity - * @property {string} type - Type of the entity. - * @property {number} offset - Offset in UTF-16 code units to the start of the entity. - * @property {number} length - Length of the entity in UTF-16 code units. - * @property {string} [url] - URL of the entity. - * @property {TelegramUser} [user] - The user this entity refers to. - */ - -/** - * @typedef {object} TelegramMessage - * @property {number} message_id - The message's unique identifier. - * @property {TelegramUser} from - The user that sent the message. - * @property {TelegramChat} chat - The chat where the message was sent. - * @property {number} date - The date the message was sent. - * @property {?string} [text] - The text of the message. - * @property {?string} [caption] - The caption of the message. - * @property {TelegramPhoto[]} [photo] - An array of photos. - * @property {TelegramVoice} [voice] - The voice message. - * @property {TelegramMessageEntity[]} [entities] - An array of message entities. - * @property {TelegramMessageEntity[]} [caption_entities] - An array of caption entities. - * @property {TelegramMessage} [reply_to_message] - The message that this message is a reply to. - * @property {boolean} is_topic_message - True, if the message is a topic message. - * @property {string|number} message_thread_id - The message thread ID. - */ - -/** - * @typedef {object} TelegramWebhookRequest - * @property {TelegramID} update_id - The update's unique identifier. - * @property {TelegramMessage} message - The message - * @property {TelegramMessage} edited_message - The edited message - */ diff --git a/src/utils/cache.js b/src/utils/cache/index.ts similarity index 79% rename from src/utils/cache.js rename to src/utils/cache/index.ts index ab3e32c0..3f99ee5b 100644 --- a/src/utils/cache.js +++ b/src/utils/cache/index.ts @@ -4,18 +4,18 @@ * 1. 防止本地部署使用base64图片时,重复请求相同的图片 * 2. 上传图片telegraph后又使用base64图片时,重复请求相同的图片 */ -export class Cache { +export class Cache { + private readonly maxItems: number; + private readonly maxAge: number; + private readonly cache: Record; + constructor() { this.maxItems = 10; this.maxAge = 1000 * 60 * 60; this.cache = {}; } - /** - * @param {string} key - * @param {any} value - */ - set(key, value) { + set(key: string, value: T) { this.trim(); this.cache[key] = { value, @@ -23,19 +23,12 @@ export class Cache { }; } - /** - * @param {string} key - * @returns {any} - */ - get(key) { + get(key: string): T | undefined | null { this.trim(); return this.cache[key]?.value; } - /** - * @private - */ - trim() { + private trim() { let keys = Object.keys(this.cache); for (const key of keys) { if (Date.now() - this.cache[key].time > this.maxAge) { diff --git a/src/utils/image.js b/src/utils/image/index.ts similarity index 65% rename from src/utils/image.js rename to src/utils/image/index.ts index 60dac09a..6167ac61 100644 --- a/src/utils/image.js +++ b/src/utils/image/index.ts @@ -1,14 +1,11 @@ -import { Cache } from './cache.js'; +import { Cache } from '../cache'; -const IMAGE_CACHE = new Cache(); +const IMAGE_CACHE = new Cache(); -/** - * @param {string} url - * @returns {Promise} - */ -async function fetchImage(url) { - if (IMAGE_CACHE[url]) { - return IMAGE_CACHE.get(url); +async function fetchImage(url: string): Promise { + const cache = IMAGE_CACHE.get(url); + if (cache) { + return cache; } return fetch(url) .then(resp => resp.blob()) @@ -18,11 +15,7 @@ async function fetchImage(url) { }); } -/** - * @param {string} url - * @returns {Promise} - */ -export async function uploadImageToTelegraph(url) { +export async function uploadImageToTelegraph(url: string): Promise { if (url.startsWith('https://telegra.ph')) { return url; } @@ -34,18 +27,14 @@ export async function uploadImageToTelegraph(url) { method: 'POST', body: formData, }); - let [{ src }] = await resp.json(); + let [{ src }] = await resp.json() as any; src = `https://telegra.ph${src}`; IMAGE_CACHE.set(src, raw); return src; } -/** - * @param {string} url - * @returns {Promise} - */ -async function urlToBase64String(url) { +async function urlToBase64String(url: string): Promise { try { const { Buffer } = await import('node:buffer'); return fetchImage(url) @@ -57,15 +46,11 @@ async function urlToBase64String(url) { // compatibility_flags = [ "nodejs_compat" ] return fetchImage(url) .then(blob => blob.arrayBuffer()) - .then(buffer => btoa(String.fromCharCode.apply(null, new Uint8Array(buffer)))); + .then(buffer => btoa(String.fromCharCode.apply(null, new Uint8Array(buffer) as unknown as number[]))); } } -/** - * @param {string} base64String - * @returns {string} - */ -function getImageFormatFromBase64(base64String) { +function getImageFormatFromBase64(base64String: string): string { const firstChar = base64String.charAt(0); switch (firstChar) { case '/': @@ -81,14 +66,12 @@ function getImageFormatFromBase64(base64String) { } } -/** - * @typedef {object} DataBase64 - * @property {string} data - * @property {string} format - * @param {string} url - * @returns {Promise} - */ -export async function imageToBase64String(url) { +interface Base64DataWithFormat { + data: string; + format: string; +} + +export async function imageToBase64String(url: string): Promise { const base64String = await urlToBase64String(url); const format = getImageFormatFromBase64(base64String); return { @@ -97,10 +80,6 @@ export async function imageToBase64String(url) { }; } -/** - * @param {DataBase64} params - * @returns {string} - */ -export function renderBase64DataURI(params) { +export function renderBase64DataURI(params: Base64DataWithFormat): string { return `data:${params.format};base64,${params.data}`; } diff --git a/src/utils/router.js b/src/utils/router.js deleted file mode 100644 index 6d160868..00000000 --- a/src/utils/router.js +++ /dev/null @@ -1,156 +0,0 @@ -/** - * A simple router implementation. - * 基于itty-router的路由实现,使用更加可读的方式重写 - */ -export class Router { - constructor({ base = '', routes = [], ...other } = {}) { - this.routes = routes; - this.base = base; - Object.assign(this, other); - } - - /** - * @private - * @param {URLSearchParams} searchParams - * @returns {object} - */ - parseQueryParams(searchParams) { - const query = Object.create(null); - for (const [k, v] of searchParams) { - query[k] = k in query ? [].concat(query[k], v) : v; - } - return query; - } - - /** - * @private - * @param {string} path - * @returns {string} - */ - normalizePath(path) { - return path.replace(/\/+(\/|$)/g, '$1'); - } - - /** - * @private - * @param {string} path - * @returns {RegExp} - */ - createRouteRegex(path) { - return RegExp(`^${path - .replace(/(\/?\.?):(\w+)\+/g, '($1(?<$2>*))') // greedy params - .replace(/(\/?\.?):(\w+)/g, '($1(?<$2>[^$1/]+?))') // named params and image format - .replace(/\./g, '\\.') // dot in path - .replace(/(\/?)\*/g, '($1.*)?') // wildcard - }/*$`); - } - - /** - * @param {Request} request - * @param {...any} args - * @returns {Promise} - */ - async fetch(request, ...args) { - const url = new URL(request.url); - const reqMethod = request.method.toUpperCase(); - request.query = this.parseQueryParams(url.searchParams); - for (const [method, regex, handlers, path] of this.routes) { - let match = null; - // eslint-disable-next-line no-cond-assign - if ((method === reqMethod || method === 'ALL') && (match = url.pathname.match(regex))) { - request.params = match?.groups || {}; - request.route = path; - for (const handler of handlers) { - const response = await handler(request.proxy ?? request, ...args); - if (response != null) - return response; - } - } - } - } - - /** - * @param {string} method - * @param {string} path - * @param {...any} handlers - * @returns {Router} - */ - route(method, path, ...handlers) { - const route = this.normalizePath(this.base + path); - const regex = this.createRouteRegex(route); - this.routes.push([method.toUpperCase(), regex, handlers, route]); - return this; - } - - /** - * @param {string} path - * @param {...any} handlers - * @returns {Router} - */ - get(path, ...handlers) { - return this.route('GET', path, ...handlers); - } - - /** - * @param {string} path - * @param {...any} handlers - * @returns {Router} - */ - post(path, ...handlers) { - return this.route('POST', path, ...handlers); - } - - /** - * @param {string} path - * @param {...any} handlers - * @returns {Router} - */ - put(path, ...handlers) { - return this.route('PUT', path, ...handlers); - } - - /** - * @param {string} path - * @param {...any} handlers - * @returns {Router} - */ - delete(path, ...handlers) { - return this.route('DELETE', path, ...handlers); - } - - /** - * @param {string} path - * @param {...any} handlers - * @returns {Router} - */ - patch(path, ...handlers) { - return this.route('PATCH', path, ...handlers); - } - - /** - * @param {string} path - * @param {...any} handlers - * @returns {Router} - */ - head(path, ...handlers) { - return this.route('HEAD', path, ...handlers); - } - - /** - * @param {string} path - * @param {...any} handlers - * @returns {Router} - */ - options(path, ...handlers) { - return this.route('OPTIONS', path, ...handlers); - } - - /** - * @param {string} path - * @param {...any} handlers - * @returns {Router} - */ - all(path, ...handlers) { - return this.route('ALL', path, ...handlers); - } -} diff --git a/src/utils/router/index.ts b/src/utils/router/index.ts new file mode 100644 index 00000000..a4631494 --- /dev/null +++ b/src/utils/router/index.ts @@ -0,0 +1,107 @@ +import { errorToString } from '../../route/utils'; + +export type QueryParams = Record; +export type RouterRequest = Request & { + query?: QueryParams; + params?: Record; + route?: string; +}; + +type RouterHandler = (req: RouterRequest, ...args: any) => Promise | Response | null; + +export class Router { + private readonly routes: [string, RegExp, RouterHandler[], string][]; + private readonly base: string; + errorHandler: (req: RouterRequest, error: Error) => Promise | Response = async (req, error) => new Response(errorToString(error), { status: 500 }); + + constructor({ base = '', routes = [], ...other } = {}) { + this.routes = routes; + this.base = base; + Object.assign(this, other); + } + + private parseQueryParams(searchParams: URLSearchParams): QueryParams { + const query: QueryParams = {}; + searchParams.forEach((v, k) => { + query[k] = k in query ? [...(Array.isArray(query[k]) ? query[k] : [query[k]]), v] : v; + }); + return query; + } + + private normalizePath(path: string): string { + return path.replace(/\/+(\/|$)/g, '$1'); + } + + private createRouteRegex(path: string): RegExp { + return RegExp(`^${path + .replace(/(\/?\.?):(\w+)\+/g, '($1(?<$2>*))') // greedy params + .replace(/(\/?\.?):(\w+)/g, '($1(?<$2>[^$1/]+?))') // named params and image format + .replace(/\./g, '\\.') // dot in path + .replace(/(\/?)\*/g, '($1.*)?') // wildcard + }/*$`); + } + + async fetch(request: RouterRequest, ...args: any): Promise { + try { + const url = new URL(request.url); + const reqMethod = request.method.toUpperCase(); + request.query = this.parseQueryParams(url.searchParams); + for (const [method, regex, handlers, path] of this.routes) { + let match = null; + // eslint-disable-next-line no-cond-assign + if ((method === reqMethod || method === 'ALL') && (match = url.pathname.match(regex))) { + request.params = match?.groups || {}; + request.route = path; + for (const handler of handlers) { + const response = await handler(request, ...args); + if (response != null) { + return response; + } + } + } + } + return new Response('Not Found', { status: 404 }); + } catch (e) { + return this.errorHandler(request, e as Error); + } + } + + route(method: string, path: string, ...handlers: RouterHandler[]): Router { + const route = this.normalizePath(this.base + path); + const regex = this.createRouteRegex(route); + this.routes.push([method.toUpperCase(), regex, handlers, route]); + return this; + } + + get(path: string, ...handlers: RouterHandler[]): Router { + return this.route('GET', path, ...handlers); + } + + post(path: string, ...handlers: RouterHandler[]): Router { + return this.route('POST', path, ...handlers); + } + + put(path: string, ...handlers: RouterHandler[]): Router { + return this.route('PUT', path, ...handlers); + } + + delete(path: string, ...handlers: RouterHandler[]): Router { + return this.route('DELETE', path, ...handlers); + } + + patch(path: string, ...handlers: RouterHandler[]): Router { + return this.route('PATCH', path, ...handlers); + } + + head(path: string, ...handlers: RouterHandler[]): Router { + return this.route('HEAD', path, ...handlers); + } + + options(path: string, ...handlers: RouterHandler[]): Router { + return this.route('OPTIONS', path, ...handlers); + } + + all(path: string, ...handlers: RouterHandler[]): Router { + return this.route('ALL', path, ...handlers); + } +} diff --git a/tsconfig.json b/tsconfig.json index fcfacad0..08b0be76 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,10 +1,21 @@ { "compilerOptions": { + "target": "ESNext", + "lib": [ + "ESNext", + "dom" + ], + "rootDir": ".", + "module": "ESNext", + "moduleResolution": "bundler", + "types": ["node"], "allowJs": true, + "strict": true, "declaration": true, "declarationMap": true, - "emitDeclarationOnly": true, - "outDir": "dist" + "outDir": "dist", + "removeComments": true, + "esModuleInterop": true }, - "include": ["src/**/*", "main.js"] + "include": ["src/**/*"] } diff --git a/vite.config.js b/vite.config.js deleted file mode 100644 index a45e8dac..00000000 --- a/vite.config.js +++ /dev/null @@ -1,48 +0,0 @@ -import { execSync } from 'node:child_process'; -import * as fs from 'node:fs/promises'; -import { defineConfig } from 'vite'; -import { nodeResolve } from '@rollup/plugin-node-resolve'; -import cleanup from 'rollup-plugin-cleanup'; - -const TIMESTAMP_FILE = './dist/timestamp'; -const BUILD_INFO_JSON = './dist/buildinfo.json'; - -const COMMIT_HASH = execSync('git rev-parse --short HEAD').toString().trim(); -const TIMESTAMP = Math.floor(Date.now() / 1000); - -export default defineConfig({ - plugins: [ - nodeResolve({ - preferBuiltins: true, - }), - cleanup({ - comments: 'none', - }), - { - name: 'buildInfo', - async closeBundle() { - await fs.writeFile(TIMESTAMP_FILE, TIMESTAMP.toString()); - await fs.writeFile(BUILD_INFO_JSON, JSON.stringify({ - sha: COMMIT_HASH, - timestamp: TIMESTAMP, - })); - }, - }, - ], - build: { - target: 'esnext', - lib: { - entry: './main.js', - fileName: 'index', - formats: ['es'], - }, - minify: false, - rollupOptions: { - external: ['node:buffer'], - }, - }, - define: { - __BUILD_VERSION__: JSON.stringify(COMMIT_HASH), - __BUILD_TIMESTAMP__: TIMESTAMP.toString(), - }, -}); diff --git a/vite.config.ts b/vite.config.ts new file mode 100644 index 00000000..f5e0c84f --- /dev/null +++ b/vite.config.ts @@ -0,0 +1,54 @@ +import * as path from 'node:path'; +import type { Plugin } from 'vite'; +import { defineConfig } from 'vite'; +import { nodeResolve } from '@rollup/plugin-node-resolve'; +import cleanup from 'rollup-plugin-cleanup'; +import checker from 'vite-plugin-checker'; +import nodeExternals from 'rollup-plugin-node-externals'; +import dts from 'vite-plugin-dts'; +import { createVersionPlugin, versionDefine } from './src/adapter/version'; +import { createDockerPlugin } from './src/adapter/docker'; + +const { BUILD_MODE } = process.env; + +const plugins: Plugin[] = [ + nodeResolve({ + preferBuiltins: true, + }), + cleanup({ + comments: 'none', + extensions: ['js', 'ts'], + }), + checker({ + typescript: true, + }), + nodeExternals(), +]; + +const buildLocalMode = BUILD_MODE === 'local'; +const entry = path.resolve(__dirname, buildLocalMode ? 'src/adapter/local.ts' : 'src/index.ts'); + +if (buildLocalMode) { + plugins.push(createDockerPlugin('dist')); +} else { + plugins.push(createVersionPlugin('dist')); + plugins.push(dts({ + rollupTypes: true, + })); +} + +export default defineConfig({ + plugins, + build: { + target: 'esnext', + lib: { + entry, + fileName: 'index', + formats: buildLocalMode ? ['es'] : ['es', 'cjs'], + }, + minify: false, + }, + define: { + ...versionDefine, + }, +}); diff --git a/yarn.lock b/yarn.lock index 4a38e8b9..c8b67f26 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,30 +2,30 @@ # yarn lockfile v1 -"@antfu/eslint-config@^2.25.1": - version "2.25.1" - resolved "https://registry.yarnpkg.com/@antfu/eslint-config/-/eslint-config-2.25.1.tgz#f0ef773b6ef2f6b11b903173afe4624a93ec17b8" - integrity sha512-aWnq8kNL4MM3RjXJtMvCGhzzXiukbNn4oXT3RFVgQ2KkBmryrlCos8HW7zfF27gggSqrMX8p75wHk8zM/Mo9+Q== +"@antfu/eslint-config@^2.27.3": + version "2.27.3" + resolved "https://registry.yarnpkg.com/@antfu/eslint-config/-/eslint-config-2.27.3.tgz#96d3a1018dc1b187bf54fafdb5771f97894bc91b" + integrity sha512-Y2Vh/LvPAaYoyLwCiZHJ7p76LEIGg6debeUA4Qs+KOrlGuXLQWRmdZlC6SB33UDNzXqkFeaXAlEcYUqvYoiMKA== dependencies: - "@antfu/install-pkg" "^0.3.3" + "@antfu/install-pkg" "^0.4.1" "@clack/prompts" "^0.7.0" - "@stylistic/eslint-plugin" "^2.6.2" - "@typescript-eslint/eslint-plugin" "^8.0.1" - "@typescript-eslint/parser" "^8.0.1" - "@vitest/eslint-plugin" "^1.0.0" + "@eslint-community/eslint-plugin-eslint-comments" "^4.4.0" + "@stylistic/eslint-plugin" "^2.6.4" + "@typescript-eslint/eslint-plugin" "^8.3.0" + "@typescript-eslint/parser" "^8.3.0" + "@vitest/eslint-plugin" "^1.0.5" eslint-config-flat-gitignore "^0.1.8" - eslint-flat-config-utils "^0.3.0" + eslint-flat-config-utils "^0.3.1" eslint-merge-processors "^0.1.0" - eslint-plugin-antfu "^2.3.4" + eslint-plugin-antfu "^2.3.6" eslint-plugin-command "^0.2.3" - eslint-plugin-eslint-comments "^3.2.0" - eslint-plugin-import-x "^3.1.0" - eslint-plugin-jsdoc "^50.0.0" + eslint-plugin-import-x "^4.0.0" + eslint-plugin-jsdoc "^50.2.2" eslint-plugin-jsonc "^2.16.0" eslint-plugin-markdown "^5.1.0" eslint-plugin-n "^17.10.2" - eslint-plugin-no-only-tests "^3.1.0" - eslint-plugin-perfectionist "^3.1.3" + eslint-plugin-no-only-tests "^3.3.0" + eslint-plugin-perfectionist "^3.2.0" eslint-plugin-regexp "^2.6.0" eslint-plugin-toml "^0.11.1" eslint-plugin-unicorn "^55.0.0" @@ -43,19 +43,20 @@ yaml-eslint-parser "^1.2.3" yargs "^17.7.2" -"@antfu/install-pkg@^0.3.3": - version "0.3.4" - resolved "https://registry.yarnpkg.com/@antfu/install-pkg/-/install-pkg-0.3.4.tgz#900a57614cb92ad2a1154eccec3891e8ed2b81b9" - integrity sha512-xmYFuDsaS5hlqVSJYVIzBGnUBhZR6NpwelQx/qr9wHTenqMF14YhsexWADcFyMCKwf/vApnvLTfEEnaOBvo5SA== +"@antfu/install-pkg@^0.4.1": + version "0.4.1" + resolved "https://registry.yarnpkg.com/@antfu/install-pkg/-/install-pkg-0.4.1.tgz#d1d7f3be96ecdb41581629cafe8626d1748c0cf1" + integrity sha512-T7yB5QNG29afhWVkVq7XeIMBa5U/vs9mX69YqayXypPRmYzUmzwnYltplHmPtZ4HPCn+sQKeXW8I47wCbuBOjw== dependencies: - tinyexec "^0.1.4" + package-manager-detector "^0.2.0" + tinyexec "^0.3.0" "@antfu/utils@^0.7.10": version "0.7.10" resolved "https://registry.yarnpkg.com/@antfu/utils/-/utils-0.7.10.tgz#ae829f170158e297a9b6a28f161a8e487d00814d" integrity sha512-+562v9k4aI80m1+VuMHehNJWLOFjBnXn3tdOitzD0il5b7smkSBal4+a3oKiQTbrwMmN/TBUMDvbdoWDehgOww== -"@babel/code-frame@^7.0.0": +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13": version "7.24.7" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.24.7.tgz#882fd9e09e8ee324e496bd040401c6f046ef4465" integrity sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA== @@ -63,6 +64,11 @@ "@babel/highlight" "^7.24.7" picocolors "^1.0.0" +"@babel/helper-string-parser@^7.24.8": + version "7.24.8" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz#5b3329c9a58803d5df425e5785865881a81ca48d" + integrity sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ== + "@babel/helper-validator-identifier@^7.24.5", "@babel/helper-validator-identifier@^7.24.7": version "7.24.7" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz#75b889cfaf9e35c2aaf42cf0d72c8e91719251db" @@ -78,6 +84,22 @@ js-tokens "^4.0.0" picocolors "^1.0.0" +"@babel/parser@^7.24.7": + version "7.25.4" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.25.4.tgz#af4f2df7d02440286b7de57b1c21acfb2a6f257a" + integrity sha512-nq+eWrOgdtu3jG5Os4TQP3x3cLA8hR8TvJNjD8vnPa20WGycimcparWnLK4jJhElTK6SDyuJo1weMKO/5LpmLA== + dependencies: + "@babel/types" "^7.25.4" + +"@babel/types@^7.25.4": + version "7.25.4" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.25.4.tgz#6bcb46c72fdf1012a209d016c07f769e10adcb5f" + integrity sha512-zQ1ijeeCXVEh+aNL0RlmkPkG8HUiDcU2pzQQFjtbntgAczRASFzj4H+6+bV+dy1ntKR14I/DypeuRG1uma98iQ== + dependencies: + "@babel/helper-string-parser" "^7.24.8" + "@babel/helper-validator-identifier" "^7.24.7" + to-fast-properties "^2.0.0" + "@clack/core@^0.3.3": version "0.3.4" resolved "https://registry.yarnpkg.com/@clack/core/-/core-0.3.4.tgz#375e82fc8fe46650b37cab2f2ea8752c6b7f0450" @@ -102,35 +124,35 @@ dependencies: mime "^3.0.0" -"@cloudflare/workerd-darwin-64@1.20240725.0": - version "1.20240725.0" - resolved "https://registry.yarnpkg.com/@cloudflare/workerd-darwin-64/-/workerd-darwin-64-1.20240725.0.tgz#bb80bd26dde34cbda112a93ebc1086f8f125cf9d" - integrity sha512-KpE7eycdZ9ON+tKBuTyqZh8SdFWHGrh2Ru9LcbpeFwb7O9gDQv9ceSdoV/T598qlT0a0yVKM62R6xa5ec0UOWA== +"@cloudflare/workerd-darwin-64@1.20240821.1": + version "1.20240821.1" + resolved "https://registry.yarnpkg.com/@cloudflare/workerd-darwin-64/-/workerd-darwin-64-1.20240821.1.tgz#06b8fcd372ab5ceb44c2b30892edccaa8cd97003" + integrity sha512-CDBpfZKrSy4YrIdqS84z67r3Tzal2pOhjCsIb63IuCnvVes59/ft1qhczBzk9EffeOE2iTCrA4YBT7Sbn7USew== -"@cloudflare/workerd-darwin-arm64@1.20240725.0": - version "1.20240725.0" - resolved "https://registry.yarnpkg.com/@cloudflare/workerd-darwin-arm64/-/workerd-darwin-arm64-1.20240725.0.tgz#308775be5a5448fdf4e2e773c2a4853f320a7dd4" - integrity sha512-/UQlI04FdXLpPlDzzsWGz8TuKrMZKLowTo+8PkxgEiWIaBhE4DIDM5bwj3jM4Bs8yOLiL2ovQNpld5CnAKqA8g== +"@cloudflare/workerd-darwin-arm64@1.20240821.1": + version "1.20240821.1" + resolved "https://registry.yarnpkg.com/@cloudflare/workerd-darwin-arm64/-/workerd-darwin-arm64-1.20240821.1.tgz#b277d276d016ea41686ba44bf43735f6563bb91f" + integrity sha512-Q+9RedvNbPcEt/dKni1oN94OxbvuNAeJkgHmrLFTGF8zu21wzOhVkQeRNxcYxrMa9mfStc457NAg13OVCj2kHQ== -"@cloudflare/workerd-linux-64@1.20240725.0": - version "1.20240725.0" - resolved "https://registry.yarnpkg.com/@cloudflare/workerd-linux-64/-/workerd-linux-64-1.20240725.0.tgz#f22de097e7ef26d42d68077bb95a2343548c5b29" - integrity sha512-Z5t12qYLvHz0b3ZRBBm2HQ93RiHrAnjFfdhtjMcgJypAGkiWpOCEn2xar/WqDhMfqnk0sa8aYiYAbMAlP1WN6w== +"@cloudflare/workerd-linux-64@1.20240821.1": + version "1.20240821.1" + resolved "https://registry.yarnpkg.com/@cloudflare/workerd-linux-64/-/workerd-linux-64-1.20240821.1.tgz#9e16da0858674d1bb0ece41b482fb161f9da6646" + integrity sha512-j6z3KsPtawrscoLuP985LbqFrmsJL6q1mvSXOXTqXGODAHIzGBipHARdOjms3UQqovzvqB2lQaQsZtLBwCZxtA== -"@cloudflare/workerd-linux-arm64@1.20240725.0": - version "1.20240725.0" - resolved "https://registry.yarnpkg.com/@cloudflare/workerd-linux-arm64/-/workerd-linux-arm64-1.20240725.0.tgz#0fa0f476033ba10dc706f2d716ba7f9f75f184d0" - integrity sha512-j9gYXLOwOyNehLMzP7KxQ+Y6/nxcL9i6LTDJC6RChoaxLRbm0Y/9Otu+hfyzeNeRpt31ip6vqXZ1QQk6ygzI8A== +"@cloudflare/workerd-linux-arm64@1.20240821.1": + version "1.20240821.1" + resolved "https://registry.yarnpkg.com/@cloudflare/workerd-linux-arm64/-/workerd-linux-arm64-1.20240821.1.tgz#c9eec3f830a4bbf1f80b3c828783db8025de69d9" + integrity sha512-I9bHgZOxJQW0CV5gTdilyxzTG7ILzbTirehQWgfPx9X77E/7eIbR9sboOMgyeC69W4he0SKtpx0sYZuTJu4ERw== -"@cloudflare/workerd-windows-64@1.20240725.0": - version "1.20240725.0" - resolved "https://registry.yarnpkg.com/@cloudflare/workerd-windows-64/-/workerd-windows-64-1.20240725.0.tgz#f77ec905b28032c06a1789830aecda5ac5429635" - integrity sha512-fkrJLWNN6rrPjZ0eKJx328NVMo4BsainKxAfqaPMEd6uRwjOM8uN8V4sSLsXXP8GQMAx6hAG2hU86givS4GItg== +"@cloudflare/workerd-windows-64@1.20240821.1": + version "1.20240821.1" + resolved "https://registry.yarnpkg.com/@cloudflare/workerd-windows-64/-/workerd-windows-64-1.20240821.1.tgz#256d61b5dd327f2b86fa4a522fe977f97aa188a2" + integrity sha512-keC97QPArs6LWbPejQM7/Y8Jy8QqyaZow4/ZdsGo+QjlOLiZRDpAenfZx3CBUoWwEeFwQTl2FLO+8hV1SWFFYw== -"@cloudflare/workers-shared@0.1.0": - version "0.1.0" - resolved "https://registry.yarnpkg.com/@cloudflare/workers-shared/-/workers-shared-0.1.0.tgz#1af7d2ffbb61ca27f37e4cbc6c4713adc7223900" - integrity sha512-SyD4iw6jM4anZaG+ujgVETV4fulF2KHBOW31eavbVN7TNpk2l4aJgwY1YSPK00IKSWsoQuH2TigR446KuT5lqQ== +"@cloudflare/workers-shared@0.4.0": + version "0.4.0" + resolved "https://registry.yarnpkg.com/@cloudflare/workers-shared/-/workers-shared-0.4.0.tgz#27b982a9a09150950fef63012dead6f5d2f55f84" + integrity sha512-XAFOldVQsbxQ7mjbqX2q1dNIgcLbKSytk41pwuZTn9e0p7OeTpFTosJef8uwosL6CcOAHqcW1f1HJxyjwmtGxw== "@cspotcode/source-map-support@0.8.1": version "0.8.1" @@ -145,9 +167,9 @@ integrity sha512-N9fxCxbaBOrDkteSOzaCqwWjso5iAe+WJPsHC021JfHNj2ThInPNEF13ORDKta3llq5D1TlclODCvOvipH7bWQ== "@dprint/markdown@^0.17.1": - version "0.17.2" - resolved "https://registry.yarnpkg.com/@dprint/markdown/-/markdown-0.17.2.tgz#5c867c825d976bf63dbc6fbc57decf04d71c0193" - integrity sha512-isz8iOgA9RezXb0bkHWfJZBp59j1wKUS/lpUTNL8bBelp1Ng1/NPUPG3/WscoSlI5VO+1rSN/itOOjPAfM4Jhg== + version "0.17.6" + resolved "https://registry.yarnpkg.com/@dprint/markdown/-/markdown-0.17.6.tgz#85dfb416ebbdba5c45d2da65a747b3d61f9492e8" + integrity sha512-nDJO+7f87BFaO+41wIAo1BEXNE38ctKQxwT555345SBuYswPqipRY0ilWuSA2BVdlwg4bT/ccHymeaT1ExSnuQ== "@dprint/toml@^0.6.2": version "0.6.2" @@ -193,6 +215,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz#c7184a326533fcdf1b8ee0733e21c713b975575f" integrity sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ== +"@esbuild/aix-ppc64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.23.1.tgz#51299374de171dbd80bb7d838e1cfce9af36f353" + integrity sha512-6VhYk1diRqrhBAqpJEdjASR/+WVRtfjpqKuNw11cLiaWpAT/Uu+nokB+UJnevzy/P9C/ty6AOe0dwueMrGh/iQ== + "@esbuild/android-arm64@0.17.19": version "0.17.19" resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz#bafb75234a5d3d1b690e7c2956a599345e84a2fd" @@ -203,6 +230,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz#09d9b4357780da9ea3a7dfb833a1f1ff439b4052" integrity sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A== +"@esbuild/android-arm64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.23.1.tgz#58565291a1fe548638adb9c584237449e5e14018" + integrity sha512-xw50ipykXcLstLeWH7WRdQuysJqejuAGPd30vd1i5zSyKK3WE+ijzHmLKxdiCMtH1pHz78rOg0BKSYOSB/2Khw== + "@esbuild/android-arm@0.17.19": version "0.17.19" resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.17.19.tgz#5898f7832c2298bc7d0ab53701c57beb74d78b4d" @@ -213,6 +245,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.21.5.tgz#9b04384fb771926dfa6d7ad04324ecb2ab9b2e28" integrity sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg== +"@esbuild/android-arm@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.23.1.tgz#5eb8c652d4c82a2421e3395b808e6d9c42c862ee" + integrity sha512-uz6/tEy2IFm9RYOyvKl88zdzZfwEfKZmnX9Cj1BHjeSGNuGLuMD1kR8y5bteYmwqKm1tj8m4cb/aKEorr6fHWQ== + "@esbuild/android-x64@0.17.19": version "0.17.19" resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.17.19.tgz#658368ef92067866d95fb268719f98f363d13ae1" @@ -223,6 +260,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.21.5.tgz#29918ec2db754cedcb6c1b04de8cd6547af6461e" integrity sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA== +"@esbuild/android-x64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.23.1.tgz#ae19d665d2f06f0f48a6ac9a224b3f672e65d517" + integrity sha512-nlN9B69St9BwUoB+jkyU090bru8L0NA3yFvAd7k8dNsVH8bi9a8cUAUSEcEEgTp2z3dbEDGJGfP6VUnkQnlReg== + "@esbuild/darwin-arm64@0.17.19": version "0.17.19" resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz#584c34c5991b95d4d48d333300b1a4e2ff7be276" @@ -233,6 +275,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz#e495b539660e51690f3928af50a76fb0a6ccff2a" integrity sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ== +"@esbuild/darwin-arm64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.23.1.tgz#05b17f91a87e557b468a9c75e9d85ab10c121b16" + integrity sha512-YsS2e3Wtgnw7Wq53XXBLcV6JhRsEq8hkfg91ESVadIrzr9wO6jJDMZnCQbHm1Guc5t/CdDiFSSfWP58FNuvT3Q== + "@esbuild/darwin-x64@0.17.19": version "0.17.19" resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz#7751d236dfe6ce136cce343dce69f52d76b7f6cb" @@ -243,6 +290,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz#c13838fa57372839abdddc91d71542ceea2e1e22" integrity sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw== +"@esbuild/darwin-x64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.23.1.tgz#c58353b982f4e04f0d022284b8ba2733f5ff0931" + integrity sha512-aClqdgTDVPSEGgoCS8QDG37Gu8yc9lTHNAQlsztQ6ENetKEO//b8y31MMu2ZaPbn4kVsIABzVLXYLhCGekGDqw== + "@esbuild/freebsd-arm64@0.17.19": version "0.17.19" resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz#cacd171665dd1d500f45c167d50c6b7e539d5fd2" @@ -253,6 +305,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz#646b989aa20bf89fd071dd5dbfad69a3542e550e" integrity sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g== +"@esbuild/freebsd-arm64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.23.1.tgz#f9220dc65f80f03635e1ef96cfad5da1f446f3bc" + integrity sha512-h1k6yS8/pN/NHlMl5+v4XPfikhJulk4G+tKGFIOwURBSFzE8bixw1ebjluLOjfwtLqY0kewfjLSrO6tN2MgIhA== + "@esbuild/freebsd-x64@0.17.19": version "0.17.19" resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz#0769456eee2a08b8d925d7c00b79e861cb3162e4" @@ -263,6 +320,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz#aa615cfc80af954d3458906e38ca22c18cf5c261" integrity sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ== +"@esbuild/freebsd-x64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.23.1.tgz#69bd8511fa013b59f0226d1609ac43f7ce489730" + integrity sha512-lK1eJeyk1ZX8UklqFd/3A60UuZ/6UVfGT2LuGo3Wp4/z7eRTRYY+0xOu2kpClP+vMTi9wKOfXi2vjUpO1Ro76g== + "@esbuild/linux-arm64@0.17.19": version "0.17.19" resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz#38e162ecb723862c6be1c27d6389f48960b68edb" @@ -273,6 +335,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz#70ac6fa14f5cb7e1f7f887bcffb680ad09922b5b" integrity sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q== +"@esbuild/linux-arm64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.23.1.tgz#8050af6d51ddb388c75653ef9871f5ccd8f12383" + integrity sha512-/93bf2yxencYDnItMYV/v116zff6UyTjo4EtEQjUBeGiVpMmffDNUyD9UN2zV+V3LRV3/on4xdZ26NKzn6754g== + "@esbuild/linux-arm@0.17.19": version "0.17.19" resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz#1a2cd399c50040184a805174a6d89097d9d1559a" @@ -283,6 +350,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz#fc6fd11a8aca56c1f6f3894f2bea0479f8f626b9" integrity sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA== +"@esbuild/linux-arm@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.23.1.tgz#ecaabd1c23b701070484990db9a82f382f99e771" + integrity sha512-CXXkzgn+dXAPs3WBwE+Kvnrf4WECwBdfjfeYHpMeVxWE0EceB6vhWGShs6wi0IYEqMSIzdOF1XjQ/Mkm5d7ZdQ== + "@esbuild/linux-ia32@0.17.19": version "0.17.19" resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz#e28c25266b036ce1cabca3c30155222841dc035a" @@ -293,6 +365,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz#3271f53b3f93e3d093d518d1649d6d68d346ede2" integrity sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg== +"@esbuild/linux-ia32@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.23.1.tgz#3ed2273214178109741c09bd0687098a0243b333" + integrity sha512-VTN4EuOHwXEkXzX5nTvVY4s7E/Krz7COC8xkftbbKRYAl96vPiUssGkeMELQMOnLOJ8k3BY1+ZY52tttZnHcXQ== + "@esbuild/linux-loong64@0.17.19": version "0.17.19" resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz#0f887b8bb3f90658d1a0117283e55dbd4c9dcf72" @@ -303,6 +380,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz#ed62e04238c57026aea831c5a130b73c0f9f26df" integrity sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg== +"@esbuild/linux-loong64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.23.1.tgz#a0fdf440b5485c81b0fbb316b08933d217f5d3ac" + integrity sha512-Vx09LzEoBa5zDnieH8LSMRToj7ir/Jeq0Gu6qJ/1GcBq9GkfoEAoXvLiW1U9J1qE/Y/Oyaq33w5p2ZWrNNHNEw== + "@esbuild/linux-mips64el@0.17.19": version "0.17.19" resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz#f5d2a0b8047ea9a5d9f592a178ea054053a70289" @@ -313,6 +395,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz#e79b8eb48bf3b106fadec1ac8240fb97b4e64cbe" integrity sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg== +"@esbuild/linux-mips64el@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.23.1.tgz#e11a2806346db8375b18f5e104c5a9d4e81807f6" + integrity sha512-nrFzzMQ7W4WRLNUOU5dlWAqa6yVeI0P78WKGUo7lg2HShq/yx+UYkeNSE0SSfSure0SqgnsxPvmAUu/vu0E+3Q== + "@esbuild/linux-ppc64@0.17.19": version "0.17.19" resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz#876590e3acbd9fa7f57a2c7d86f83717dbbac8c7" @@ -323,6 +410,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz#5f2203860a143b9919d383ef7573521fb154c3e4" integrity sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w== +"@esbuild/linux-ppc64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.23.1.tgz#06a2744c5eaf562b1a90937855b4d6cf7c75ec96" + integrity sha512-dKN8fgVqd0vUIjxuJI6P/9SSSe/mB9rvA98CSH2sJnlZ/OCZWO1DJvxj8jvKTfYUdGfcq2dDxoKaC6bHuTlgcw== + "@esbuild/linux-riscv64@0.17.19": version "0.17.19" resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz#7f49373df463cd9f41dc34f9b2262d771688bf09" @@ -333,6 +425,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz#07bcafd99322d5af62f618cb9e6a9b7f4bb825dc" integrity sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA== +"@esbuild/linux-riscv64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.23.1.tgz#65b46a2892fc0d1af4ba342af3fe0fa4a8fe08e7" + integrity sha512-5AV4Pzp80fhHL83JM6LoA6pTQVWgB1HovMBsLQ9OZWLDqVY8MVobBXNSmAJi//Csh6tcY7e7Lny2Hg1tElMjIA== + "@esbuild/linux-s390x@0.17.19": version "0.17.19" resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz#e2afd1afcaf63afe2c7d9ceacd28ec57c77f8829" @@ -343,6 +440,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz#b7ccf686751d6a3e44b8627ababc8be3ef62d8de" integrity sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A== +"@esbuild/linux-s390x@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.23.1.tgz#e71ea18c70c3f604e241d16e4e5ab193a9785d6f" + integrity sha512-9ygs73tuFCe6f6m/Tb+9LtYxWR4c9yg7zjt2cYkjDbDpV/xVn+68cQxMXCjUpYwEkze2RcU/rMnfIXNRFmSoDw== + "@esbuild/linux-x64@0.17.19": version "0.17.19" resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz#8a0e9738b1635f0c53389e515ae83826dec22aa4" @@ -353,6 +455,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz#6d8f0c768e070e64309af8004bb94e68ab2bb3b0" integrity sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ== +"@esbuild/linux-x64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.23.1.tgz#d47f97391e80690d4dfe811a2e7d6927ad9eed24" + integrity sha512-EV6+ovTsEXCPAp58g2dD68LxoP/wK5pRvgy0J/HxPGB009omFPv3Yet0HiaqvrIrgPTBuC6wCH1LTOY91EO5hQ== + "@esbuild/netbsd-x64@0.17.19": version "0.17.19" resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz#c29fb2453c6b7ddef9a35e2c18b37bda1ae5c462" @@ -363,6 +470,16 @@ resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz#bbe430f60d378ecb88decb219c602667387a6047" integrity sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg== +"@esbuild/netbsd-x64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.23.1.tgz#44e743c9778d57a8ace4b72f3c6b839a3b74a653" + integrity sha512-aevEkCNu7KlPRpYLjwmdcuNz6bDFiE7Z8XC4CPqExjTvrHugh28QzUXVOZtiYghciKUacNktqxdpymplil1beA== + +"@esbuild/openbsd-arm64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.23.1.tgz#05c5a1faf67b9881834758c69f3e51b7dee015d7" + integrity sha512-3x37szhLexNA4bXhLrCC/LImN/YtWis6WXr1VESlfVtVeoFJBRINPJ3f0a/6LV8zpikqoUg4hyXw0sFBt5Cr+Q== + "@esbuild/openbsd-x64@0.17.19": version "0.17.19" resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz#95e75a391403cb10297280d524d66ce04c920691" @@ -373,6 +490,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz#99d1cf2937279560d2104821f5ccce220cb2af70" integrity sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow== +"@esbuild/openbsd-x64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.23.1.tgz#2e58ae511bacf67d19f9f2dcd9e8c5a93f00c273" + integrity sha512-aY2gMmKmPhxfU+0EdnN+XNtGbjfQgwZj43k8G3fyrDM/UdZww6xrWxmDkuz2eCZchqVeABjV5BpildOrUbBTqA== + "@esbuild/sunos-x64@0.17.19": version "0.17.19" resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz#722eaf057b83c2575937d3ffe5aeb16540da7273" @@ -383,6 +505,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz#08741512c10d529566baba837b4fe052c8f3487b" integrity sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg== +"@esbuild/sunos-x64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.23.1.tgz#adb022b959d18d3389ac70769cef5a03d3abd403" + integrity sha512-RBRT2gqEl0IKQABT4XTj78tpk9v7ehp+mazn2HbUeZl1YMdaGAQqhapjGTCe7uw7y0frDi4gS0uHzhvpFuI1sA== + "@esbuild/win32-arm64@0.17.19": version "0.17.19" resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz#9aa9dc074399288bdcdd283443e9aeb6b9552b6f" @@ -393,6 +520,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz#675b7385398411240735016144ab2e99a60fc75d" integrity sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A== +"@esbuild/win32-arm64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.23.1.tgz#84906f50c212b72ec360f48461d43202f4c8b9a2" + integrity sha512-4O+gPR5rEBe2FpKOVyiJ7wNDPA8nGzDuJ6gN4okSA1gEOYZ67N8JPk58tkWtdtPeLz7lBnY6I5L3jdsr3S+A6A== + "@esbuild/win32-ia32@0.17.19": version "0.17.19" resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz#95ad43c62ad62485e210f6299c7b2571e48d2b03" @@ -403,6 +535,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz#1bfc3ce98aa6ca9a0969e4d2af72144c59c1193b" integrity sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA== +"@esbuild/win32-ia32@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.23.1.tgz#5e3eacc515820ff729e90d0cb463183128e82fac" + integrity sha512-BcaL0Vn6QwCwre3Y717nVHZbAa4UBEigzFm6VdsVdT/MbZ38xoj1X9HPkZhbmaBGUD1W8vxAfffbDe8bA6AKnQ== + "@esbuild/win32-x64@0.17.19": version "0.17.19" resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz#8cfaf2ff603e9aabb910e9c0558c26cf32744061" @@ -413,6 +550,19 @@ resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz#acad351d582d157bb145535db2a6ff53dd514b5c" integrity sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw== +"@esbuild/win32-x64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.23.1.tgz#81fd50d11e2c32b2d6241470e3185b70c7b30699" + integrity sha512-BHpFFeslkWrXWyUPnbKm+xYYVYruCinGcftSBaa8zoF9hZO4BcSCFUvHVTtzpIY6YzUnYtuEhZ+C9iEXjxnasg== + +"@eslint-community/eslint-plugin-eslint-comments@^4.4.0": + version "4.4.0" + resolved "https://registry.yarnpkg.com/@eslint-community/eslint-plugin-eslint-comments/-/eslint-plugin-eslint-comments-4.4.0.tgz#1fedd85e7c11dcea5764ec3dee5829a2cc117821" + integrity sha512-yljsWl5Qv3IkIRmJ38h3NrHXFCm4EUl55M8doGTF6hvzvFF8kRpextgSrg2dwHev9lzBZyafCr9RelGIyQm6fw== + dependencies: + escape-string-regexp "^4.0.0" + ignore "^5.2.4" + "@eslint-community/eslint-utils@^4.1.2", "@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": version "4.4.0" resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" @@ -425,10 +575,10 @@ resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.11.0.tgz#b0ffd0312b4a3fd2d6f77237e7248a5ad3a680ae" integrity sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A== -"@eslint/config-array@^0.17.1": - version "0.17.1" - resolved "https://registry.yarnpkg.com/@eslint/config-array/-/config-array-0.17.1.tgz#d9b8b8b6b946f47388f32bedfd3adf29ca8f8910" - integrity sha512-BlYOpej8AQ8Ev9xVqroV7a02JK3SkBAaN9GfMMH9W6Ch8FlQlkjGw4Ir7+FgYwfirivAf4t+GtzuAxqfukmISA== +"@eslint/config-array@^0.18.0": + version "0.18.0" + resolved "https://registry.yarnpkg.com/@eslint/config-array/-/config-array-0.18.0.tgz#37d8fe656e0d5e3dbaea7758ea56540867fd074d" + integrity sha512-fTxvnS1sRMu3+JjXwJG0j/i4RT9u4qJ+lqS/yCGap4lH4zZGzQ7tu+xZqQmcMZq5OBZDL4QRxQzRjkWcGt8IVw== dependencies: "@eslint/object-schema" "^2.1.4" debug "^4.3.1" @@ -449,10 +599,10 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" -"@eslint/js@9.8.0": - version "9.8.0" - resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.8.0.tgz#ae9bc14bb839713c5056f5018bcefa955556d3a4" - integrity sha512-MfluB7EUfxXtv3i/++oh89uzAr4PDI4nn201hsp+qaXqsjAWzinlZEHEfPgAX4doIlKvPG/i0A9dpKxOLII8yA== +"@eslint/js@9.9.1": + version "9.9.1" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.9.1.tgz#4a97e85e982099d6c7ee8410aacb55adaa576f06" + integrity sha512-xIDQRsfg5hNBqHz04H1R3scSVwmI+KUbqjsQKHKQ1DAUSaUjYPReZZmS/5PNiKu1fUvzDd6H7DEDKACSEhu+TQ== "@eslint/object-schema@^2.1.4": version "2.1.4" @@ -464,6 +614,11 @@ resolved "https://registry.yarnpkg.com/@fastify/busboy/-/busboy-2.1.1.tgz#b9da6a878a371829a0502c9b6c1c143ef6663f4d" integrity sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA== +"@gar/promisify@^1.0.1": + version "1.1.3" + resolved "https://registry.yarnpkg.com/@gar/promisify/-/promisify-1.1.3.tgz#555193ab2e3bb3b6adc3d551c9c030d9e860daf6" + integrity sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw== + "@humanwhocodes/module-importer@^1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" @@ -474,12 +629,17 @@ resolved "https://registry.yarnpkg.com/@humanwhocodes/retry/-/retry-0.3.0.tgz#6d86b8cb322660f03d3f0aa94b99bdd8e172d570" integrity sha512-d2CGZR2o7fS6sWB7DG/3a95bGKQyHMACZ5aW8qGkkqQpUoZV6C0X7Pc7l4ZNMZkfNBf4VWNe9E1jRsf0G146Ew== +"@ioredis/commands@^1.1.1": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@ioredis/commands/-/commands-1.2.0.tgz#6d61b3097470af1fdbbe622795b8921d42018e11" + integrity sha512-Sx1pU8EM64o2BrqNpEO1CNLtKQwyhuXuqyfH7oGKCk+1a33d2r5saW8zNwm3j6BTExtjrv2BxTgzzkMwts6vGg== + "@jridgewell/resolve-uri@^3.0.3": version "3.1.2" resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== -"@jridgewell/sourcemap-codec@^1.4.10": +"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.5.0": version "1.5.0" resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz#3188bcb273a414b0d215fd22a58540b989b9409a" integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ== @@ -492,6 +652,49 @@ "@jridgewell/resolve-uri" "^3.0.3" "@jridgewell/sourcemap-codec" "^1.4.10" +"@microsoft/api-extractor-model@7.29.4": + version "7.29.4" + resolved "https://registry.yarnpkg.com/@microsoft/api-extractor-model/-/api-extractor-model-7.29.4.tgz#098f94f304db98f3cea8618fd1107946e212eaf5" + integrity sha512-LHOMxmT8/tU1IiiiHOdHFF83Qsi+V8d0kLfscG4EvQE9cafiR8blOYr8SfkQKWB1wgEilQgXJX3MIA4vetDLZw== + dependencies: + "@microsoft/tsdoc" "~0.15.0" + "@microsoft/tsdoc-config" "~0.17.0" + "@rushstack/node-core-library" "5.5.1" + +"@microsoft/api-extractor@7.47.4": + version "7.47.4" + resolved "https://registry.yarnpkg.com/@microsoft/api-extractor/-/api-extractor-7.47.4.tgz#1a66dc9d6f316fe86eef336e7f8004ab9222499b" + integrity sha512-HKm+P4VNzWwvq1Ey+Jfhhj/3MjsD+ka2hbt8L5AcRM95lu1MFOYnz3XlU7Gr79Q/ZhOb7W/imAKeYrOI0bFydg== + dependencies: + "@microsoft/api-extractor-model" "7.29.4" + "@microsoft/tsdoc" "~0.15.0" + "@microsoft/tsdoc-config" "~0.17.0" + "@rushstack/node-core-library" "5.5.1" + "@rushstack/rig-package" "0.5.3" + "@rushstack/terminal" "0.13.3" + "@rushstack/ts-command-line" "4.22.3" + lodash "~4.17.15" + minimatch "~3.0.3" + resolve "~1.22.1" + semver "~7.5.4" + source-map "~0.6.1" + typescript "5.4.2" + +"@microsoft/tsdoc-config@~0.17.0": + version "0.17.0" + resolved "https://registry.yarnpkg.com/@microsoft/tsdoc-config/-/tsdoc-config-0.17.0.tgz#82605152b3c1d3f5cd4a11697bc298437484d55d" + integrity sha512-v/EYRXnCAIHxOHW+Plb6OWuUoMotxTN0GLatnpOb1xq0KuTNw/WI3pamJx/UbsoJP5k9MCw1QxvvhPcF9pH3Zg== + dependencies: + "@microsoft/tsdoc" "0.15.0" + ajv "~8.12.0" + jju "~1.4.0" + resolve "~1.22.2" + +"@microsoft/tsdoc@0.15.0", "@microsoft/tsdoc@~0.15.0": + version "0.15.0" + resolved "https://registry.yarnpkg.com/@microsoft/tsdoc/-/tsdoc-0.15.0.tgz#f29a55df17cb6e87cfbabce33ff6a14a9f85076d" + integrity sha512-HZpPoABogPvjeJOdzCOSJsXeL/SMCBgBZMVC3X3d7YYp2gf31MfxhUoYUNwf1ERPJOnQc0wkFn9trqI6ZEdZuA== + "@nodelib/fs.scandir@2.1.5": version "2.1.5" resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" @@ -513,6 +716,22 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" +"@npmcli/fs@^1.0.0": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-1.1.1.tgz#72f719fe935e687c56a4faecf3c03d06ba593257" + integrity sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ== + dependencies: + "@gar/promisify" "^1.0.1" + semver "^7.3.5" + +"@npmcli/move-file@^1.0.1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-1.1.2.tgz#1a82c3e372f7cae9253eb66d72543d6b8685c674" + integrity sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg== + dependencies: + mkdirp "^1.0.4" + rimraf "^3.0.2" + "@pkgr/core@^0.1.0": version "0.1.1" resolved "https://registry.yarnpkg.com/@pkgr/core/-/core-0.1.1.tgz#1ec17e2edbec25c8306d424ecfbf13c7de1aaa31" @@ -530,7 +749,7 @@ is-module "^1.0.0" resolve "^1.22.1" -"@rollup/pluginutils@^5.0.1": +"@rollup/pluginutils@^5.0.1", "@rollup/pluginutils@^5.1.0": version "5.1.0" resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-5.1.0.tgz#7e53eddc8c7f483a4ad0b94afb1f7f5fd3c771e0" integrity sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g== @@ -619,66 +838,117 @@ resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.21.0.tgz#20c09cf44dcb082140cc7f439dd679fe4bba3375" integrity sha512-2jsCDZwtQvRhejHLfZ1JY6w6kEuEtfF9nzYsZxzSlNVKDX+DpsDJ+Rbjkm74nvg2rdx0gwBS+IMdvwJuq3S9pQ== -"@stylistic/eslint-plugin-js@2.6.2", "@stylistic/eslint-plugin-js@^2.6.2": - version "2.6.2" - resolved "https://registry.yarnpkg.com/@stylistic/eslint-plugin-js/-/eslint-plugin-js-2.6.2.tgz#ad4c2f35d49927fa81f4667b413a7de9640cb850" - integrity sha512-wCr/kVctAPayMU3pcOI1MKR7MoKIh6VKZU89lPklAqtJoxT+Em6RueiiARbpznUYG5eg3LymiU+aMD+aIZXdqA== +"@rushstack/node-core-library@5.5.1": + version "5.5.1" + resolved "https://registry.yarnpkg.com/@rushstack/node-core-library/-/node-core-library-5.5.1.tgz#890db37eafaab582c79eb6bf421447b82b3a964b" + integrity sha512-ZutW56qIzH8xIOlfyaLQJFx+8IBqdbVCZdnj+XT1MorQ1JqqxHse8vbCpEM+2MjsrqcbxcgDIbfggB1ZSQ2A3g== + dependencies: + ajv "~8.13.0" + ajv-draft-04 "~1.0.0" + ajv-formats "~3.0.1" + fs-extra "~7.0.1" + import-lazy "~4.0.0" + jju "~1.4.0" + resolve "~1.22.1" + semver "~7.5.4" + +"@rushstack/rig-package@0.5.3": + version "0.5.3" + resolved "https://registry.yarnpkg.com/@rushstack/rig-package/-/rig-package-0.5.3.tgz#ea4d8a3458540b1295500149c04e645f23134e5d" + integrity sha512-olzSSjYrvCNxUFZowevC3uz8gvKr3WTpHQ7BkpjtRpA3wK+T0ybep/SRUMfr195gBzJm5gaXw0ZMgjIyHqJUow== + dependencies: + resolve "~1.22.1" + strip-json-comments "~3.1.1" + +"@rushstack/terminal@0.13.3": + version "0.13.3" + resolved "https://registry.yarnpkg.com/@rushstack/terminal/-/terminal-0.13.3.tgz#9a05b8cf759f14161a49d3ccb09d556e4161caca" + integrity sha512-fc3zjXOw8E0pXS5t9vTiIPx9gHA0fIdTXsu9mT4WbH+P3mYvnrX0iAQ5a6NvyK1+CqYWBTw/wVNx7SDJkI+WYQ== + dependencies: + "@rushstack/node-core-library" "5.5.1" + supports-color "~8.1.1" + +"@rushstack/ts-command-line@4.22.3": + version "4.22.3" + resolved "https://registry.yarnpkg.com/@rushstack/ts-command-line/-/ts-command-line-4.22.3.tgz#dcc75bd25b21031b32b2758ee3f2f4973b112572" + integrity sha512-edMpWB3QhFFZ4KtSzS8WNjBgR4PXPPOVrOHMbb7kNpmQ1UFS9HdVtjCXg1H5fG+xYAbeE+TMPcVPUyX2p84STA== + dependencies: + "@rushstack/terminal" "0.13.3" + "@types/argparse" "1.0.38" + argparse "~1.0.9" + string-argv "~0.3.1" + +"@stylistic/eslint-plugin-js@2.6.4", "@stylistic/eslint-plugin-js@^2.6.4": + version "2.6.4" + resolved "https://registry.yarnpkg.com/@stylistic/eslint-plugin-js/-/eslint-plugin-js-2.6.4.tgz#52e2b89e1f0878aaeeca3be832287bc060d3a422" + integrity sha512-kx1hS3xTvzxZLdr/DCU/dLBE++vcP97sHeEFX2QXhk1Ipa4K1rzPOLw1HCbf4mU3s+7kHP5eYpDe+QteEOFLug== dependencies: "@types/eslint" "^9.6.0" acorn "^8.12.1" eslint-visitor-keys "^4.0.0" espree "^10.1.0" -"@stylistic/eslint-plugin-jsx@2.6.2": - version "2.6.2" - resolved "https://registry.yarnpkg.com/@stylistic/eslint-plugin-jsx/-/eslint-plugin-jsx-2.6.2.tgz#308b7db18056ab6d3d49273c86d613062d99616b" - integrity sha512-dSXK/fSPA938J1fBi10QmhzLKtZ/2TuyVNHQMk8jUhWfKJDleAogaSqcWNAbN8fwcoe9UWmt/3StiIf2oYC1aQ== +"@stylistic/eslint-plugin-jsx@2.6.4": + version "2.6.4" + resolved "https://registry.yarnpkg.com/@stylistic/eslint-plugin-jsx/-/eslint-plugin-jsx-2.6.4.tgz#8d02c91a26b781740bede271fbb6523cf6ab198d" + integrity sha512-bIvVhdtjmyu3S10V7QRIuawtCZSq9gRmzAX23ucjCOdSFzEwlq+di0IM0riBAvvQerrJL4SM6G3xgyPs8BSXIA== dependencies: - "@stylistic/eslint-plugin-js" "^2.6.2" + "@stylistic/eslint-plugin-js" "^2.6.4" "@types/eslint" "^9.6.0" + eslint-visitor-keys "^4.0.0" + espree "^10.1.0" estraverse "^5.3.0" picomatch "^4.0.2" -"@stylistic/eslint-plugin-plus@2.6.2": - version "2.6.2" - resolved "https://registry.yarnpkg.com/@stylistic/eslint-plugin-plus/-/eslint-plugin-plus-2.6.2.tgz#4a9c5f0f69751dffc74ca5b88ec313d79c8c0465" - integrity sha512-cANcPASfRvq3VTbbQCrSIXq+2AI0IW68PNYaZoXXS0ENlp7HDB8dmrsJnOgWCcoEvdCB8z/eWcG/eq/v5Qcl+Q== +"@stylistic/eslint-plugin-plus@2.6.4": + version "2.6.4" + resolved "https://registry.yarnpkg.com/@stylistic/eslint-plugin-plus/-/eslint-plugin-plus-2.6.4.tgz#5447d72bd6754fb74d31ff268ae2cb91037f0406" + integrity sha512-EuRvtxhf7Hv8OoMIePulP/6rBJIgPTu1l5GAm1780WcF1Cl8bOZXIn84Pdac5pNv6lVlzCOFm8MD3VE+2YROuA== dependencies: "@types/eslint" "^9.6.0" - "@typescript-eslint/utils" "^8.0.0" -"@stylistic/eslint-plugin-ts@2.6.2": - version "2.6.2" - resolved "https://registry.yarnpkg.com/@stylistic/eslint-plugin-ts/-/eslint-plugin-ts-2.6.2.tgz#9ede414361f47ad1cca91cb178609d969b0aa5c4" - integrity sha512-6OEN3VtUNxjgOvWPavnC10MByr1H4zsgwNND3rQXr5lDFv93MLUnTsH+/SH15OkuqdyJgrQILI6b9lYecb1vIg== +"@stylistic/eslint-plugin-ts@2.6.4": + version "2.6.4" + resolved "https://registry.yarnpkg.com/@stylistic/eslint-plugin-ts/-/eslint-plugin-ts-2.6.4.tgz#06f975ae5f1d866827b2495e0d93b9e005c0579c" + integrity sha512-yxL8Hj6WkObw1jfiLpBzKy5yfxY6vwlwO4miq34ySErUjUecPV5jxfVbOe4q1QDPKemQGPq93v7sAQS5PzM8lA== dependencies: - "@stylistic/eslint-plugin-js" "2.6.2" + "@stylistic/eslint-plugin-js" "2.6.4" "@types/eslint" "^9.6.0" - "@typescript-eslint/utils" "^8.0.0" + "@typescript-eslint/utils" "^8.1.0" -"@stylistic/eslint-plugin@^2.6.2": - version "2.6.2" - resolved "https://registry.yarnpkg.com/@stylistic/eslint-plugin/-/eslint-plugin-2.6.2.tgz#9ca829342e9ab38a2168a830d78c594c65aa3ce6" - integrity sha512-Ic5oFNM/25iuagob6LiIBkSI/A2y45TsyKtDtODXHRZDy52WfPfeexI6r+OH5+aWN9QGob2Bw+4JRM9/4areWw== +"@stylistic/eslint-plugin@^2.6.4": + version "2.6.4" + resolved "https://registry.yarnpkg.com/@stylistic/eslint-plugin/-/eslint-plugin-2.6.4.tgz#64071a1e3a356b0cf0adf7f9a9b9ebc24ed2cad8" + integrity sha512-euUGnjzH8EOqEYTGk9dB2OBINp0FX1nuO7/k4fO82zNRBIKZgJoDwTLM4Ce+Om6W1Qmh1PrZjCr4jh4tMEXGPQ== dependencies: - "@stylistic/eslint-plugin-js" "2.6.2" - "@stylistic/eslint-plugin-jsx" "2.6.2" - "@stylistic/eslint-plugin-plus" "2.6.2" - "@stylistic/eslint-plugin-ts" "2.6.2" + "@stylistic/eslint-plugin-js" "2.6.4" + "@stylistic/eslint-plugin-jsx" "2.6.4" + "@stylistic/eslint-plugin-plus" "2.6.4" + "@stylistic/eslint-plugin-ts" "2.6.4" "@types/eslint" "^9.6.0" +"@tootallnate/once@1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" + integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== + +"@types/argparse@1.0.38": + version "1.0.38" + resolved "https://registry.yarnpkg.com/@types/argparse/-/argparse-1.0.38.tgz#a81fd8606d481f873a3800c6ebae4f1d768a56a9" + integrity sha512-ebDJ9b0e702Yr7pWgB0jzm+CX4Srzz8RcXtLJDJB+BSccqMa36uyH/zUsSYao5+BD1ytv3k3rPYCq4mAE1hsXA== + "@types/eslint@^8.56.5": - version "8.56.11" - resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.56.11.tgz#e2ff61510a3b9454b3329fe7731e3b4c6f780041" - integrity sha512-sVBpJMf7UPo/wGecYOpk2aQya2VUGeHhe38WG7/mN5FufNSubf5VT9Uh9Uyp8/eLJpu1/tuhJ/qTo4mhSB4V4Q== + version "8.56.12" + resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.56.12.tgz#1657c814ffeba4d2f84c0d4ba0f44ca7ea1ca53a" + integrity sha512-03ruubjWyOHlmljCVoxSuNDdmfZDzsrrz0P2LeJsOXr+ZwFQ+0yQIwNCwt/GYhV7Z31fgtXJTAEs+FYlEL851g== dependencies: "@types/estree" "*" "@types/json-schema" "*" "@types/eslint@^9.6.0": - version "9.6.0" - resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-9.6.0.tgz#51d4fe4d0316da9e9f2c80884f2c20ed5fb022ff" - integrity sha512-gi6WQJ7cHRgZxtkQEoyHMppPjq9Kxo5Tjn2prSKDSmZrCz8TZ3jSRCeTJm+WoM+oB0WG37bRqLzaaU3q7JypGg== + version "9.6.1" + resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-9.6.1.tgz#d5795ad732ce81715f27f75da913004a56751584" + integrity sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag== dependencies: "@types/estree" "*" "@types/json-schema" "*" @@ -708,11 +978,18 @@ "@types/node" "*" "@types/node@*": - version "20.14.11" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.14.11.tgz#09b300423343460455043ddd4d0ded6ac579b74b" - integrity sha512-kprQpL8MMeszbz6ojB5/tU8PLN4kesnN8Gjzw349rDlNgsSzg90lAVj3llK99Dh7JON+t9AuscPPFW6mPbTnSA== + version "22.5.0" + resolved "https://registry.yarnpkg.com/@types/node/-/node-22.5.0.tgz#10f01fe9465166b4cab72e75f60d8b99d019f958" + integrity sha512-DkFrJOe+rfdHTqqMg0bSNlGlQ85hSoh2TPzZyhHsXnMtligRWpxUySiyw8FY14ITt24HVCiQPWxS3KO/QlGmWg== + dependencies: + undici-types "~6.19.2" + +"@types/node@^22.5.1": + version "22.5.1" + resolved "https://registry.yarnpkg.com/@types/node/-/node-22.5.1.tgz#de01dce265f6b99ed32b295962045d10b5b99560" + integrity sha512-KkHsxej0j9IW1KKOOAA/XBA0z08UFSrRQHErzEfA3Vgq57eXIMYboIlHJuYIfd+lwCQjtKqUu3UnmKbtUc9yRw== dependencies: - undici-types "~5.26.4" + undici-types "~6.19.2" "@types/normalize-package-data@^2.4.0": version "2.4.4" @@ -725,79 +1002,84 @@ integrity sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q== "@types/unist@^2", "@types/unist@^2.0.2": - version "2.0.10" - resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.10.tgz#04ffa7f406ab628f7f7e97ca23e290cd8ab15efc" - integrity sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA== + version "2.0.11" + resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.11.tgz#11af57b127e32487774841f7a4e54eab166d03c4" + integrity sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA== -"@typescript-eslint/eslint-plugin@^8.0.1": - version "8.1.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.1.0.tgz#3c020deeaaba82a6f741d00dacf172c53be4911f" - integrity sha512-LlNBaHFCEBPHyD4pZXb35mzjGkuGKXU5eeCA1SxvHfiRES0E82dOounfVpL4DCqYvJEKab0bZIA0gCRpdLKkCw== +"@typescript-eslint/eslint-plugin@^8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.3.0.tgz#726627fad16d41d20539637efee8c2329fe6be32" + integrity sha512-FLAIn63G5KH+adZosDYiutqkOkYEx0nvcwNNfJAf+c7Ae/H35qWwTYvPZUKFj5AS+WfHG/WJJfWnDnyNUlp8UA== dependencies: "@eslint-community/regexpp" "^4.10.0" - "@typescript-eslint/scope-manager" "8.1.0" - "@typescript-eslint/type-utils" "8.1.0" - "@typescript-eslint/utils" "8.1.0" - "@typescript-eslint/visitor-keys" "8.1.0" + "@typescript-eslint/scope-manager" "8.3.0" + "@typescript-eslint/type-utils" "8.3.0" + "@typescript-eslint/utils" "8.3.0" + "@typescript-eslint/visitor-keys" "8.3.0" graphemer "^1.4.0" ignore "^5.3.1" natural-compare "^1.4.0" ts-api-utils "^1.3.0" -"@typescript-eslint/parser@^8.0.1": - version "8.1.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.1.0.tgz#b7e77f5fa212df59eba51ecd4986f194bccc2303" - integrity sha512-U7iTAtGgJk6DPX9wIWPPOlt1gO57097G06gIcl0N0EEnNw8RGD62c+2/DiP/zL7KrkqnnqF7gtFGR7YgzPllTA== +"@typescript-eslint/parser@^8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.3.0.tgz#3c72c32bc909cb91ce3569e7d11d729ad84deafa" + integrity sha512-h53RhVyLu6AtpUzVCYLPhZGL5jzTD9fZL+SYf/+hYOx2bDkyQXztXSc4tbvKYHzfMXExMLiL9CWqJmVz6+78IQ== dependencies: - "@typescript-eslint/scope-manager" "8.1.0" - "@typescript-eslint/types" "8.1.0" - "@typescript-eslint/typescript-estree" "8.1.0" - "@typescript-eslint/visitor-keys" "8.1.0" + "@typescript-eslint/scope-manager" "8.3.0" + "@typescript-eslint/types" "8.3.0" + "@typescript-eslint/typescript-estree" "8.3.0" + "@typescript-eslint/visitor-keys" "8.3.0" debug "^4.3.4" -"@typescript-eslint/scope-manager@7.18.0": - version "7.18.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-7.18.0.tgz#c928e7a9fc2c0b3ed92ab3112c614d6bd9951c83" - integrity sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA== +"@typescript-eslint/scope-manager@8.2.0": + version "8.2.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.2.0.tgz#4a4bd7e7df5522acc8795c3b6f21e8c41b951138" + integrity sha512-OFn80B38yD6WwpoHU2Tz/fTz7CgFqInllBoC3WP+/jLbTb4gGPTy9HBSTsbDWkMdN55XlVU0mMDYAtgvlUspGw== dependencies: - "@typescript-eslint/types" "7.18.0" - "@typescript-eslint/visitor-keys" "7.18.0" + "@typescript-eslint/types" "8.2.0" + "@typescript-eslint/visitor-keys" "8.2.0" -"@typescript-eslint/scope-manager@8.1.0": - version "8.1.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.1.0.tgz#dd8987d2efebb71d230a1c71d82e84a7aead5c3d" - integrity sha512-DsuOZQji687sQUjm4N6c9xABJa7fjvfIdjqpSIIVOgaENf2jFXiM9hIBZOL3hb6DHK9Nvd2d7zZnoMLf9e0OtQ== +"@typescript-eslint/scope-manager@8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.3.0.tgz#834301d2e70baf924c26818b911bdc40086f7468" + integrity sha512-mz2X8WcN2nVu5Hodku+IR8GgCOl4C0G/Z1ruaWN4dgec64kDBabuXyPAr+/RgJtumv8EEkqIzf3X2U5DUKB2eg== dependencies: - "@typescript-eslint/types" "8.1.0" - "@typescript-eslint/visitor-keys" "8.1.0" + "@typescript-eslint/types" "8.3.0" + "@typescript-eslint/visitor-keys" "8.3.0" -"@typescript-eslint/type-utils@8.1.0": - version "8.1.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.1.0.tgz#dbf5a4308166dfc37a36305390dea04a3a3b5048" - integrity sha512-oLYvTxljVvsMnldfl6jIKxTaU7ok7km0KDrwOt1RHYu6nxlhN3TIx8k5Q52L6wR33nOwDgM7VwW1fT1qMNfFIA== +"@typescript-eslint/type-utils@8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.3.0.tgz#c1ae6af8c21a27254321016b052af67ddb44a9ac" + integrity sha512-wrV6qh//nLbfXZQoj32EXKmwHf4b7L+xXLrP3FZ0GOUU72gSvLjeWUl5J5Ue5IwRxIV1TfF73j/eaBapxx99Lg== dependencies: - "@typescript-eslint/typescript-estree" "8.1.0" - "@typescript-eslint/utils" "8.1.0" + "@typescript-eslint/typescript-estree" "8.3.0" + "@typescript-eslint/utils" "8.3.0" debug "^4.3.4" ts-api-utils "^1.3.0" -"@typescript-eslint/types@7.18.0", "@typescript-eslint/types@^7.2.0": +"@typescript-eslint/types@8.2.0", "@typescript-eslint/types@^8.1.0": + version "8.2.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.2.0.tgz#dfe9895a2812f7c6bf7af863054c22a67060420c" + integrity sha512-6a9QSK396YqmiBKPkJtxsgZZZVjYQ6wQ/TlI0C65z7vInaETuC6HAHD98AGLC8DyIPqHytvNuS8bBVvNLKyqvQ== + +"@typescript-eslint/types@8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.3.0.tgz#378e62447c2d7028236e55a81d3391026600563b" + integrity sha512-y6sSEeK+facMaAyixM36dQ5NVXTnKWunfD1Ft4xraYqxP0lC0POJmIaL/mw72CUMqjY9qfyVfXafMeaUj0noWw== + +"@typescript-eslint/types@^7.2.0": version "7.18.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-7.18.0.tgz#b90a57ccdea71797ffffa0321e744f379ec838c9" integrity sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ== -"@typescript-eslint/types@8.1.0", "@typescript-eslint/types@^8.0.1": - version "8.1.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.1.0.tgz#fbf1eaa668a7e444ac507732ca9d3c3468e5db9c" - integrity sha512-q2/Bxa0gMOu/2/AKALI0tCKbG2zppccnRIRCW6BaaTlRVaPKft4oVYPp7WOPpcnsgbr0qROAVCVKCvIQ0tbWog== - -"@typescript-eslint/typescript-estree@7.18.0": - version "7.18.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-7.18.0.tgz#b5868d486c51ce8f312309ba79bdb9f331b37931" - integrity sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA== +"@typescript-eslint/typescript-estree@8.2.0": + version "8.2.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.2.0.tgz#fbdb93a1c7ac7f1f96ae2de4fc97cd64c60ae894" + integrity sha512-kiG4EDUT4dImplOsbh47B1QnNmXSoUqOjWDvCJw/o8LgfD0yr7k2uy54D5Wm0j4t71Ge1NkynGhpWdS0dEIAUA== dependencies: - "@typescript-eslint/types" "7.18.0" - "@typescript-eslint/visitor-keys" "7.18.0" + "@typescript-eslint/types" "8.2.0" + "@typescript-eslint/visitor-keys" "8.2.0" debug "^4.3.4" globby "^11.1.0" is-glob "^4.0.3" @@ -805,60 +1087,132 @@ semver "^7.6.0" ts-api-utils "^1.3.0" -"@typescript-eslint/typescript-estree@8.1.0": - version "8.1.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.1.0.tgz#c44e5667683c0bb5caa43192e27de6a994f4e4c4" - integrity sha512-NTHhmufocEkMiAord/g++gWKb0Fr34e9AExBRdqgWdVBaKoei2dIyYKD9Q0jBnvfbEA5zaf8plUFMUH6kQ0vGg== +"@typescript-eslint/typescript-estree@8.3.0", "@typescript-eslint/typescript-estree@^8.1.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.3.0.tgz#3e3d38af101ba61a8568f034733b72bfc9f176b9" + integrity sha512-Mq7FTHl0R36EmWlCJWojIC1qn/ZWo2YiWYc1XVtasJ7FIgjo0MVv9rZWXEE7IK2CGrtwe1dVOxWwqXUdNgfRCA== dependencies: - "@typescript-eslint/types" "8.1.0" - "@typescript-eslint/visitor-keys" "8.1.0" + "@typescript-eslint/types" "8.3.0" + "@typescript-eslint/visitor-keys" "8.3.0" debug "^4.3.4" - globby "^11.1.0" + fast-glob "^3.3.2" is-glob "^4.0.3" minimatch "^9.0.4" semver "^7.6.0" ts-api-utils "^1.3.0" -"@typescript-eslint/utils@8.1.0", "@typescript-eslint/utils@^8.0.0", "@typescript-eslint/utils@^8.0.1": - version "8.1.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.1.0.tgz#a922985a43d2560ce0d293be79148fa80c1325e0" - integrity sha512-ypRueFNKTIFwqPeJBfeIpxZ895PQhNyH4YID6js0UoBImWYoSjBsahUn9KMiJXh94uOjVBgHD9AmkyPsPnFwJA== +"@typescript-eslint/utils@8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.3.0.tgz#b10972319deac5959c7a7075d0cf2b5e1de7ec08" + integrity sha512-F77WwqxIi/qGkIGOGXNBLV7nykwfjLsdauRB/DOFPdv6LTF3BHHkBpq81/b5iMPSF055oO2BiivDJV4ChvNtXA== dependencies: "@eslint-community/eslint-utils" "^4.4.0" - "@typescript-eslint/scope-manager" "8.1.0" - "@typescript-eslint/types" "8.1.0" - "@typescript-eslint/typescript-estree" "8.1.0" + "@typescript-eslint/scope-manager" "8.3.0" + "@typescript-eslint/types" "8.3.0" + "@typescript-eslint/typescript-estree" "8.3.0" -"@typescript-eslint/utils@^7.4.0": - version "7.18.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-7.18.0.tgz#bca01cde77f95fc6a8d5b0dbcbfb3d6ca4be451f" - integrity sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw== +"@typescript-eslint/utils@^8.1.0": + version "8.2.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.2.0.tgz#02d442285925f28d520587185f295f932702e733" + integrity sha512-O46eaYKDlV3TvAVDNcoDzd5N550ckSe8G4phko++OCSC1dYIb9LTc3HDGYdWqWIAT5qDUKphO6sd9RrpIJJPfg== dependencies: "@eslint-community/eslint-utils" "^4.4.0" - "@typescript-eslint/scope-manager" "7.18.0" - "@typescript-eslint/types" "7.18.0" - "@typescript-eslint/typescript-estree" "7.18.0" + "@typescript-eslint/scope-manager" "8.2.0" + "@typescript-eslint/types" "8.2.0" + "@typescript-eslint/typescript-estree" "8.2.0" -"@typescript-eslint/visitor-keys@7.18.0": - version "7.18.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-7.18.0.tgz#0564629b6124d67607378d0f0332a0495b25e7d7" - integrity sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg== +"@typescript-eslint/visitor-keys@8.2.0": + version "8.2.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.2.0.tgz#f6abb3b6508898a117175ddc11f9b9869cc96834" + integrity sha512-sbgsPMW9yLvS7IhCi8IpuK1oBmtbWUNP+hBdwl/I9nzqVsszGnNGti5r9dUtF5RLivHUFFIdRvLiTsPhzSyJ3Q== dependencies: - "@typescript-eslint/types" "7.18.0" + "@typescript-eslint/types" "8.2.0" eslint-visitor-keys "^3.4.3" -"@typescript-eslint/visitor-keys@8.1.0": - version "8.1.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.1.0.tgz#ab2b3a9699a8ddebf0c205e133f114c1fed9daad" - integrity sha512-ba0lNI19awqZ5ZNKh6wCModMwoZs457StTebQ0q1NP58zSi2F6MOZRXwfKZy+jB78JNJ/WH8GSh2IQNzXX8Nag== +"@typescript-eslint/visitor-keys@8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.3.0.tgz#320d747d107af1eef1eb43fbc4ccdbddda13068b" + integrity sha512-RmZwrTbQ9QveF15m/Cl28n0LXD6ea2CjkhH5rQ55ewz3H24w+AMCJHPVYaZ8/0HoG8Z3cLLFFycRXxeO2tz9FA== dependencies: - "@typescript-eslint/types" "8.1.0" + "@typescript-eslint/types" "8.3.0" eslint-visitor-keys "^3.4.3" -"@vitest/eslint-plugin@^1.0.0": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@vitest/eslint-plugin/-/eslint-plugin-1.0.2.tgz#73e30720bf691811df1e311ae3a24f76fac92085" - integrity sha512-lt7O8NTzDf7H8mbLuvsAdolnpibgv8lo8nRshRr2f2vNFONB3u2MEL9Jt12n9qDpLeT1Ap03Kf7RVH+PF71G1w== +"@vitest/eslint-plugin@^1.0.5": + version "1.0.5" + resolved "https://registry.yarnpkg.com/@vitest/eslint-plugin/-/eslint-plugin-1.0.5.tgz#1a0070d4691e4548789ef54c69899a883d5b0807" + integrity sha512-F4zlKv5S/aG3kiFyJHbkbInKfGuIs3muDnpNfr62g8tV0ALbP/MYjLKWN92olLCtWUb2cKl0pew0gKkkoHEUqw== + +"@volar/language-core@2.4.0", "@volar/language-core@~2.4.0-alpha.18": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@volar/language-core/-/language-core-2.4.0.tgz#962efc66ff9198ee2412786e99528bf77cdad100" + integrity sha512-FTla+khE+sYK0qJP+6hwPAAUwiNHVMph4RUXpxf/FIPKUP61NFrVZorml4mjFShnueR2y9/j8/vnh09YwVdH7A== + dependencies: + "@volar/source-map" "2.4.0" + +"@volar/source-map@2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@volar/source-map/-/source-map-2.4.0.tgz#b6690f06c600eaf587bbc81b0153203e4f6db72a" + integrity sha512-2ceY8/NEZvN6F44TXw2qRP6AQsvCYhV2bxaBPWxV9HqIfkbRydSksTFObCF1DBDNBfKiZTS8G/4vqV6cvjdOIQ== + +"@volar/typescript@^2.3.4", "@volar/typescript@~2.4.0-alpha.18": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@volar/typescript/-/typescript-2.4.0.tgz#f909d20dfe43dd846d30695f6e5467276ff4418e" + integrity sha512-9zx3lQWgHmVd+JRRAHUSRiEhe4TlzL7U7e6ulWXOxHH/WNYxzKwCvZD7WYWEZFdw4dHfTD9vUR0yPQO6GilCaQ== + dependencies: + "@volar/language-core" "2.4.0" + path-browserify "^1.0.1" + vscode-uri "^3.0.8" + +"@vue/compiler-core@3.4.38": + version "3.4.38" + resolved "https://registry.yarnpkg.com/@vue/compiler-core/-/compiler-core-3.4.38.tgz#326dfe3c92fa2b0f1dc9b39a948a231980253496" + integrity sha512-8IQOTCWnLFqfHzOGm9+P8OPSEDukgg3Huc92qSG49if/xI2SAwLHQO2qaPQbjCWPBcQoO1WYfXfTACUrWV3c5A== + dependencies: + "@babel/parser" "^7.24.7" + "@vue/shared" "3.4.38" + entities "^4.5.0" + estree-walker "^2.0.2" + source-map-js "^1.2.0" + +"@vue/compiler-dom@^3.4.0": + version "3.4.38" + resolved "https://registry.yarnpkg.com/@vue/compiler-dom/-/compiler-dom-3.4.38.tgz#90348fac1130e0bbd408b650635cb626b3b9df06" + integrity sha512-Osc/c7ABsHXTsETLgykcOwIxFktHfGSUDkb05V61rocEfsFDcjDLH/IHJSNJP+/Sv9KeN2Lx1V6McZzlSb9EhQ== + dependencies: + "@vue/compiler-core" "3.4.38" + "@vue/shared" "3.4.38" + +"@vue/compiler-vue2@^2.7.16": + version "2.7.16" + resolved "https://registry.yarnpkg.com/@vue/compiler-vue2/-/compiler-vue2-2.7.16.tgz#2ba837cbd3f1b33c2bc865fbe1a3b53fb611e249" + integrity sha512-qYC3Psj9S/mfu9uVi5WvNZIzq+xnXMhOwbTFKKDD7b1lhpnn71jXSFdTQ+WsIEk0ONCd7VV2IMm7ONl6tbQ86A== + dependencies: + de-indent "^1.0.2" + he "^1.2.0" + +"@vue/language-core@2.0.29": + version "2.0.29" + resolved "https://registry.yarnpkg.com/@vue/language-core/-/language-core-2.0.29.tgz#19462d786cd7a1c21dbe575b46970a57094e0357" + integrity sha512-o2qz9JPjhdoVj8D2+9bDXbaI4q2uZTHQA/dbyZT4Bj1FR9viZxDJnLcKVHfxdn6wsOzRgpqIzJEEmSSvgMvDTQ== + dependencies: + "@volar/language-core" "~2.4.0-alpha.18" + "@vue/compiler-dom" "^3.4.0" + "@vue/compiler-vue2" "^2.7.16" + "@vue/shared" "^3.4.0" + computeds "^0.0.1" + minimatch "^9.0.3" + muggle-string "^0.4.1" + path-browserify "^1.0.1" + +"@vue/shared@3.4.38", "@vue/shared@^3.4.0": + version "3.4.38" + resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.4.38.tgz#552a6770098bfd556fa3e2c686c9d3b4f4cd94c2" + integrity sha512-q0xCiLkuWWQLzVrecPb0RMsNWyxICOjPrcrwxTUEHb1fsnvni4dcuyG7RT/Ie7VPTvnjzIaWzRMUBsrqNj/hhw== + +abbrev@1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== acorn-jsx@^5.3.2: version "5.3.2" @@ -877,6 +1231,47 @@ acorn@^8.11.0, acorn@^8.11.3, acorn@^8.12.0, acorn@^8.12.1, acorn@^8.5.0, acorn@ resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.12.1.tgz#71616bdccbe25e27a54439e0046e89ca76df2248" integrity sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg== +agent-base@6, agent-base@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" + integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== + dependencies: + debug "4" + +agent-base@^7.0.2: + version "7.1.1" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-7.1.1.tgz#bdbded7dfb096b751a2a087eeeb9664725b2e317" + integrity sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA== + dependencies: + debug "^4.3.4" + +agentkeepalive@^4.1.3: + version "4.5.0" + resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.5.0.tgz#2673ad1389b3c418c5a20c5d7364f93ca04be923" + integrity sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew== + dependencies: + humanize-ms "^1.2.1" + +aggregate-error@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" + integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== + dependencies: + clean-stack "^2.0.0" + indent-string "^4.0.0" + +ajv-draft-04@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/ajv-draft-04/-/ajv-draft-04-1.0.0.tgz#3b64761b268ba0b9e668f0b41ba53fce0ad77fc8" + integrity sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw== + +ajv-formats@~3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-3.0.1.tgz#3d5dc762bca17679c3c2ea7e90ad6b7532309578" + integrity sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ== + dependencies: + ajv "^8.0.0" + ajv@^6.12.4: version "6.12.6" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" @@ -887,6 +1282,43 @@ ajv@^6.12.4: json-schema-traverse "^0.4.1" uri-js "^4.2.2" +ajv@^8.0.0: + version "8.17.1" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.17.1.tgz#37d9a5c776af6bc92d7f4f9510eba4c0a60d11a6" + integrity sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g== + dependencies: + fast-deep-equal "^3.1.3" + fast-uri "^3.0.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + +ajv@~8.12.0: + version "8.12.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.12.0.tgz#d1a0527323e22f53562c567c00991577dfbe19d1" + integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== + dependencies: + fast-deep-equal "^3.1.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + uri-js "^4.2.2" + +ajv@~8.13.0: + version "8.13.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.13.0.tgz#a3939eaec9fb80d217ddf0c3376948c023f28c91" + integrity sha512-PRA911Blj99jR5RMeTunVbNXMF6Lp4vZXnk5GQjcnUWUTsrXtekg/pnmFFI2u/I36Y/2bITGS30GZCXei6uNkA== + dependencies: + fast-deep-equal "^3.1.3" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + uri-js "^4.4.1" + +ansi-escapes@^4.3.0: + version "4.3.2" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" + integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== + dependencies: + type-fest "^0.21.3" + ansi-regex@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" @@ -914,16 +1346,36 @@ anymatch@~3.1.2: normalize-path "^3.0.0" picomatch "^2.0.4" +"aproba@^1.0.3 || ^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" + integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== + are-docs-informative@^0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/are-docs-informative/-/are-docs-informative-0.0.2.tgz#387f0e93f5d45280373d387a59d34c96db321963" integrity sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig== +are-we-there-yet@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz#679df222b278c64f2cdba1175cdc00b0d96164bd" + integrity sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg== + dependencies: + delegates "^1.0.0" + readable-stream "^3.6.0" + argparse@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== +argparse@~1.0.9: + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + array-union@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" @@ -941,11 +1393,32 @@ balanced-match@^1.0.0: resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== +base64-js@^1.3.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + binary-extensions@^2.0.0: version "2.3.0" resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522" integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw== +bindings@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" + integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== + dependencies: + file-uri-to-path "1.0.0" + +bl@^4.0.3: + version "4.1.0" + resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" + integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== + dependencies: + buffer "^5.5.0" + inherits "^2.0.4" + readable-stream "^3.4.0" + blake3-wasm@^2.1.5: version "2.1.5" resolved "https://registry.yarnpkg.com/blake3-wasm/-/blake3-wasm-2.1.5.tgz#b22dbb84bc9419ed0159caa76af4b1b132e6ba52" @@ -988,20 +1461,52 @@ browserslist@^4.23.3: node-releases "^2.0.18" update-browserslist-db "^1.1.0" +buffer@^5.5.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" + integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.1.13" + builtin-modules@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.3.0.tgz#cae62812b89801e9656336e46223e030386be7b6" integrity sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw== +cacache@^15.2.0: + version "15.3.0" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-15.3.0.tgz#dc85380fb2f556fe3dda4c719bfa0ec875a7f1eb" + integrity sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ== + dependencies: + "@npmcli/fs" "^1.0.0" + "@npmcli/move-file" "^1.0.1" + chownr "^2.0.0" + fs-minipass "^2.0.0" + glob "^7.1.4" + infer-owner "^1.0.4" + lru-cache "^6.0.0" + minipass "^3.1.1" + minipass-collect "^1.0.2" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.2" + mkdirp "^1.0.3" + p-map "^4.0.0" + promise-inflight "^1.0.1" + rimraf "^3.0.2" + ssri "^8.0.1" + tar "^6.0.2" + unique-filename "^1.1.1" + callsites@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== caniuse-lite@^1.0.30001646: - version "1.0.30001651" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001651.tgz#52de59529e8b02b1aedcaaf5c05d9e23c0c28138" - integrity sha512-9Cf+Xv1jJNe1xPZLGuUXLNkE1BoDkqRqYyFJ9TDYSqhduqA4hu4oR9HluGoWYQC/aj8WHjsGVV+bwkh0+tegRg== + version "1.0.30001653" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001653.tgz#b8af452f8f33b1c77f122780a4aecebea0caca56" + integrity sha512-XGWQVB8wFQ2+9NZwZ10GxTYC5hk0Fa+q8cSkr0tgvMhYhMHP/QC+WTgrePMDBWiWc/pV+1ik82Al20XOK25Gcw== capnp-ts@^0.7.0: version "0.7.0" @@ -1020,7 +1525,7 @@ chalk@^2.4.2: escape-string-regexp "^1.0.5" supports-color "^5.3.0" -chalk@^4.0.0: +chalk@^4.0.0, chalk@^4.1.1: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== @@ -1043,7 +1548,7 @@ character-reference-invalid@^1.0.0: resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz#083329cda0eae272ab3dbbf37e9a382c13af1560" integrity sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg== -chokidar@^3.5.3: +chokidar@^3.5.1, chokidar@^3.5.3: version "3.6.0" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== @@ -1058,6 +1563,16 @@ chokidar@^3.5.3: optionalDependencies: fsevents "~2.3.2" +chownr@^1.1.1: + version "1.1.4" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" + integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== + +chownr@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" + integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== + ci-info@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-4.0.0.tgz#65466f8b280fc019b9f50a5388115d17a63a44f2" @@ -1070,6 +1585,11 @@ clean-regexp@^1.0.0: dependencies: escape-string-regexp "^1.0.5" +clean-stack@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" + integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== + cliui@^8.0.1: version "8.0.1" resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" @@ -1079,6 +1599,22 @@ cliui@^8.0.1: strip-ansi "^6.0.1" wrap-ansi "^7.0.0" +cloudflare-worker-adapter@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/cloudflare-worker-adapter/-/cloudflare-worker-adapter-1.3.0.tgz#d89728b82d2c65e4be23192936fa003e056e0273" + integrity sha512-ZA0b5RDR3dZUcOOxxBcmTj59DeoTjBrKNPecG0TxatIe0q1+dwUd1gT1cOfy7WVOzrdh/SF10EfZSZhAm6B1ag== + dependencies: + https-proxy-agent "^7.0.5" + ioredis "^5.4.1" + node-fetch "^3.3.2" + sqlite3 "^5" + toml "^3.0.0" + +cluster-key-slot@^1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/cluster-key-slot/-/cluster-key-slot-1.1.2.tgz#88ddaa46906e303b5de30d3153b7d9fe0a0c19ac" + integrity sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA== + color-convert@^1.9.0: version "1.9.3" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" @@ -1103,11 +1639,31 @@ color-name@~1.1.4: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== +color-support@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" + integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== + +commander@^8.0.0: + version "8.3.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66" + integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== + comment-parser@1.4.1, comment-parser@^1.4.0: version "1.4.1" resolved "https://registry.yarnpkg.com/comment-parser/-/comment-parser-1.4.1.tgz#bdafead37961ac079be11eb7ec65c4d021eaf9cc" integrity sha512-buhp5kePrmda3vhc5B9t7pUQXAb2Tnd0qgpkIhPhkHXxJpiPJ11H0ZEU0oBpJ2QztSbzG/ZxMj/CHsYJqRHmyg== +compare-versions@^6.1.1: + version "6.1.1" + resolved "https://registry.yarnpkg.com/compare-versions/-/compare-versions-6.1.1.tgz#7af3cc1099ba37d244b3145a9af5201b629148a9" + integrity sha512-4hm4VPpIecmlg59CHXnRDnqGplJFrbLG4aFEl5vl6cK1u76ws3LLvX7ikFnTDl5vo39sjWD6AaDPYodJp/NNHg== + +computeds@^0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/computeds/-/computeds-0.0.1.tgz#215b08a4ba3e08a11ff6eee5d6d8d7166a97ce2e" + integrity sha512-7CEBgcMjVmitjYo5q8JTJVra6X5mQ20uTThdK+0kR7UEaDrAWEQcRiBtWJzga4eRpP6afNwwLsX2SET2JhVB1Q== + concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" @@ -1123,15 +1679,20 @@ consola@^3.2.3: resolved "https://registry.yarnpkg.com/consola/-/consola-3.2.3.tgz#0741857aa88cfa0d6fd53f1cff0375136e98502f" integrity sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ== +console-control-strings@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" + integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ== + cookie@^0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== core-js-compat@^3.37.0: - version "3.38.0" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.38.0.tgz#d93393b1aa346b6ee683377b0c31172ccfe607aa" - integrity sha512-75LAicdLa4OJVwFxFbQR3NdnZjNgX6ILpVcVzcC4T2smerB5lELMrJQQQoWV6TiuC/vlaFqgU2tKQx9w5s0e0A== + version "3.38.1" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.38.1.tgz#2bc7a298746ca5a7bcb9c164bcb120f2ebc09a09" + integrity sha512-JRH6gfXxGmrzF3tZ57lFx97YARxCXPaMzPo6jELZhv88pBH5VXpQ+y0znKGlFnzuaihqhLbefxSJxWJMPtfDzw== dependencies: browserslist "^4.23.3" @@ -1154,11 +1715,28 @@ data-uri-to-buffer@^2.0.0: resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-2.0.2.tgz#d296973d5a4897a5dbe31716d118211921f04770" integrity sha512-ND9qDTLc6diwj+Xe5cdAgVTbLVdXbtxTJRXRhli8Mowuaan+0EJOtdqJ0QCHNSSPyoXGx9HX2/VMnKeC34AChA== +data-uri-to-buffer@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz#d8feb2b2881e6a4f58c2e08acfd0e2834e26222e" + integrity sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A== + date-fns@^3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-3.6.0.tgz#f20ca4fe94f8b754951b24240676e8618c0206bf" integrity sha512-fRHTG8g/Gif+kSh50gaGEdToemgfj74aRX3swtiouboip5JDLAyDE9F11nHMIcvOaXeOC6D7SpNhi7uFyB7Uww== +de-indent@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/de-indent/-/de-indent-1.0.2.tgz#b2038e846dc33baa5796128d0804b455b8c1e21d" + integrity sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg== + +debug@4, debug@^4.0.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4, debug@^4.3.6: + version "4.3.6" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.6.tgz#2ab2c38fbaffebf8aa95fdfe6d88438c7a13c52b" + integrity sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg== + dependencies: + ms "2.1.2" + debug@^3.2.7: version "3.2.7" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" @@ -1166,19 +1744,17 @@ debug@^3.2.7: dependencies: ms "^2.1.1" -debug@^4.0.0, debug@^4.1.1, debug@^4.3.4, debug@^4.3.6: - version "4.3.6" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.6.tgz#2ab2c38fbaffebf8aa95fdfe6d88438c7a13c52b" - integrity sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg== +decompress-response@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" + integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== dependencies: - ms "2.1.2" + mimic-response "^3.1.0" -debug@^4.3.1, debug@^4.3.2: - version "4.3.5" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.5.tgz#e83444eceb9fedd4a1da56d671ae2446a01a6e1e" - integrity sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg== - dependencies: - ms "2.1.2" +deep-extend@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== deep-is@^0.1.3: version "0.1.4" @@ -1195,6 +1771,21 @@ defu@^6.1.4: resolved "https://registry.yarnpkg.com/defu/-/defu-6.1.4.tgz#4e0c9cf9ff68fe5f3d7f2765cc1a012dfdcb0479" integrity sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg== +delegates@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" + integrity sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ== + +denque@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/denque/-/denque-2.1.0.tgz#e93e1a6569fb5e66f16a3c2a2964617d349d6ab1" + integrity sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw== + +detect-libc@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.3.tgz#f0cd503b40f9939b894697d19ad50895e30cf700" + integrity sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw== + dir-glob@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" @@ -1210,15 +1801,29 @@ doctrine@^3.0.0: esutils "^2.0.2" electron-to-chromium@^1.5.4: - version "1.5.7" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.7.tgz#425d2a7f76ecfa564fdca1040d11fb1979851f3c" - integrity sha512-6FTNWIWMxMy/ZY6799nBlPtF1DFDQ6VQJ7yyDP27SJNt5lwtQ5ufqVvHylb3fdQefvRcgA3fKcFMJi9OLwBRNw== + version "1.5.13" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.13.tgz#1abf0410c5344b2b829b7247e031f02810d442e6" + integrity sha512-lbBcvtIJ4J6sS4tb5TLp1b4LyfCdMkwStzXPyAgVgTRAsep4bvrAGaBOP7ZJtQMNJpSQ9SqG4brWOroNaQtm7Q== emoji-regex@^8.0.0: version "8.0.0" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== +encoding@^0.1.12: + version "0.1.13" + resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" + integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== + dependencies: + iconv-lite "^0.6.2" + +end-of-stream@^1.1.0, end-of-stream@^1.4.1: + version "1.4.4" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + enhanced-resolve@^5.17.0: version "5.17.1" resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz#67bfbbcc2f81d511be77d686a90267ef7f898a15" @@ -1227,6 +1832,21 @@ enhanced-resolve@^5.17.0: graceful-fs "^4.2.4" tapable "^2.2.0" +entities@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" + integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== + +env-paths@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" + integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== + +err-code@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/err-code/-/err-code-2.0.3.tgz#23c2f3b756ffdfc608d30e27c9a941024807e7f9" + integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA== + error-ex@^1.3.1: version "1.3.2" resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" @@ -1296,6 +1916,36 @@ esbuild@^0.21.3: "@esbuild/win32-ia32" "0.21.5" "@esbuild/win32-x64" "0.21.5" +esbuild@~0.23.0: + version "0.23.1" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.23.1.tgz#40fdc3f9265ec0beae6f59824ade1bd3d3d2dab8" + integrity sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg== + optionalDependencies: + "@esbuild/aix-ppc64" "0.23.1" + "@esbuild/android-arm" "0.23.1" + "@esbuild/android-arm64" "0.23.1" + "@esbuild/android-x64" "0.23.1" + "@esbuild/darwin-arm64" "0.23.1" + "@esbuild/darwin-x64" "0.23.1" + "@esbuild/freebsd-arm64" "0.23.1" + "@esbuild/freebsd-x64" "0.23.1" + "@esbuild/linux-arm" "0.23.1" + "@esbuild/linux-arm64" "0.23.1" + "@esbuild/linux-ia32" "0.23.1" + "@esbuild/linux-loong64" "0.23.1" + "@esbuild/linux-mips64el" "0.23.1" + "@esbuild/linux-ppc64" "0.23.1" + "@esbuild/linux-riscv64" "0.23.1" + "@esbuild/linux-s390x" "0.23.1" + "@esbuild/linux-x64" "0.23.1" + "@esbuild/netbsd-x64" "0.23.1" + "@esbuild/openbsd-arm64" "0.23.1" + "@esbuild/openbsd-x64" "0.23.1" + "@esbuild/sunos-x64" "0.23.1" + "@esbuild/win32-arm64" "0.23.1" + "@esbuild/win32-ia32" "0.23.1" + "@esbuild/win32-x64" "0.23.1" + escalade@^3.1.1, escalade@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.2.tgz#54076e9ab29ea5bf3d8f1ed62acffbb88272df27" @@ -1326,10 +1976,10 @@ eslint-config-flat-gitignore@^0.1.8: find-up-simple "^1.0.0" parse-gitignore "^2.0.0" -eslint-flat-config-utils@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/eslint-flat-config-utils/-/eslint-flat-config-utils-0.3.0.tgz#a0a24db924200225235f21e725556d4519bce90d" - integrity sha512-FaFQLUunAl6YK7aU/pT23DXYVWg/cEHbSfxwAxpCGT6Su8H9RfkmzKLh1G2bba46p6dTlQeA4VTiV5//0SeToQ== +eslint-flat-config-utils@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/eslint-flat-config-utils/-/eslint-flat-config-utils-0.3.1.tgz#8af51e4351b8d39e89a639527ca317d87cca46bd" + integrity sha512-eFT3EaoJN1hlN97xw4FIEX//h0TiFUobgl2l5uLkIwhVN9ahGq95Pbs+i1/B5UACA78LO3rco3JzuvxLdTUOPA== dependencies: "@types/eslint" "^9.6.0" pathe "^1.1.2" @@ -1360,10 +2010,10 @@ eslint-parser-plain@^0.1.0: resolved "https://registry.yarnpkg.com/eslint-parser-plain/-/eslint-parser-plain-0.1.0.tgz#8f7f0ac79fe4e4f47b33cf226b837ccff9d71ad6" integrity sha512-oOeA6FWU0UJT/Rxc3XF5Cq0nbIZbylm7j8+plqq0CZoE6m4u32OXJrR+9iy4srGMmF6v6pmgvP1zPxSRIGh3sg== -eslint-plugin-antfu@^2.3.4: - version "2.3.5" - resolved "https://registry.yarnpkg.com/eslint-plugin-antfu/-/eslint-plugin-antfu-2.3.5.tgz#99069337a66a3a88f156752d8eba094c64a73d51" - integrity sha512-q3S9q7O176sd5VyPKksN1WGtB0l8W1jeWs61xWAmbM5JdZN8q9e0Vmm+tY/YOygHfn1eK9uE4/MGyZBebdtgLA== +eslint-plugin-antfu@^2.3.6: + version "2.3.6" + resolved "https://registry.yarnpkg.com/eslint-plugin-antfu/-/eslint-plugin-antfu-2.3.6.tgz#94c3e0e027cb5be12ce81dedab4452c7dcc03bfb" + integrity sha512-31VwbU1Yd4BFNUUPQEazKyP79f3c+ohJtq5iZIuw38JjkRQdQAcF/31Kjr0DOKZXVDkeeNPrttKidrr3xhnhOA== dependencies: "@antfu/utils" "^0.7.10" @@ -1383,14 +2033,6 @@ eslint-plugin-es-x@^7.5.0: "@eslint-community/regexpp" "^4.11.0" eslint-compat-utils "^0.5.1" -eslint-plugin-eslint-comments@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-eslint-comments/-/eslint-plugin-eslint-comments-3.2.0.tgz#9e1cd7b4413526abb313933071d7aba05ca12ffa" - integrity sha512-0jkOl0hfojIHHmEHgmNdqv4fmh7300NdpA9FFpF7zaoLvB/QeXOGNLIo86oAveJFrfB1p05kC8hpEMHM8DwWVQ== - dependencies: - escape-string-regexp "^1.0.5" - ignore "^5.0.5" - eslint-plugin-format@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/eslint-plugin-format/-/eslint-plugin-format-0.1.2.tgz#ed646b0d29e0ca2d655a1f64e162b89d633912d9" @@ -1404,26 +2046,27 @@ eslint-plugin-format@^0.1.2: prettier "^3.3.2" synckit "^0.9.0" -eslint-plugin-import-x@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-import-x/-/eslint-plugin-import-x-3.1.0.tgz#e1d132bde47c431b37f3b294d9ff813098375e7d" - integrity sha512-/UbPA+bYY7nIxcjL3kpcDY3UNdoLHFhyBFzHox2M0ypcUoueTn6woZUUmzzi5et/dXChksasYYFeKE2wshOrhg== +eslint-plugin-import-x@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-import-x/-/eslint-plugin-import-x-4.0.0.tgz#c367c27dfab458c92da59e3ff21768cad4e99a09" + integrity sha512-5bWZ+2p3DKlpLSP830cAUmRUoYEnnvuBmSOSlURffEUuXL68uQUX0v2JpoXxyoDRIQWApzbqhnFeHA0XoQWosA== dependencies: - "@typescript-eslint/utils" "^7.4.0" + "@typescript-eslint/typescript-estree" "^8.1.0" + "@typescript-eslint/utils" "^8.1.0" debug "^4.3.4" doctrine "^3.0.0" eslint-import-resolver-node "^0.3.9" get-tsconfig "^4.7.3" is-glob "^4.0.3" minimatch "^9.0.3" - semver "^7.6.0" + semver "^7.6.3" stable-hash "^0.0.4" - tslib "^2.6.2" + tslib "^2.6.3" -eslint-plugin-jsdoc@^50.0.0: - version "50.2.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-50.2.1.tgz#cd1f04087172a98254749108cf4a60524acaa3d6" - integrity sha512-KbGhcct6JxzM0x1gjqH1hf4vvc+YNMag5JXyMuPFIPP9THWctRg3UgBUjNcI6a6Rw+1GdKeJ3vTmSICLVF0mtw== +eslint-plugin-jsdoc@^50.2.2: + version "50.2.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-50.2.2.tgz#151e63c8bc245ea8b2357d4229392a5b993827b0" + integrity sha512-i0ZMWA199DG7sjxlzXn5AeYZxpRfMJjDPUl7lL9eJJX8TPRoIaxJU4ys/joP5faM5AXE1eqW/dslCj3uj4Nqpg== dependencies: "@es-joy/jsdoccomment" "~0.48.0" are-docs-informative "^0.0.2" @@ -1471,18 +2114,18 @@ eslint-plugin-n@^17.10.2: minimatch "^9.0.5" semver "^7.5.3" -eslint-plugin-no-only-tests@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-no-only-tests/-/eslint-plugin-no-only-tests-3.1.0.tgz#f38e4935c6c6c4842bf158b64aaa20c366fe171b" - integrity sha512-Lf4YW/bL6Un1R6A76pRZyE1dl1vr31G/ev8UzIc/geCgFWyrKil8hVjYqWVKGB/UIGmb6Slzs9T0wNezdSVegw== +eslint-plugin-no-only-tests@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-no-only-tests/-/eslint-plugin-no-only-tests-3.3.0.tgz#d9d42ccd4b5d099b4872fb5046cf95441188cfb5" + integrity sha512-brcKcxGnISN2CcVhXJ/kEQlNa0MEfGRtwKtWA16SkqXHKitaKIMrfemJKLKX1YqDU5C/5JY3PvZXd5jEW04e0Q== -eslint-plugin-perfectionist@^3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/eslint-plugin-perfectionist/-/eslint-plugin-perfectionist-3.1.3.tgz#61c49620bb91d76dad47735a0a75219943a63558" - integrity sha512-eFRkBvMnnHjle5MuqTzoTIukWIr7Gm2wXvhTj3HyT/ku2J5oj7quBRbvZ8iYkjPyUFBpir3ZBnVQ5vFYswvpQg== +eslint-plugin-perfectionist@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-perfectionist/-/eslint-plugin-perfectionist-3.2.0.tgz#8f25028692518d60ab4eeab7454894ac42cf106f" + integrity sha512-cX1aztMbSfRWPKJH8CD+gadrbkS+RNH1OGWuNGws8J6rHzYYhawxWTU/yzMYjq2IRJCpBCfhgfa7BHRXQYxLHA== dependencies: - "@typescript-eslint/types" "^8.0.1" - "@typescript-eslint/utils" "^8.0.1" + "@typescript-eslint/types" "^8.1.0" + "@typescript-eslint/utils" "^8.1.0" minimatch "^10.0.1" natural-compare-lite "^1.4.0" @@ -1593,15 +2236,15 @@ eslint-visitor-keys@^4.0.0: integrity sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw== eslint@^9.8.0: - version "9.8.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-9.8.0.tgz#a4f4a090c8ea2d10864d89a6603e02ce9f649f0f" - integrity sha512-K8qnZ/QJzT2dLKdZJVX6W4XOwBzutMYmt0lqUS+JdXgd+HTYFlonFgkJ8s44d/zMPPCnOOk0kMWCApCPhiOy9A== + version "9.9.1" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-9.9.1.tgz#147ac9305d56696fb84cf5bdecafd6517ddc77ec" + integrity sha512-dHvhrbfr4xFQ9/dq+jcVneZMyRYLjggWjk6RVsIiHsP8Rz6yZ8LvZ//iU4TrZF+SXWG+JkNF2OyiZRvzgRDqMg== dependencies: "@eslint-community/eslint-utils" "^4.2.0" "@eslint-community/regexpp" "^4.11.0" - "@eslint/config-array" "^0.17.1" + "@eslint/config-array" "^0.18.0" "@eslint/eslintrc" "^3.1.0" - "@eslint/js" "9.8.0" + "@eslint/js" "9.9.1" "@humanwhocodes/module-importer" "^1.0.1" "@humanwhocodes/retry" "^0.3.0" "@nodelib/fs.walk" "^1.2.8" @@ -1689,6 +2332,11 @@ exit-hook@^2.2.1: resolved "https://registry.yarnpkg.com/exit-hook/-/exit-hook-2.2.1.tgz#007b2d92c6428eda2b76e7016a34351586934593" integrity sha512-eNTPlAD67BmP31LDINZ3U7HSF8l57TxOY2PmBJ1shpCvpnxBF93mWCE8YHBnXs8qiUZJc9WDcWIeC3a2HIAMfw== +expand-template@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c" + integrity sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg== + fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" @@ -1699,7 +2347,7 @@ fast-diff@^1.1.2: resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.3.0.tgz#ece407fa550a64d638536cd727e129c61616e0f0" integrity sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw== -fast-glob@^3.2.9: +fast-glob@^3.2.7, fast-glob@^3.2.9, fast-glob@^3.3.2: version "3.3.2" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129" integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== @@ -1720,6 +2368,11 @@ fast-levenshtein@^2.0.6: resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== +fast-uri@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/fast-uri/-/fast-uri-3.0.1.tgz#cddd2eecfc83a71c1be2cc2ef2061331be8a7134" + integrity sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw== + fastq@^1.6.0: version "1.17.1" resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.17.1.tgz#2a523f07a4e7b1e81a42b91b8bf2254107753b47" @@ -1727,6 +2380,14 @@ fastq@^1.6.0: dependencies: reusify "^1.0.4" +fetch-blob@^3.1.2, fetch-blob@^3.1.4: + version "3.2.0" + resolved "https://registry.yarnpkg.com/fetch-blob/-/fetch-blob-3.2.0.tgz#f09b8d4bbd45adc6f0c20b7e787e793e309dcce9" + integrity sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ== + dependencies: + node-domexception "^1.0.0" + web-streams-polyfill "^3.0.3" + file-entry-cache@^8.0.0: version "8.0.0" resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-8.0.0.tgz#7787bddcf1131bffb92636c69457bbc0edd6d81f" @@ -1734,6 +2395,11 @@ file-entry-cache@^8.0.0: dependencies: flat-cache "^4.0.0" +file-uri-to-path@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" + integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== + fill-range@^7.1.1: version "7.1.1" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" @@ -1775,6 +2441,48 @@ flatted@^3.2.9: resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.1.tgz#21db470729a6734d4997002f439cb308987f567a" integrity sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw== +formdata-polyfill@^4.0.10: + version "4.0.10" + resolved "https://registry.yarnpkg.com/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz#24807c31c9d402e002ab3d8c720144ceb8848423" + integrity sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g== + dependencies: + fetch-blob "^3.1.2" + +fs-constants@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" + integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== + +fs-extra@^11.1.0: + version "11.2.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.2.0.tgz#e70e17dfad64232287d01929399e0ea7c86b0e5b" + integrity sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs-extra@~7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" + integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== + dependencies: + graceful-fs "^4.1.2" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs-minipass@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" + integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== + dependencies: + minipass "^3.0.0" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + fsevents@~2.3.2, fsevents@~2.3.3: version "2.3.3" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" @@ -1785,6 +2493,20 @@ function-bind@^1.1.2: resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== +gauge@^4.0.3: + version "4.0.4" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-4.0.4.tgz#52ff0652f2bbf607a989793d53b751bef2328dce" + integrity sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg== + dependencies: + aproba "^1.0.3 || ^2.0.0" + color-support "^1.1.3" + console-control-strings "^1.1.0" + has-unicode "^2.0.1" + signal-exit "^3.0.7" + string-width "^4.2.3" + strip-ansi "^6.0.1" + wide-align "^1.1.5" + get-caller-file@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" @@ -1798,13 +2520,18 @@ get-source@^2.0.12: data-uri-to-buffer "^2.0.0" source-map "^0.6.1" -get-tsconfig@^4.7.0, get-tsconfig@^4.7.3: +get-tsconfig@^4.7.0, get-tsconfig@^4.7.3, get-tsconfig@^4.7.5: version "4.7.6" resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.7.6.tgz#118fd5b7b9bae234cc7705a00cd771d7eb65d62a" integrity sha512-ZAqrLlu18NbDdRaHq+AKXzAmqIUPswPWKUchfytdAjiRFnCe5ojG2bstg6mRiZabkKfCoL/e98pbBELIV/YCeA== dependencies: resolve-pkg-maps "^1.0.0" +github-from-package@0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce" + integrity sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw== + glob-parent@^5.1.2, glob-parent@~5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" @@ -1824,6 +2551,18 @@ glob-to-regexp@^0.4.1: resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== +glob@^7.1.3, glob@^7.1.4: + version "7.2.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + globals@^13.24.0: version "13.24.0" resolved "https://registry.yarnpkg.com/globals/-/globals-13.24.0.tgz#8432a19d78ce0c1e833949c36adb345400bb1171" @@ -1853,7 +2592,7 @@ globby@^11.1.0: merge2 "^1.4.1" slash "^3.0.0" -graceful-fs@^4.2.4: +graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4, graceful-fs@^4.2.6: version "4.2.11" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== @@ -1873,6 +2612,11 @@ has-flag@^4.0.0: resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== +has-unicode@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" + integrity sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ== + hasown@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" @@ -1880,21 +2624,70 @@ hasown@^2.0.2: dependencies: function-bind "^1.1.2" +he@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" + integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== + hosted-git-info@^2.1.4: version "2.8.9" resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== -ignore@^5.0.5, ignore@^5.2.4, ignore@^5.3.1: +http-cache-semantics@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" + integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== + +http-proxy-agent@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" + integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== + dependencies: + "@tootallnate/once" "1" + agent-base "6" + debug "4" + +https-proxy-agent@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" + integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== + dependencies: + agent-base "6" + debug "4" + +https-proxy-agent@^7.0.5: + version "7.0.5" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz#9e8b5013873299e11fab6fd548405da2d6c602b2" + integrity sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw== + dependencies: + agent-base "^7.0.2" + debug "4" + +humanize-ms@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" + integrity sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ== + dependencies: + ms "^2.0.0" + +iconv-lite@^0.6.2: + version "0.6.3" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" + integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + +ieee754@^1.1.13: + version "1.2.1" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + +ignore@^5.2.0, ignore@^5.2.4, ignore@^5.3.1: version "5.3.2" resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5" integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g== -ignore@^5.2.0: - version "5.3.1" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.1.tgz#5073e554cd42c5b33b394375f538b8593e34d4ef" - integrity sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw== - import-fresh@^3.2.1: version "3.3.0" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" @@ -1903,6 +2696,11 @@ import-fresh@^3.2.1: parent-module "^1.0.0" resolve-from "^4.0.0" +import-lazy@~4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-4.0.0.tgz#e8eb627483a0a43da3c03f3e35548be5cb0cc153" + integrity sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw== + imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" @@ -1913,6 +2711,52 @@ indent-string@^4.0.0: resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== +infer-owner@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" + integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@^2.0.3, inherits@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +ini@~1.3.0: + version "1.3.8" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" + integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== + +ioredis@^5.4.1: + version "5.4.1" + resolved "https://registry.yarnpkg.com/ioredis/-/ioredis-5.4.1.tgz#1c56b70b759f01465913887375ed809134296f40" + integrity sha512-2YZsvl7jopIa1gaePkeMtd9rAcSjOOjPtpcLlOeusyO+XH2SK5ZcT+UCrElPP+WVIInh2TzeI4XW9ENaSLVVHA== + dependencies: + "@ioredis/commands" "^1.1.1" + cluster-key-slot "^1.1.0" + debug "^4.3.4" + denque "^2.1.0" + lodash.defaults "^4.2.0" + lodash.isarguments "^3.1.0" + redis-errors "^1.2.0" + redis-parser "^3.0.0" + standard-as-callback "^2.1.0" + +ip-address@^9.0.5: + version "9.0.5" + resolved "https://registry.yarnpkg.com/ip-address/-/ip-address-9.0.5.tgz#117a960819b08780c3bd1f14ef3c1cc1d3f3ea5a" + integrity sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g== + dependencies: + jsbn "1.1.0" + sprintf-js "^1.1.3" + is-alphabetical@^1.0.0: version "1.0.4" resolved "https://registry.yarnpkg.com/is-alphabetical/-/is-alphabetical-1.0.4.tgz#9e7d6b94916be22153745d184c298cbf986a686d" @@ -1946,9 +2790,9 @@ is-builtin-module@^3.2.1: builtin-modules "^3.3.0" is-core-module@^2.13.0: - version "2.15.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.15.0.tgz#71c72ec5442ace7e76b306e9d48db361f22699ea" - integrity sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA== + version "2.15.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.15.1.tgz#a7363a25bee942fefab0de13bf6aa372c82dcc37" + integrity sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ== dependencies: hasown "^2.0.2" @@ -1979,6 +2823,11 @@ is-hexadecimal@^1.0.0: resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz#cc35c97588da4bd49a8eedd6bc4082d44dcb23a7" integrity sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw== +is-lambda@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-lambda/-/is-lambda-1.0.1.tgz#3d9877899e6a53efc0160504cde15f82e6f061d5" + integrity sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ== + is-module@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" @@ -1999,6 +2848,11 @@ isexe@^2.0.0: resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== +jju@~1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/jju/-/jju-1.4.0.tgz#a3abe2718af241a2b2904f84a625970f389ae32a" + integrity sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA== + js-cleanup@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/js-cleanup/-/js-cleanup-1.2.0.tgz#8dbc65954b1d38b255f1e8cf02cd17b3f7a053f9" @@ -2020,6 +2874,11 @@ js-yaml@^4.1.0: dependencies: argparse "^2.0.1" +jsbn@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-1.1.0.tgz#b01307cb29b618a1ed26ec79e911f803c4da0040" + integrity sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A== + jsdoc-type-pratt-parser@^4.0.0, jsdoc-type-pratt-parser@~4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-4.1.0.tgz#ff6b4a3f339c34a6c188cbf50a16087858d22113" @@ -2055,6 +2914,11 @@ json-schema-traverse@^0.4.1: resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== +json-schema-traverse@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" + integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== + json-stable-stringify-without-jsonify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" @@ -2070,6 +2934,22 @@ jsonc-eslint-parser@^2.0.4, jsonc-eslint-parser@^2.4.0: espree "^9.0.0" semver "^7.3.5" +jsonfile@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg== + optionalDependencies: + graceful-fs "^4.1.6" + +jsonfile@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" + integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== + dependencies: + universalify "^2.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + keyv@^4.5.4: version "4.5.4" resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" @@ -2077,6 +2957,11 @@ keyv@^4.5.4: dependencies: json-buffer "3.0.1" +kolorist@^1.8.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/kolorist/-/kolorist-1.8.0.tgz#edddbbbc7894bc13302cdf740af6374d4a04743c" + integrity sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ== + levn@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" @@ -2112,16 +2997,33 @@ locate-path@^6.0.0: dependencies: p-locate "^5.0.0" +lodash.defaults@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c" + integrity sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ== + +lodash.isarguments@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" + integrity sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg== + lodash.merge@^4.6.2: version "4.6.2" resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== -lodash@^4.17.19, lodash@^4.17.21: +lodash@^4.17.19, lodash@^4.17.21, lodash@~4.17.15: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + magic-string@^0.25.3, magic-string@^0.25.7: version "0.25.9" resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.9.tgz#de7f9faf91ef8a1c91d02c2e5314c8277dbcdd1c" @@ -2129,6 +3031,35 @@ magic-string@^0.25.3, magic-string@^0.25.7: dependencies: sourcemap-codec "^1.4.8" +magic-string@^0.30.11: + version "0.30.11" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.11.tgz#301a6f93b3e8c2cb13ac1a7a673492c0dfd12954" + integrity sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A== + dependencies: + "@jridgewell/sourcemap-codec" "^1.5.0" + +make-fetch-happen@^9.1.0: + version "9.1.0" + resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz#53085a09e7971433e6765f7971bf63f4e05cb968" + integrity sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg== + dependencies: + agentkeepalive "^4.1.3" + cacache "^15.2.0" + http-cache-semantics "^4.1.0" + http-proxy-agent "^4.0.1" + https-proxy-agent "^5.0.0" + is-lambda "^1.0.1" + lru-cache "^6.0.0" + minipass "^3.1.3" + minipass-collect "^1.0.2" + minipass-fetch "^1.3.2" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.4" + negotiator "^0.6.2" + promise-retry "^2.0.1" + socks-proxy-agent "^6.0.0" + ssri "^8.0.0" + mdast-util-from-markdown@^0.8.5: version "0.8.5" resolved "https://registry.yarnpkg.com/mdast-util-from-markdown/-/mdast-util-from-markdown-0.8.5.tgz#d1ef2ca42bc377ecb0463a987910dae89bd9a28c" @@ -2159,9 +3090,9 @@ micromark@~2.11.0: parse-entities "^2.0.0" micromatch@^4.0.4: - version "4.0.7" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.7.tgz#33e8190d9fe474a9895525f5618eee136d46c2e5" - integrity sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q== + version "4.0.8" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202" + integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA== dependencies: braces "^3.0.3" picomatch "^2.3.1" @@ -2171,15 +3102,20 @@ mime@^3.0.0: resolved "https://registry.yarnpkg.com/mime/-/mime-3.0.0.tgz#b374550dca3a0c18443b0c950a6a58f1931cf7a7" integrity sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A== +mimic-response@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" + integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== + min-indent@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== -miniflare@3.20240725.0: - version "3.20240725.0" - resolved "https://registry.yarnpkg.com/miniflare/-/miniflare-3.20240725.0.tgz#8d4683a4d0f8de260514a0df8d83da558eebec5c" - integrity sha512-n9NTLI8J9Xt0Cls6dRpqoIPkVFnxD9gMnU/qDkDX9diKfN16HyxpAdA5mto/hKuRpjW19TxnTMcxBo90vZXemw== +miniflare@3.20240821.0: + version "3.20240821.0" + resolved "https://registry.yarnpkg.com/miniflare/-/miniflare-3.20240821.0.tgz#d4fc648ca20c033c4143a8d0ef061dedccad7c2d" + integrity sha512-4BhLGpssQxM/O6TZmJ10GkT3wBJK6emFkZ3V87/HyvQmVt8zMxEBvyw5uv6kdtp+7F54Nw6IKFJjPUL8rFVQrQ== dependencies: "@cspotcode/source-map-support" "0.8.1" acorn "^8.8.0" @@ -2189,7 +3125,7 @@ miniflare@3.20240725.0: glob-to-regexp "^0.4.1" stoppable "^1.1.0" undici "^5.28.4" - workerd "1.20240725.0" + workerd "1.20240821.1" ws "^8.17.1" youch "^3.2.2" zod "^3.22.3" @@ -2201,7 +3137,7 @@ minimatch@^10.0.1: dependencies: brace-expansion "^2.0.1" -minimatch@^3.1.2: +minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== @@ -2215,6 +3151,87 @@ minimatch@^9.0.3, minimatch@^9.0.4, minimatch@^9.0.5: dependencies: brace-expansion "^2.0.1" +minimatch@~3.0.3: + version "3.0.8" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.8.tgz#5e6a59bd11e2ab0de1cfb843eb2d82e546c321c1" + integrity sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q== + dependencies: + brace-expansion "^1.1.7" + +minimist@^1.2.0, minimist@^1.2.3: + version "1.2.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== + +minipass-collect@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617" + integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA== + dependencies: + minipass "^3.0.0" + +minipass-fetch@^1.3.2: + version "1.4.1" + resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-1.4.1.tgz#d75e0091daac1b0ffd7e9d41629faff7d0c1f1b6" + integrity sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw== + dependencies: + minipass "^3.1.0" + minipass-sized "^1.0.3" + minizlib "^2.0.0" + optionalDependencies: + encoding "^0.1.12" + +minipass-flush@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373" + integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== + dependencies: + minipass "^3.0.0" + +minipass-pipeline@^1.2.2, minipass-pipeline@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c" + integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== + dependencies: + minipass "^3.0.0" + +minipass-sized@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/minipass-sized/-/minipass-sized-1.0.3.tgz#70ee5a7c5052070afacfbc22977ea79def353b70" + integrity sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g== + dependencies: + minipass "^3.0.0" + +minipass@^3.0.0, minipass@^3.1.0, minipass@^3.1.1, minipass@^3.1.3: + version "3.3.6" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.6.tgz#7bba384db3a1520d18c9c0e5251c3444e95dd94a" + integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw== + dependencies: + yallist "^4.0.0" + +minipass@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d" + integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== + +minizlib@^2.0.0, minizlib@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" + integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== + dependencies: + minipass "^3.0.0" + yallist "^4.0.0" + +mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3: + version "0.5.3" + resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113" + integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== + +mkdirp@^1.0.3, mkdirp@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + mlly@^1.4.2, mlly@^1.7.1: version "1.7.1" resolved "https://registry.yarnpkg.com/mlly/-/mlly-1.7.1.tgz#e0336429bb0731b6a8e887b438cbdae522c8f32f" @@ -2230,11 +3247,16 @@ ms@2.1.2: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== -ms@^2.1.1: +ms@^2.0.0, ms@^2.1.1: version "2.1.3" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== +muggle-string@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/muggle-string/-/muggle-string-0.4.1.tgz#3b366bd43b32f809dc20659534dd30e7c8a0d328" + integrity sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ== + mustache@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/mustache/-/mustache-4.2.0.tgz#e5892324d60a12ec9c2a73359edca52972bf6f64" @@ -2245,6 +3267,11 @@ nanoid@^3.3.3, nanoid@^3.3.7: resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8" integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g== +napi-build-utils@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-1.0.2.tgz#b1fddc0b2c46e380a0b7a76f984dd47c41a13806" + integrity sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg== + natural-compare-lite@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz#17b09581988979fddafe0201e931ba933c96cbb4" @@ -2255,21 +3282,75 @@ natural-compare@^1.4.0: resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== +negotiator@^0.6.2: + version "0.6.3" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" + integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== + +node-abi@^3.3.0: + version "3.67.0" + resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.67.0.tgz#1d159907f18d18e18809dbbb5df47ed2426a08df" + integrity sha512-bLn/fU/ALVBE9wj+p4Y21ZJWYFjUXLXPi/IewyLZkx3ApxKDNBWCKdReeKOtD8dWpOdDCeMyLh6ZewzcLsG2Nw== + dependencies: + semver "^7.3.5" + +node-addon-api@^7.0.0: + version "7.1.1" + resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-7.1.1.tgz#1aba6693b0f255258a049d621329329322aad558" + integrity sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ== + +node-domexception@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/node-domexception/-/node-domexception-1.0.0.tgz#6888db46a1f71c0b76b3f7555016b63fe64766e5" + integrity sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ== + node-fetch-native@^1.6.4: version "1.6.4" resolved "https://registry.yarnpkg.com/node-fetch-native/-/node-fetch-native-1.6.4.tgz#679fc8fd8111266d47d7e72c379f1bed9acff06e" integrity sha512-IhOigYzAKHd244OC0JIMIUrjzctirCmPkaIfhDeGcEETWof5zKYUW7e7MYvChGWh/4CJeXEgsRyGzuF334rOOQ== +node-fetch@^3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-3.3.2.tgz#d1e889bacdf733b4ff3b2b243eb7a12866a0b78b" + integrity sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA== + dependencies: + data-uri-to-buffer "^4.0.0" + fetch-blob "^3.1.4" + formdata-polyfill "^4.0.10" + node-forge@^1: version "1.3.1" resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.3.1.tgz#be8da2af243b2417d5f646a770663a92b7e9ded3" integrity sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA== +node-gyp@8.x: + version "8.4.1" + resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-8.4.1.tgz#3d49308fc31f768180957d6b5746845fbd429937" + integrity sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w== + dependencies: + env-paths "^2.2.0" + glob "^7.1.4" + graceful-fs "^4.2.6" + make-fetch-happen "^9.1.0" + nopt "^5.0.0" + npmlog "^6.0.0" + rimraf "^3.0.2" + semver "^7.3.5" + tar "^6.1.2" + which "^2.0.2" + node-releases@^2.0.18: version "2.0.18" resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.18.tgz#f010e8d35e2fe8d6b2944f03f70213ecedc4ca3f" integrity sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g== +nopt@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-5.0.0.tgz#530942bb58a512fccafe53fe210f13a25355dc88" + integrity sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ== + dependencies: + abbrev "1" + normalize-package-data@^2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" @@ -2285,6 +3366,23 @@ normalize-path@^3.0.0, normalize-path@~3.0.0: resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== +npm-run-path@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== + dependencies: + path-key "^3.0.0" + +npmlog@^6.0.0: + version "6.0.2" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-6.0.2.tgz#c8166017a42f2dea92d6453168dd865186a70830" + integrity sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg== + dependencies: + are-we-there-yet "^3.0.0" + console-control-strings "^1.1.0" + gauge "^4.0.3" + set-blocking "^2.0.0" + nth-check@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" @@ -2292,6 +3390,13 @@ nth-check@^2.1.1: dependencies: boolbase "^1.0.0" +once@^1.3.0, once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + optionator@^0.9.3: version "0.9.4" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.4.tgz#7ea1c1a5d91d764fb282139c88fe11e182a3a734" @@ -2332,11 +3437,23 @@ p-locate@^5.0.0: dependencies: p-limit "^3.0.2" +p-map@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" + integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== + dependencies: + aggregate-error "^3.0.0" + p-try@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== +package-manager-detector@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/package-manager-detector/-/package-manager-detector-0.2.0.tgz#160395cd5809181f5a047222319262b8c2d8aaea" + integrity sha512-E385OSk9qDcXhcM9LNSe4sdhx8a9mAPrZ4sMLW+tmxl5ZuGtPUcdFu+MPP2jbgiWAZ6Pfe5soGFMd+0Db5Vrog== + parent-module@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" @@ -2379,12 +3496,22 @@ parse-json@^5.0.0: json-parse-even-better-errors "^2.3.0" lines-and-columns "^1.1.6" +path-browserify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-1.0.1.tgz#d98454a9c3753d5790860f16f68867b9e46be1fd" + integrity sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g== + path-exists@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== -path-key@^3.1.0: +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + +path-key@^3.0.0, path-key@^3.1.0: version "3.1.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== @@ -2430,9 +3557,9 @@ picomatch@^4.0.2: integrity sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg== pkg-types@^1.0.3, pkg-types@^1.1.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/pkg-types/-/pkg-types-1.1.3.tgz#161bb1242b21daf7795036803f28e30222e476e3" - integrity sha512-+JrgthZG6m3ckicaOB74TwQ+tBWsFl3qVQg7mN8ulwSOElJ7gBhKzj2VkCPnZ4NlF6kEquYU+RIYNVAvzd54UA== + version "1.2.0" + resolved "https://registry.yarnpkg.com/pkg-types/-/pkg-types-1.2.0.tgz#d0268e894e93acff11a6279de147e83354ebd42d" + integrity sha512-+ifYuSSqOQ8CqP4MbZA5hDpb97n3E8SVWdJe+Wms9kj745lmd3b7EZJiqvmLwAlmRfjrI7Hi5z3kdBJ93lFNPA== dependencies: confbox "^0.1.7" mlly "^1.7.1" @@ -2460,6 +3587,24 @@ postcss@^8.4.41: picocolors "^1.0.1" source-map-js "^1.2.0" +prebuild-install@^7.1.1: + version "7.1.2" + resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-7.1.2.tgz#a5fd9986f5a6251fbc47e1e5c65de71e68c0a056" + integrity sha512-UnNke3IQb6sgarcZIDU3gbMeTp/9SSU1DAIkil7PrqG1vZlBtY5msYccSKSHDqa3hNg436IXK+SNImReuA1wEQ== + dependencies: + detect-libc "^2.0.0" + expand-template "^2.0.3" + github-from-package "0.0.0" + minimist "^1.2.3" + mkdirp-classic "^0.5.3" + napi-build-utils "^1.0.1" + node-abi "^3.3.0" + pump "^3.0.0" + rc "^1.2.7" + simple-get "^4.0.0" + tar-fs "^2.0.0" + tunnel-agent "^0.6.0" + prelude-ls@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" @@ -2482,6 +3627,27 @@ printable-characters@^1.0.42: resolved "https://registry.yarnpkg.com/printable-characters/-/printable-characters-1.0.42.tgz#3f18e977a9bd8eb37fcc4ff5659d7be90868b3d8" integrity sha512-dKp+C4iXWK4vVYZmYSd0KBH5F/h1HoZRsbJ82AVKRO3PEo8L4lBS/vLwhVtpwwuYcoIsVY+1JYKR268yn480uQ== +promise-inflight@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" + integrity sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g== + +promise-retry@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-2.0.1.tgz#ff747a13620ab57ba688f5fc67855410c370da22" + integrity sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g== + dependencies: + err-code "^2.0.2" + retry "^0.12.0" + +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + punycode@^2.1.0: version "2.3.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" @@ -2492,6 +3658,16 @@ queue-microtask@^1.2.2: resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== +rc@^1.2.7: + version "1.2.8" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" + integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== + dependencies: + deep-extend "^0.6.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~2.0.1" + read-pkg-up@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507" @@ -2511,6 +3687,15 @@ read-pkg@^5.2.0: parse-json "^5.0.0" type-fest "^0.6.0" +readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: + version "3.6.2" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" + integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + readdirp@~3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" @@ -2518,6 +3703,18 @@ readdirp@~3.6.0: dependencies: picomatch "^2.2.1" +redis-errors@^1.0.0, redis-errors@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/redis-errors/-/redis-errors-1.2.0.tgz#eb62d2adb15e4eaf4610c04afe1529384250abad" + integrity sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w== + +redis-parser@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/redis-parser/-/redis-parser-3.0.0.tgz#b66d828cdcafe6b4b8a428a7def4c6bcac31c8b4" + integrity sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A== + dependencies: + redis-errors "^1.0.0" + refa@^0.12.0, refa@^0.12.1: version "0.12.1" resolved "https://registry.yarnpkg.com/refa/-/refa-0.12.1.tgz#dac13c4782dc22b6bae6cce81a2b863888ea39c6" @@ -2550,6 +3747,11 @@ require-directory@^2.1.1: resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== +require-from-string@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" + integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== + resolve-from@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" @@ -2565,7 +3767,7 @@ resolve.exports@^2.0.2: resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-2.0.2.tgz#f8c934b8e6a13f539e38b7098e2e36134f01e800" integrity sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg== -resolve@^1.10.0, resolve@^1.22.1, resolve@^1.22.4, resolve@^1.22.8: +resolve@^1.10.0, resolve@^1.22.1, resolve@^1.22.4, resolve@^1.22.8, resolve@~1.22.1, resolve@~1.22.2: version "1.22.8" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== @@ -2574,11 +3776,23 @@ resolve@^1.10.0, resolve@^1.22.1, resolve@^1.22.4, resolve@^1.22.8: path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" +retry@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" + integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow== + reusify@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== +rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + rollup-plugin-cleanup@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/rollup-plugin-cleanup/-/rollup-plugin-cleanup-3.2.1.tgz#8cbc92ecf58babd7c210051929797f137bbf777c" @@ -2596,6 +3810,11 @@ rollup-plugin-inject@^3.0.0: magic-string "^0.25.3" rollup-pluginutils "^2.8.1" +rollup-plugin-node-externals@^7.1.3: + version "7.1.3" + resolved "https://registry.yarnpkg.com/rollup-plugin-node-externals/-/rollup-plugin-node-externals-7.1.3.tgz#7352584de22176422978ed9e2707984549c10c78" + integrity sha512-RM+7tJAejAoRsCf93TptTSdqUhRA8S78DleihMiu54Kac+uLkd9VIegLPhGnaW3ehZTXh56+R301mFH6j2A7vw== + rollup-plugin-node-polyfills@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/rollup-plugin-node-polyfills/-/rollup-plugin-node-polyfills-0.2.1.tgz#53092a2744837164d5b8a28812ba5f3ff61109fd" @@ -2610,7 +3829,7 @@ rollup-pluginutils@^2.8.1, rollup-pluginutils@^2.8.2: dependencies: estree-walker "^0.6.1" -rollup@^4.13.0: +rollup@^4.20.0: version "4.21.0" resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.21.0.tgz#28db5f5c556a5180361d35009979ccc749560b9d" integrity sha512-vo+S/lfA2lMS7rZ2Qoubi6I5hwZwzXeUIctILZLbHI+laNtvhhOIon2S1JksA5UEDQ7l3vberd0fxK44lTYjbQ== @@ -2642,6 +3861,16 @@ run-parallel@^1.1.9: dependencies: queue-microtask "^1.2.2" +safe-buffer@^5.0.1, safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +"safer-buffer@>= 2.1.2 < 3.0.0": + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + scslre@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/scslre/-/scslre-0.3.0.tgz#c3211e9bfc5547fc86b1eabaa34ed1a657060155" @@ -2664,11 +3893,23 @@ selfsigned@^2.0.1: resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== -semver@^7.3.5, semver@^7.3.6, semver@^7.5.3, semver@^7.5.4, semver@^7.6.0, semver@^7.6.1, semver@^7.6.3: +semver@^7.3.4, semver@^7.3.5, semver@^7.3.6, semver@^7.5.3, semver@^7.5.4, semver@^7.6.0, semver@^7.6.1, semver@^7.6.3: version "7.6.3" resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== +semver@~7.5.4: + version "7.5.4" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" + integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== + dependencies: + lru-cache "^6.0.0" + +set-blocking@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== + shebang-command@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" @@ -2681,6 +3922,25 @@ shebang-regex@^3.0.0: resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== +signal-exit@^3.0.7: + version "3.0.7" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== + +simple-concat@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f" + integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q== + +simple-get@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-4.0.1.tgz#4a39db549287c979d352112fa03fd99fd6bc3543" + integrity sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA== + dependencies: + decompress-response "^6.0.0" + once "^1.3.1" + simple-concat "^1.0.0" + sisteransi@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" @@ -2701,12 +3961,34 @@ slashes@^3.0.12: resolved "https://registry.yarnpkg.com/slashes/-/slashes-3.0.12.tgz#3d664c877ad542dc1509eaf2c50f38d483a6435a" integrity sha512-Q9VME8WyGkc7pJf6QEkj3wE+2CnvZMI+XJhwdTPR8Z/kWQRXi7boAWLDibRPyHRTUTPx5FaU7MsyrjI3yLB4HA== +smart-buffer@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae" + integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== + +socks-proxy-agent@^6.0.0: + version "6.2.1" + resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz#2687a31f9d7185e38d530bef1944fe1f1496d6ce" + integrity sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ== + dependencies: + agent-base "^6.0.2" + debug "^4.3.3" + socks "^2.6.2" + +socks@^2.6.2: + version "2.8.3" + resolved "https://registry.yarnpkg.com/socks/-/socks-2.8.3.tgz#1ebd0f09c52ba95a09750afe3f3f9f724a800cb5" + integrity sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw== + dependencies: + ip-address "^9.0.5" + smart-buffer "^4.2.0" + source-map-js@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.0.tgz#16b809c162517b5b8c3e7dcd315a2a5c2612b2af" integrity sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg== -source-map@^0.6.1: +source-map@^0.6.1, source-map@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== @@ -2746,9 +4028,38 @@ spdx-expression-parse@^4.0.0: spdx-license-ids "^3.0.0" spdx-license-ids@^3.0.0: - version "3.0.18" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.18.tgz#22aa922dcf2f2885a6494a261f2d8b75345d0326" - integrity sha512-xxRs31BqRYHwiMzudOrpSiHtZ8i/GeionCBDSilhYRj+9gIcI8wCZTlXZKu9vZIVqViP3dcp9qE5G6AlIaD+TQ== + version "3.0.20" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.20.tgz#e44ed19ed318dd1e5888f93325cee800f0f51b89" + integrity sha512-jg25NiDV/1fLtSgEgyvVyDunvaNHbuwF9lfNV17gSmPFAlYzdfNBlLtLzXTevwkPj7DhGbmN9VnmJIgLnhvaBw== + +sprintf-js@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.3.tgz#4914b903a2f8b685d17fdf78a70e917e872e444a" + integrity sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA== + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== + +sqlite3@^5: + version "5.1.7" + resolved "https://registry.yarnpkg.com/sqlite3/-/sqlite3-5.1.7.tgz#59ca1053c1ab38647396586edad019b1551041b7" + integrity sha512-GGIyOiFaG+TUra3JIfkI/zGP8yZYLPQ0pl1bH+ODjiX57sPhrLU5sQJn1y9bDKZUFYkX1crlrPfSYt0BKKdkog== + dependencies: + bindings "^1.5.0" + node-addon-api "^7.0.0" + prebuild-install "^7.1.1" + tar "^6.1.11" + optionalDependencies: + node-gyp "8.x" + +ssri@^8.0.0, ssri@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-8.0.1.tgz#638e4e439e2ffbd2cd289776d5ca457c4f51a2af" + integrity sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ== + dependencies: + minipass "^3.1.1" stable-hash@^0.0.4: version "0.0.4" @@ -2763,12 +4074,22 @@ stacktracey@^2.1.8: as-table "^1.0.36" get-source "^2.0.12" +standard-as-callback@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/standard-as-callback/-/standard-as-callback-2.1.0.tgz#8953fc05359868a77b5b9739a665c5977bb7df45" + integrity sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A== + stoppable@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/stoppable/-/stoppable-1.1.0.tgz#32da568e83ea488b08e4d7ea2c3bcc9d75015d5b" integrity sha512-KXDYZ9dszj6bzvnEMRYvxgeTHU74QBFL54XKtP3nyMuJ81CFYtABZ3bAzL2EdFUaEwJOBOgENyFj3R7oTzDyyw== -string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: +string-argv@~0.3.1: + version "0.3.2" + resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.3.2.tgz#2b6d0ef24b656274d957d54e0a4bbf6153dc02b6" + integrity sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q== + +"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -2777,6 +4098,13 @@ string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.1" +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" @@ -2791,11 +4119,16 @@ strip-indent@^3.0.0: dependencies: min-indent "^1.0.0" -strip-json-comments@^3.1.1: +strip-json-comments@^3.1.1, strip-json-comments@~3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== +strip-json-comments@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== + supports-color@^5.3.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" @@ -2810,6 +4143,13 @@ supports-color@^7.1.0: dependencies: has-flag "^4.0.0" +supports-color@~8.1.1: + version "8.1.1" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== + dependencies: + has-flag "^4.0.0" + supports-preserve-symlinks-flag@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" @@ -2835,15 +4175,63 @@ tapable@^2.2.0: resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== +tar-fs@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.1.tgz#489a15ab85f1f0befabb370b7de4f9eb5cbe8784" + integrity sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng== + dependencies: + chownr "^1.1.1" + mkdirp-classic "^0.5.2" + pump "^3.0.0" + tar-stream "^2.1.4" + +tar-stream@^2.1.4: + version "2.2.0" + resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" + integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== + dependencies: + bl "^4.0.3" + end-of-stream "^1.4.1" + fs-constants "^1.0.0" + inherits "^2.0.3" + readable-stream "^3.1.1" + +tar@^6.0.2, tar@^6.1.11, tar@^6.1.2: + version "6.2.1" + resolved "https://registry.yarnpkg.com/tar/-/tar-6.2.1.tgz#717549c541bc3c2af15751bea94b1dd068d4b03a" + integrity sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A== + dependencies: + chownr "^2.0.0" + fs-minipass "^2.0.0" + minipass "^5.0.0" + minizlib "^2.1.1" + mkdirp "^1.0.3" + yallist "^4.0.0" + +telegram-bot-api-types@^7.9.10: + version "7.9.10" + resolved "https://registry.yarnpkg.com/telegram-bot-api-types/-/telegram-bot-api-types-7.9.10.tgz#e519fa8ffec912cf0567025b83364d7905f74c2a" + integrity sha512-T8wwAxclKu5vT1HWKeHiLuotWN2WxBM3gM75zCUAZcEWMXuIuFBU15zq39jkgk6wz179UYKitvCMNsxgyfCE+w== + text-table@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== -tinyexec@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/tinyexec/-/tinyexec-0.1.4.tgz#29d24b14294bddcd35d78cab9730e05b725a9fd8" - integrity sha512-Ba2ELcNnnWkgqnAJBouhcsDsYitbD9LIAVNSz3746u50f+tlF3wO0uB3uqyz8NHFSTpv23qtT47XGDw8pXW5DA== +tiny-invariant@^1.1.0: + version "1.3.3" + resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.3.3.tgz#46680b7a873a0d5d10005995eb90a70d74d60127" + integrity sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg== + +tinyexec@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/tinyexec/-/tinyexec-0.3.0.tgz#ed60cfce19c17799d4a241e06b31b0ec2bee69e6" + integrity sha512-tVGE0mVJPGb0chKhqmsoosjsS+qUnJVGJpZgsHYQcGoPlG3B51R3PouqTgEGH2Dc9jjFyOqOpix6ZHNMXp1FZg== + +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== to-regex-range@^5.0.1: version "5.0.1" @@ -2859,15 +4247,37 @@ toml-eslint-parser@^0.10.0: dependencies: eslint-visitor-keys "^3.0.0" +toml@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/toml/-/toml-3.0.0.tgz#342160f1af1904ec9d204d03a5d61222d762c5ee" + integrity sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w== + ts-api-utils@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.3.0.tgz#4b490e27129f1e8e686b45cc4ab63714dc60eea1" integrity sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ== -tslib@^2.2.0, tslib@^2.3.1, tslib@^2.6.2: - version "2.6.3" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.3.tgz#0438f810ad7a9edcde7a241c3d80db693c8cbfe0" - integrity sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ== +tslib@^2.2.0, tslib@^2.3.1, tslib@^2.6.2, tslib@^2.6.3: + version "2.7.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.7.0.tgz#d9b40c5c40ab59e8738f297df3087bf1a2690c01" + integrity sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA== + +tsx@^4.19.0: + version "4.19.0" + resolved "https://registry.yarnpkg.com/tsx/-/tsx-4.19.0.tgz#6166cb399b17d14d125e6158d23384045cfdf4f6" + integrity sha512-bV30kM7bsLZKZIOCHeMNVMJ32/LuJzLVajkQI/qf92J2Qr08ueLQvW00PUZGiuLPP760UINwupgUj8qrSCPUKg== + dependencies: + esbuild "~0.23.0" + get-tsconfig "^4.7.5" + optionalDependencies: + fsevents "~2.3.3" + +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w== + dependencies: + safe-buffer "^5.0.1" type-check@^0.4.0, type-check@~0.4.0: version "0.4.0" @@ -2881,6 +4291,11 @@ type-fest@^0.20.2: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== +type-fest@^0.21.3: + version "0.21.3" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" + integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== + type-fest@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" @@ -2891,6 +4306,11 @@ type-fest@^0.8.1: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== +typescript@5.4.2: + version "5.4.2" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.4.2.tgz#0ae9cebcfae970718474fe0da2c090cad6577372" + integrity sha512-+2/g0Fds1ERlP6JsakQQDXjZdZMM+rqpamFZJEKh4kwTIn3iDkgKtby0CeNd5ATNZ4Ry1ax15TMx0W2V+miizQ== + typescript@^5.5.4: version "5.5.4" resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.5.4.tgz#d9852d6c82bad2d2eda4fd74a5762a8f5909e9ba" @@ -2901,10 +4321,10 @@ ufo@^1.5.3: resolved "https://registry.yarnpkg.com/ufo/-/ufo-1.5.4.tgz#16d6949674ca0c9e0fbbae1fa20a71d7b1ded754" integrity sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ== -undici-types@~5.26.4: - version "5.26.5" - resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" - integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== +undici-types@~6.19.2: + version "6.19.8" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.19.8.tgz#35111c9d1437ab83a7cdc0abae2f26d88eda0a02" + integrity sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw== undici@^5.28.4: version "5.28.4" @@ -2925,6 +4345,20 @@ undici@^5.28.4: pathe "^1.1.2" ufo "^1.5.3" +unique-filename@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" + integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== + dependencies: + unique-slug "^2.0.0" + +unique-slug@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c" + integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w== + dependencies: + imurmurhash "^0.1.4" + unist-util-stringify-position@^2.0.0: version "2.0.3" resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz#cce3bfa1cdf85ba7375d1d5b17bdc4cada9bd9da" @@ -2932,6 +4366,16 @@ unist-util-stringify-position@^2.0.0: dependencies: "@types/unist" "^2.0.2" +universalify@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== + +universalify@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" + integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== + update-browserslist-db@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz#7ca61c0d8650766090728046e416a8cde682859e" @@ -2940,14 +4384,14 @@ update-browserslist-db@^1.1.0: escalade "^3.1.2" picocolors "^1.0.1" -uri-js@^4.2.2: +uri-js@^4.2.2, uri-js@^4.4.1: version "4.4.1" resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== dependencies: punycode "^2.1.0" -util-deprecate@^1.0.2: +util-deprecate@^1.0.1, util-deprecate@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== @@ -2960,17 +4404,97 @@ validate-npm-package-license@^3.0.1: spdx-correct "^3.0.0" spdx-expression-parse "^3.0.0" -vite@^5.2.10: - version "5.4.1" - resolved "https://registry.yarnpkg.com/vite/-/vite-5.4.1.tgz#2aa72370de824d23f53658affd807e4c9905b058" - integrity sha512-1oE6yuNXssjrZdblI9AfBbHCC41nnyoVoEZxQnID6yvQZAFBzxxkqoFLtHUMkYunL8hwOLEjgTuxpkRxvba3kA== +vite-plugin-checker@^0.7.2: + version "0.7.2" + resolved "https://registry.yarnpkg.com/vite-plugin-checker/-/vite-plugin-checker-0.7.2.tgz#093ffdf9ccf51b2c9eab7101480bd0217ae99536" + integrity sha512-xeYeJbG0gaCaT0QcUC4B2Zo4y5NR8ZhYenc5gPbttrZvraRFwkEADCYwq+BfEHl9zYz7yf85TxsiGoYwyyIjhw== + dependencies: + "@babel/code-frame" "^7.12.13" + ansi-escapes "^4.3.0" + chalk "^4.1.1" + chokidar "^3.5.1" + commander "^8.0.0" + fast-glob "^3.2.7" + fs-extra "^11.1.0" + npm-run-path "^4.0.1" + strip-ansi "^6.0.0" + tiny-invariant "^1.1.0" + vscode-languageclient "^7.0.0" + vscode-languageserver "^7.0.0" + vscode-languageserver-textdocument "^1.0.1" + vscode-uri "^3.0.2" + +vite-plugin-dts@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/vite-plugin-dts/-/vite-plugin-dts-4.0.3.tgz#0f452be5ea81a50fa27ade4e0f3a0d750873affc" + integrity sha512-+xnTsaONwU2kV6zhRjtbRJSGN41uFR/whqmcb4k4fftLFDJElxthp0PP5Fq8gMeM9ytWMt1yk5gGgekLREWYQQ== + dependencies: + "@microsoft/api-extractor" "7.47.4" + "@rollup/pluginutils" "^5.1.0" + "@volar/typescript" "^2.3.4" + "@vue/language-core" "2.0.29" + compare-versions "^6.1.1" + debug "^4.3.6" + kolorist "^1.8.0" + local-pkg "^0.5.0" + magic-string "^0.30.11" + vue-tsc "2.0.29" + +vite@^5.4.2: + version "5.4.2" + resolved "https://registry.yarnpkg.com/vite/-/vite-5.4.2.tgz#8acb6ec4bfab823cdfc1cb2d6c53ed311bc4e47e" + integrity sha512-dDrQTRHp5C1fTFzcSaMxjk6vdpKvT+2/mIdE07Gw2ykehT49O0z/VHS3zZ8iV/Gh8BJJKHWOe5RjaNrW5xf/GA== dependencies: esbuild "^0.21.3" postcss "^8.4.41" - rollup "^4.13.0" + rollup "^4.20.0" optionalDependencies: fsevents "~2.3.3" +vscode-jsonrpc@6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/vscode-jsonrpc/-/vscode-jsonrpc-6.0.0.tgz#108bdb09b4400705176b957ceca9e0880e9b6d4e" + integrity sha512-wnJA4BnEjOSyFMvjZdpiOwhSq9uDoK8e/kpRJDTaMYzwlkrhG1fwDIZI94CLsLzlCK5cIbMMtFlJlfR57Lavmg== + +vscode-languageclient@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/vscode-languageclient/-/vscode-languageclient-7.0.0.tgz#b505c22c21ffcf96e167799757fca07a6bad0fb2" + integrity sha512-P9AXdAPlsCgslpP9pRxYPqkNYV7Xq8300/aZDpO35j1fJm/ncize8iGswzYlcvFw5DQUx4eVk+KvfXdL0rehNg== + dependencies: + minimatch "^3.0.4" + semver "^7.3.4" + vscode-languageserver-protocol "3.16.0" + +vscode-languageserver-protocol@3.16.0: + version "3.16.0" + resolved "https://registry.yarnpkg.com/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.16.0.tgz#34135b61a9091db972188a07d337406a3cdbe821" + integrity sha512-sdeUoAawceQdgIfTI+sdcwkiK2KU+2cbEYA0agzM2uqaUy2UpnnGHtWTHVEtS0ES4zHU0eMFRGN+oQgDxlD66A== + dependencies: + vscode-jsonrpc "6.0.0" + vscode-languageserver-types "3.16.0" + +vscode-languageserver-textdocument@^1.0.1: + version "1.0.12" + resolved "https://registry.yarnpkg.com/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.12.tgz#457ee04271ab38998a093c68c2342f53f6e4a631" + integrity sha512-cxWNPesCnQCcMPeenjKKsOCKQZ/L6Tv19DTRIGuLWe32lyzWhihGVJ/rcckZXJxfdKCFvRLS3fpBIsV/ZGX4zA== + +vscode-languageserver-types@3.16.0: + version "3.16.0" + resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0.tgz#ecf393fc121ec6974b2da3efb3155644c514e247" + integrity sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA== + +vscode-languageserver@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/vscode-languageserver/-/vscode-languageserver-7.0.0.tgz#49b068c87cfcca93a356969d20f5d9bdd501c6b0" + integrity sha512-60HTx5ID+fLRcgdHfmz0LDZAXYEV68fzwG0JWwEPBode9NuMYTIxuYXPg4ngO8i8+Ou0lM7y6GzaYWbiDL0drw== + dependencies: + vscode-languageserver-protocol "3.16.0" + +vscode-uri@^3.0.2, vscode-uri@^3.0.8: + version "3.0.8" + resolved "https://registry.yarnpkg.com/vscode-uri/-/vscode-uri-3.0.8.tgz#1770938d3e72588659a172d0fd4642780083ff9f" + integrity sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw== + vue-eslint-parser@^9.4.3: version "9.4.3" resolved "https://registry.yarnpkg.com/vue-eslint-parser/-/vue-eslint-parser-9.4.3.tgz#9b04b22c71401f1e8bca9be7c3e3416a4bde76a8" @@ -2984,43 +4508,64 @@ vue-eslint-parser@^9.4.3: lodash "^4.17.21" semver "^7.3.6" -which@^2.0.1: +vue-tsc@2.0.29: + version "2.0.29" + resolved "https://registry.yarnpkg.com/vue-tsc/-/vue-tsc-2.0.29.tgz#bf7e9605af9fadec7fd6037d242217f5c6ad2c3b" + integrity sha512-MHhsfyxO3mYShZCGYNziSbc63x7cQ5g9kvijV7dRe1TTXBRLxXyL0FnXWpUF1xII2mJ86mwYpYsUmMwkmerq7Q== + dependencies: + "@volar/typescript" "~2.4.0-alpha.18" + "@vue/language-core" "2.0.29" + semver "^7.5.4" + +web-streams-polyfill@^3.0.3: + version "3.3.3" + resolved "https://registry.yarnpkg.com/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz#2073b91a2fdb1fbfbd401e7de0ac9f8214cecb4b" + integrity sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw== + +which@^2.0.1, which@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== dependencies: isexe "^2.0.0" +wide-align@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3" + integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg== + dependencies: + string-width "^1.0.2 || 2 || 3 || 4" + word-wrap@^1.2.5: version "1.2.5" resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34" integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== -workerd@1.20240725.0: - version "1.20240725.0" - resolved "https://registry.yarnpkg.com/workerd/-/workerd-1.20240725.0.tgz#df08269651c817548b0e503ae71535cd535ee1a3" - integrity sha512-VZwgejRcHsQ9FEPtc7v25ebINLAR+stL3q1hC1xByE+quskdoWpTXHkZwZ3IdSgvm9vPVbCbJw9p5mGnDByW2A== +workerd@1.20240821.1: + version "1.20240821.1" + resolved "https://registry.yarnpkg.com/workerd/-/workerd-1.20240821.1.tgz#783115daabb3f5e51e3833117ac83548f6fd79f9" + integrity sha512-y4phjCnEG96u8ZkgkkHB+gSw0i6uMNo23rBmixylWpjxDklB+LWD8dztasvsu7xGaZbLoTxQESdEw956F7VJDA== optionalDependencies: - "@cloudflare/workerd-darwin-64" "1.20240725.0" - "@cloudflare/workerd-darwin-arm64" "1.20240725.0" - "@cloudflare/workerd-linux-64" "1.20240725.0" - "@cloudflare/workerd-linux-arm64" "1.20240725.0" - "@cloudflare/workerd-windows-64" "1.20240725.0" + "@cloudflare/workerd-darwin-64" "1.20240821.1" + "@cloudflare/workerd-darwin-arm64" "1.20240821.1" + "@cloudflare/workerd-linux-64" "1.20240821.1" + "@cloudflare/workerd-linux-arm64" "1.20240821.1" + "@cloudflare/workerd-windows-64" "1.20240821.1" -wrangler@^3.69.1: - version "3.69.1" - resolved "https://registry.yarnpkg.com/wrangler/-/wrangler-3.69.1.tgz#4a89b3c5e407a839cd6c26de861bfdbc9d1b9cf9" - integrity sha512-lqgPsaxIP564OJE6f7RIS/iLy+WaY0EN89p2g83nkrPN6PjuC6vB3eC7jgeVZO1ntWjD0X+mEU5ggbERHr899w== +wrangler@^3.72.3: + version "3.72.3" + resolved "https://registry.yarnpkg.com/wrangler/-/wrangler-3.72.3.tgz#e958a77a9a125ff6f72f87493502078547c3ca31" + integrity sha512-EBlJGOcwanbzFkiJkRB47WKhvevh1AZK0ty0MyD0gptsgWnAxBfmFGiBuzOuRXbvH45ZrFrTqgi8c67EwcV1nA== dependencies: "@cloudflare/kv-asset-handler" "0.3.4" - "@cloudflare/workers-shared" "0.1.0" + "@cloudflare/workers-shared" "0.4.0" "@esbuild-plugins/node-globals-polyfill" "^0.2.3" "@esbuild-plugins/node-modules-polyfill" "^0.2.2" blake3-wasm "^2.1.5" chokidar "^3.5.3" date-fns "^3.6.0" esbuild "0.17.19" - miniflare "3.20240725.0" + miniflare "3.20240821.0" nanoid "^3.3.3" path-to-regexp "^6.2.0" resolve "^1.22.8" @@ -3028,7 +4573,7 @@ wrangler@^3.69.1: selfsigned "^2.0.1" source-map "^0.6.1" unenv "npm:unenv-nightly@1.10.0-1717606461.a117952" - workerd "1.20240725.0" + workerd "1.20240821.1" xxhash-wasm "^1.0.1" optionalDependencies: fsevents "~2.3.2" @@ -3042,6 +4587,11 @@ wrap-ansi@^7.0.0: string-width "^4.1.0" strip-ansi "^6.0.0" +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + ws@^8.17.1: version "8.18.0" resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.0.tgz#0d7505a6eafe2b0e712d232b42279f53bc289bbc" @@ -3062,6 +4612,11 @@ y18n@^5.0.5: resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + yaml-eslint-parser@^1.2.1, yaml-eslint-parser@^1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/yaml-eslint-parser/-/yaml-eslint-parser-1.2.3.tgz#3a8ae839fc8df376ef8497add7f40942b493389c"