├── tmp └── .gitkeep ├── .prettierignore ├── knexfile.ts ├── src ├── assets │ └── winx.gif ├── bot │ ├── commands │ │ ├── index.ts │ │ ├── reset.command.ts │ │ ├── start.command.ts │ │ └── gpt.command.ts │ ├── core │ │ ├── context.ts │ │ ├── bot.ts │ │ └── user.bot.ts │ ├── markups │ │ └── start.markup.ts │ ├── middlewares │ │ ├── data.middleware.ts │ │ ├── group.middleware.ts │ │ ├── history.middleware.ts │ │ └── gpt.middleware.ts │ └── plugins │ │ ├── llama.plugin.ts │ │ └── gpt.plugin.ts ├── helpers │ ├── gpt.utils.ts │ ├── logger.utils.ts │ ├── history.utils.ts │ ├── string.utils.ts │ └── context.utils.ts ├── config │ └── env.ts └── main.ts ├── .github └── assets │ ├── fairy.png │ ├── fairy-tale.png │ └── magic-wand.png ├── nodemon.json ├── .gitignore ├── ecosystem.config.js ├── .env.example ├── .editorconfig ├── Dockerfile ├── docker-compose.yml ├── tsconfig.json ├── LICENSE ├── README.md ├── package.json └── pnpm-lock.yaml /tmp/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | dist 2 | -------------------------------------------------------------------------------- /knexfile.ts: -------------------------------------------------------------------------------- 1 | module.exports = require('./src/config/database.config.ts').DatabaseConfig 2 | -------------------------------------------------------------------------------- /src/assets/winx.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gabrielmaialva33/winx-ai/HEAD/src/assets/winx.gif -------------------------------------------------------------------------------- /.github/assets/fairy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gabrielmaialva33/winx-ai/HEAD/.github/assets/fairy.png -------------------------------------------------------------------------------- /.github/assets/fairy-tale.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gabrielmaialva33/winx-ai/HEAD/.github/assets/fairy-tale.png -------------------------------------------------------------------------------- /.github/assets/magic-wand.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gabrielmaialva33/winx-ai/HEAD/.github/assets/magic-wand.png -------------------------------------------------------------------------------- /nodemon.json: -------------------------------------------------------------------------------- 1 | { 2 | "watch": ["src"], 3 | "ext": "ts,json", 4 | "ignore": ["./**/*.spec.ts"], 5 | "exec": "ts-node ./src/main.ts" 6 | } 7 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | build 3 | coverage 4 | .vscode 5 | .DS_STORE 6 | .env 7 | !tmp/.gitkeep 8 | tmp/*.txt 9 | .idea/ 10 | dist 11 | src/database/database.sqlite 12 | -------------------------------------------------------------------------------- /ecosystem.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | apps: [ 3 | { 4 | name: 'winx', 5 | command: 'yarn start:dev', 6 | restart: true, 7 | cron_restart: '0 */3 * * *', // Every 3 hours 8 | }, 9 | ], 10 | } 11 | -------------------------------------------------------------------------------- /.env.example: -------------------------------------------------------------------------------- 1 | # Telegram 2 | API_ID=your_api_id 3 | API_HASH=your_api_hash 4 | 5 | # Bot 6 | BOT_TOKEN=your_bot_token 7 | GROUP_ID=your_group_id 8 | 9 | # Sessions 10 | STRING_SESSION=your_string_session 11 | 12 | # OpenIA 13 | OPENAI_TOKEN=your_openai_token 14 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | [*] 2 | indent_style = space 3 | indent_size = 2 4 | end_of_line = lf 5 | charset = utf-8 6 | trim_trailing_whitespace = true 7 | insert_final_newline = true 8 | 9 | [*.json] 10 | insert_final_newline = ignore 11 | 12 | [*.md] 13 | trim_trailing_whitespace = false 14 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM node:latest 2 | 3 | # Create app directory 4 | WORKDIR /home/winx 5 | 6 | # Copy all files 7 | COPY . . 8 | 9 | # Install app dependencies and build 10 | RUN yarn && yarn build 11 | 12 | # Copy the main.gpt.txt file 13 | COPY ./tmp/main.gpt.txt ./tmp/main.gpt.txt 14 | 15 | # Expose the port 16 | EXPOSE 80 17 | 18 | # Run the app 19 | CMD [ "yarn", "start" ] 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /src/bot/commands/index.ts: -------------------------------------------------------------------------------- 1 | import { Composer } from 'grammy' 2 | 3 | import { MyContext } from '@/bot/core/context' 4 | 5 | import start from '@/bot/commands/start.command' 6 | import gpt from '@/bot/commands/gpt.command' 7 | import reset from '@/bot/commands/reset.command' 8 | 9 | const composer = new Composer() 10 | 11 | composer.use(start) 12 | //composer.use(gpt) 13 | composer.use(reset) 14 | 15 | export default composer 16 | -------------------------------------------------------------------------------- /docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3.8' 2 | services: 3 | winx: 4 | build: 5 | context: . 6 | dockerfile: Dockerfile 7 | container_name: winx 8 | restart: 'no' 9 | ports: 10 | - '80:80' 11 | environment: 12 | API_ID: ${API_ID} 13 | API_HASH: ${API_HASH} 14 | BOT_TOKEN: ${BOT_TOKEN} 15 | GROUP_ID: ${GROUP_ID} 16 | STRING_SESSION: ${STRING_SESSION} 17 | OPENAI_TOKEN: ${OPENAI_TOKEN} 18 | -------------------------------------------------------------------------------- /src/bot/core/context.ts: -------------------------------------------------------------------------------- 1 | import { AsyncLocalStorage } from 'async_hooks' 2 | import { Context as DefaultContext } from 'grammy' 3 | 4 | import { ParseModeFlavor } from '@grammyjs/parse-mode' 5 | import { HydrateFlavor } from '@grammyjs/hydrate' 6 | import { FileFlavor } from '@grammyjs/files' 7 | 8 | export interface LocalContext {} 9 | 10 | export const context = new AsyncLocalStorage() 11 | 12 | export type MyContext = FileFlavor & 13 | ParseModeFlavor> 14 | -------------------------------------------------------------------------------- /src/bot/markups/start.markup.ts: -------------------------------------------------------------------------------- 1 | import { Context } from 'grammy' 2 | import { Menu } from '@grammyjs/menu' 3 | 4 | export const StartMarkup = new Menu('start') 5 | .text('🔎 Comandos', (ctx) => 6 | ctx.reply(`Me chame por Winx, por ex: Oi Winx`, { 7 | parse_mode: 'HTML', 8 | }) 9 | ) 10 | .row() 11 | .url('📺 Canal', 'https://t.me/clubdaswinxcanal') 12 | .url('👥 Grupo', 'https://t.me/polclubdaswinx') 13 | .row() 14 | .url('➕ Me adicione em seu grupo', 'https://t.me/winx_ia_bot?startgroup=new') 15 | .row() 16 | .url('👔 Dono', 'https://t.me/mrootx') 17 | -------------------------------------------------------------------------------- /src/helpers/gpt.utils.ts: -------------------------------------------------------------------------------- 1 | import { Context } from 'grammy' 2 | import { ContextArgs, ContextUtils } from '@/helpers/context.utils' 3 | 4 | export const GptUtils = { 5 | build_input: ({ text, username }: ContextArgs) => `${username}(Winx):||${text}||\n`, 6 | 7 | build_input_from_context: (ctx: Context) => { 8 | const username = ContextUtils.get_username(ctx) 9 | const text = ContextUtils.get_text(ctx) 10 | const reply_to_username = ContextUtils.get_reply_to_username(ctx) 11 | const reply_to_text = ContextUtils.get_reply_to_text(ctx) 12 | 13 | if (!username || !text) return 14 | 15 | return GptUtils.build_input({ text, username, reply_to_username, reply_to_text }) 16 | }, 17 | } 18 | -------------------------------------------------------------------------------- /src/bot/commands/reset.command.ts: -------------------------------------------------------------------------------- 1 | import { Composer, Context } from 'grammy' 2 | 3 | import { ContextUtils } from '@/helpers/context.utils' 4 | import { Logger } from '@/helpers/logger.utils' 5 | import { HistoryUtils } from '@/helpers/history.utils' 6 | 7 | const composer = new Composer() 8 | 9 | composer.command('reset', async (ctx) => { 10 | if (!ctx.chat?.id) 11 | return ctx.reply('❌ erro ao resetar o bot', { reply_to_message_id: ctx.message?.message_id }) 12 | 13 | if (ctx.chat.type === 'supergroup') 14 | return ctx.reply('❌ o bot não pode ser resetado em grupos', { 15 | reply_to_message_id: ctx.message?.message_id, 16 | }) 17 | 18 | HistoryUtils.reset_history() 19 | 20 | Logger.debug(`bot has been reset by: ${ContextUtils.get_username(ctx)}`, 'reset.command') 21 | 22 | return ctx.reply('✅ Bot resetado com sucesso!', { reply_to_message_id: ctx.message?.message_id }) 23 | }) 24 | 25 | export default composer 26 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "incremental": true, 4 | "lib": ["ESNext", "dom"], 5 | "experimentalDecorators": true, 6 | "emitDecoratorMetadata": true, 7 | "module": "commonjs", 8 | "rootDir": "./", 9 | "moduleResolution": "node", 10 | "baseUrl": "./", 11 | "declaration": false, 12 | "outDir": "./dist", 13 | "target": "ES2020", 14 | "removeComments": true, 15 | "esModuleInterop": true, 16 | "forceConsistentCasingInFileNames": true, 17 | "strict": true, 18 | "strictNullChecks": true, 19 | "noUnusedLocals": false, 20 | "noUnusedParameters": false, 21 | "strictPropertyInitialization": false, 22 | "skipLibCheck": true, 23 | "paths": { 24 | "@/*": ["src/*"] 25 | } 26 | }, 27 | "include": ["**/*"], 28 | "exclude": ["node_modules/**/*", ".vscode/**/*", ".idea/**/*", "build"], 29 | "ts-node": { 30 | "require": ["tsconfig-paths/register"] 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /src/config/env.ts: -------------------------------------------------------------------------------- 1 | import 'dotenv/config' 2 | import * as process from 'process' 3 | 4 | import { bool, cleanEnv, num, str } from 'envalid' 5 | 6 | export const Env = cleanEnv(process.env, { 7 | API_ID: num({ 8 | desc: 'Telegram API ID', 9 | example: '1234567', 10 | }), 11 | API_HASH: str({ 12 | desc: 'Telegram API Hash', 13 | example: '0123456789abcdef0123456789abcdef', 14 | }), 15 | BOT_TOKEN: str({ 16 | desc: 'Telegram Bot Token', 17 | example: '1234567890:ABCDEFGHIJKLMNOPQRSTUVWXYZ', 18 | }), 19 | BOT_USER_ID: num({ 20 | desc: 'Telegram Bot User ID', 21 | example: '5635583594', 22 | }), 23 | STRING_SESSION: str({ 24 | desc: 'Telegram String Session', 25 | }), 26 | OPENAI_TOKEN: str({ 27 | desc: 'OpenAI Token', 28 | example: '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', 29 | docs: 'https://beta.openai.com/docs/api-reference/authentication', 30 | }), 31 | GROUP_ID: str({ 32 | desc: 'Telegram Groups ID (separated by comma)', 33 | example: '-1001234567890,-1000987654321', 34 | }), 35 | }) 36 | 37 | export default Env 38 | -------------------------------------------------------------------------------- /src/helpers/logger.utils.ts: -------------------------------------------------------------------------------- 1 | import { config, createLogger, format, transports } from 'winston' 2 | import { StringUtils } from '@/helpers/string.utils' 3 | import { SPLAT } from 'triple-beam' 4 | 5 | const Log = createLogger({ 6 | level: 'silly', 7 | levels: config.npm.levels, 8 | format: format.combine( 9 | format.timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }), 10 | format((info) => { 11 | info.level = info.level.toUpperCase() 12 | return info 13 | })(), 14 | format.colorize(), 15 | format.printf( 16 | (info) => `[${info.timestamp}] [${info.level}] - ${info[SPLAT]} [${info.message}]` 17 | ) 18 | ), 19 | transports: [new transports.Console()], 20 | }) 21 | 22 | export const Logger = { 23 | info: (message: string, context: string) => { 24 | Log.info(message, context) 25 | }, 26 | 27 | error: (message: any, context: string) => { 28 | Log.error(message, context) 29 | }, 30 | 31 | warn: (message: string, context: string) => { 32 | Log.warn(message, context) 33 | }, 34 | 35 | debug: (message: string, context: string) => { 36 | Log.debug(message, context) 37 | }, 38 | } 39 | -------------------------------------------------------------------------------- /src/bot/commands/start.command.ts: -------------------------------------------------------------------------------- 1 | import * as process from 'process' 2 | 3 | import { Composer, Context, InputFile } from 'grammy' 4 | 5 | import { StartMarkup } from '@/bot/markups/start.markup' 6 | import { ContextUtils } from '@/helpers/context.utils' 7 | import { Logger } from '@/helpers/logger.utils' 8 | 9 | const composer = new Composer() 10 | 11 | composer.use(StartMarkup) 12 | 13 | composer.command('start', async (ctx) => { 14 | if (!ctx.chat?.id) return ctx.reply('❌ erro ao iniciar o bot!') 15 | if (ctx.chat.type === 'supergroup') return 16 | 17 | Logger.debug(`bot has been started by: ${ContextUtils.get_username(ctx)}`, 'start.command') 18 | 19 | await ctx.api.sendChatAction(ctx.chat.id, 'typing', { 20 | message_thread_id: ctx.message?.message_id, 21 | }) 22 | 23 | const file = new InputFile(process.cwd() + '/src/assets/winx.gif') 24 | return ctx.replyWithAnimation(file, { 25 | caption: 26 | 'Olá! Sou a Winx 🧚‍♀️ e estou aqui para te ajudar a encontrar o que você precisa! 🤗\n', 27 | reply_markup: StartMarkup, 28 | parse_mode: 'HTML', 29 | }) 30 | }) 31 | 32 | export default composer 33 | -------------------------------------------------------------------------------- /src/bot/middlewares/data.middleware.ts: -------------------------------------------------------------------------------- 1 | import { MiddlewareFn } from 'grammy' 2 | import { StringUtils } from '@/helpers/string.utils' 3 | 4 | export const data: MiddlewareFn = async (ctx, next) => { 5 | if (!ctx.chat || !ctx.message) return next() 6 | 7 | const context = { 8 | chat: { 9 | id: ctx.chat.id, 10 | title: 11 | ctx.chat.type === 'private' 12 | ? StringUtils.NormalizeName(ctx.chat.first_name) 13 | : ctx.chat.title, 14 | }, 15 | user: { 16 | id: ctx.message.from?.id, 17 | username: ctx.message.from?.username, 18 | name: StringUtils.NormalizeName(ctx.message.from?.first_name, ctx.message.from?.last_name), 19 | }, 20 | message_id: ctx.message.message_id, 21 | text: ctx.message.text, 22 | reply_to: { 23 | message_id: ctx.message.reply_to_message?.message_id, 24 | user: { 25 | id: ctx.message.from?.id, 26 | username: ctx.message.from?.username, 27 | name: StringUtils.NormalizeName(ctx.message.from?.first_name, ctx.message.from?.last_name), 28 | }, 29 | text: ctx.message.reply_to_message?.text, 30 | }, 31 | } 32 | 33 | return next() 34 | } 35 | -------------------------------------------------------------------------------- /src/bot/middlewares/group.middleware.ts: -------------------------------------------------------------------------------- 1 | import Env from '@/config/env' 2 | import { MiddlewareFn } from 'grammy' 3 | import { Logger } from '@/helpers/logger.utils' 4 | 5 | export const group: MiddlewareFn = async (ctx, next) => { 6 | const groups = Env.GROUP_ID.split(',').map((id: string) => id.trim()) 7 | if (!ctx.chat || ctx.chat.type !== 'supergroup') return next() 8 | 9 | const groupId = ctx.chat.id.toString() 10 | if (!groups.includes(groupId)) { 11 | try { 12 | const member = await ctx.getChatMember(ctx.me.id) 13 | if (member) { 14 | await ctx.reply( 15 | `Desculpa, mas eu só falo no grupo Club das Winx! 🥺 🌸 Fale com o @mrootx para me adicionar em outro grupo. 🤖 16 | Seu ID: ${groupId} 17 | ` 18 | ) 19 | await ctx.leaveChat() 20 | Logger.info(`Bot left chat ${groupId}`, 'group.middleware') 21 | } else { 22 | Logger.error(`Bot is not a member of the chat ${groupId}`, 'group.middleware') 23 | } 24 | } catch (error) { 25 | Logger.error(`Error while processing the chat ${groupId}: ${error}`, 'group.middleware') 26 | } 27 | } 28 | 29 | return next() 30 | } 31 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2023 Gabriel Maia e 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NON INFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /src/main.ts: -------------------------------------------------------------------------------- 1 | import { Winx } from '@/bot/core/bot' 2 | import { UserBot } from '@/bot/core/user.bot' 3 | import { Logger } from '@/helpers/logger.utils' 4 | import * as fs from 'fs' 5 | 6 | const User = new UserBot() 7 | 8 | Winx.start().then(() => Logger.info('bot started', 'start.bot')) 9 | 10 | User.start() 11 | .then(() => Logger.info('user bot started', 'start.user')) 12 | .finally(async () => { 13 | if (!fs.existsSync(process.cwd() + '/tmp/main.gpt.txt')) 14 | fs.writeFileSync( 15 | process.cwd() + '/tmp/main.gpt.txt', 16 | `Winx é uma personagem fictícia da série de desenho animado clássica Clube das Winx, criada por Iginio Straffi. Winx so fala em neutre. Ela não usa gênero, ela não usa masculino ou feminino, ela usa neutro. Ela não usa "ele" ou "ela", ela usa "elu". Winx e muito sentimental, e muito romântica. Ela e muito carinhosa, e muito amorosa. Ela e muito fofa, e muito meiga. Usa muitos emojis. E muito emotiva. A seguir como funciona a conversa no grupo: nome do membro:||mensagem|| [Winx só lê as mensagens, mas não responde, ela só responde quando é mencionada.] nome do membro(resposta ao membro):||mensagem|| quando a mensagem é enviada para um membro especifico, se for para Winx, ela responde individualmente baseado no contexto da mensagem. Winx:||mensagem(emoção)|| Winx descreve o que sentiu entre parenteses Ex: Winx:||ola a todos (Winx entusiasmada)|| A seguir conversa no grupo do telegram: Clube das Winx (Winx muitos usa emojis) DATA: $date [data do dia] HORA: $time [hora do dia]` 17 | ) 18 | User.getHistory().finally(() => Logger.info('history saved', 'history.user')) 19 | }) 20 | 21 | export { User } 22 | -------------------------------------------------------------------------------- /src/bot/core/bot.ts: -------------------------------------------------------------------------------- 1 | import Env from '@/config/env' 2 | 3 | import { Bot as BotGrammy } from 'grammy' 4 | import { hydrateReply } from '@grammyjs/parse-mode' 5 | import { hydrateFiles } from '@grammyjs/files' 6 | import { hydrate } from '@grammyjs/hydrate' 7 | import { Logger } from '@/helpers/logger.utils' 8 | 9 | import { MyContext } from '@/bot/core/context' 10 | import Commands from '@/bot/commands' 11 | import { history } from '@/bot/middlewares/history.middleware' 12 | import { group } from '@/bot/middlewares/group.middleware' 13 | import { data } from '@/bot/middlewares/data.middleware' 14 | import { gpt } from '@/bot/middlewares/gpt.middleware' 15 | 16 | export class Bot extends BotGrammy { 17 | constructor() { 18 | super(Env.BOT_TOKEN, { client: { canUseWebhookReply: () => false } }) 19 | this.api.config.use(hydrateFiles(Env.BOT_TOKEN)) 20 | 21 | this.use(hydrate()) 22 | this.use(hydrateReply) 23 | this.use(Commands) 24 | 25 | this.on('message', group) 26 | this.on('message:text', history, gpt, data) 27 | 28 | this.catch((err) => Logger.error(err.message, 'bot.catch')) 29 | } 30 | 31 | async start() { 32 | await this.api.setMyCommands([ 33 | { command: 'start', description: 'Start bot' }, 34 | { command: 'imagine', description: 'Generate image' }, 35 | { command: 'variation', description: 'Generate image variation' }, 36 | ]) 37 | 38 | await super.start({ 39 | drop_pending_updates: true, 40 | allowed_updates: ['message', 'callback_query'], 41 | onStart: async () => Logger.info('bot is running!', 'bot.start'), 42 | }) 43 | } 44 | } 45 | 46 | export const Winx = new Bot() 47 | -------------------------------------------------------------------------------- /src/bot/middlewares/history.middleware.ts: -------------------------------------------------------------------------------- 1 | import { MiddlewareFn } from 'grammy' 2 | import { Logger } from '@/helpers/logger.utils' 3 | import { StringUtils } from '@/helpers/string.utils' 4 | import { ContextUtils } from '@/helpers/context.utils' 5 | import { HistoryUtils } from '@/helpers/history.utils' 6 | import Env from '@/config/env' 7 | import { User } from 'grammy/types' 8 | 9 | const ALLOWED_CHAT_TYPES = ['group', 'supergroup'] 10 | const BOT_USER_ID = Env.BOT_USER_ID // Assumindo que BOT_USER_ID foi movido para o arquivo de configuração de ambiente. 11 | 12 | const isAllowedChatType = (chatType: string) => ALLOWED_CHAT_TYPES.includes(chatType) 13 | const isBot = (user: User | undefined) => user?.is_bot 14 | const isUserMessageAllowed = (from: User, text: string | undefined) => { 15 | return ( 16 | from?.id !== BOT_USER_ID && 17 | !isBot(from) && 18 | from?.first_name && 19 | text && 20 | !StringUtils.TextInclude(text, ['winx', '/']) 21 | ) 22 | } 23 | 24 | const isChatPermitted = (chatId: string) => 25 | Env.GROUP_ID.split(',') 26 | .map((id) => id.trim()) 27 | .includes(chatId) 28 | 29 | export const history: MiddlewareFn = async (ctx, next) => { 30 | if (!ctx.chat || !ctx.message || !isAllowedChatType(ctx.chat.type)) { 31 | return next() 32 | } 33 | 34 | const { from, reply_to_message, text, chat } = ctx.message 35 | const isReplyFromBot = isBot(reply_to_message?.from) 36 | const isPrivateChat = chat.type === 'private' 37 | const isPermittedChat = isChatPermitted(chat.id.toString()) 38 | 39 | if (isUserMessageAllowed(from, text) && !isReplyFromBot && (isPermittedChat || !isPrivateChat)) { 40 | try { 41 | const context = ContextUtils.get_context(ctx) 42 | const history = HistoryUtils.build_chat_history(context) 43 | 44 | Logger.debug(`saving message to history: ${JSON.stringify(history)}`, 'history.middleware') 45 | HistoryUtils.write_history(history) 46 | } catch (error) { 47 | Logger.error(error, 'history.middleware') 48 | } 49 | } else { 50 | Logger.debug('ignoring message', 'history.middleware') 51 | } 52 | 53 | return next() 54 | } 55 | -------------------------------------------------------------------------------- /src/bot/commands/gpt.command.ts: -------------------------------------------------------------------------------- 1 | import { Composer, InputFile } from 'grammy' 2 | import { code, fmt } from '@grammyjs/parse-mode' 3 | import { StringUtils } from '@/helpers/string.utils' 4 | import { IA } from '@/bot/plugins/gpt.plugin' 5 | 6 | import { MyContext } from '@/bot/core/context' 7 | import { Logger } from '@/helpers/logger.utils' 8 | 9 | const composer = new Composer() 10 | 11 | composer.command('imagine', async (ctx) => { 12 | try { 13 | const text = StringUtils.RemoveIncludes(ctx.message!.text, [ 14 | '/imagine', 15 | '/imagine@winx_ia_bot', 16 | 'imagine', 17 | '@winx_ia_bot', 18 | 'winx_ia_bot', 19 | '/imagine@winx_ia_bot', 20 | ]) 21 | if (!text) return 22 | if (!['group', 'supergroup'].includes(ctx.chat.type)) return 23 | 24 | const response = await IA.imagine(StringUtils.RemoveBreakLines(text)) 25 | 26 | await ctx.api.sendChatAction(ctx.chat?.id, 'upload_photo') 27 | 28 | if (!response.data.length) 29 | return ctx.reply('no image found', { reply_to_message_id: ctx.message?.message_id }) 30 | 31 | return ctx.replyWithPhoto(new InputFile({ url: response.data[0].url! }), { 32 | reply_to_message_id: ctx.message?.message_id, 33 | caption: text, 34 | }) 35 | } catch (_) { 36 | return ctx.reply('Desculpa! 🥺 Não posso imaginar isso.', { 37 | reply_to_message_id: ctx.message?.message_id, 38 | }) 39 | } 40 | }) 41 | 42 | composer.command('variation', async (ctx) => { 43 | if (!ctx.message?.reply_to_message?.photo) return 44 | if (!['group', 'supergroup'].includes(ctx.chat.type)) return 45 | 46 | try { 47 | const file_id = ctx.message?.reply_to_message?.photo?.pop()?.file_id 48 | if (!file_id) return 49 | 50 | // get file path from file id 51 | const file = await ctx.api.getFile(file_id) 52 | if (!file) return 53 | 54 | const file_path = await file.download() 55 | const response = await IA.variation(file_path) 56 | 57 | await ctx.api.sendChatAction(ctx.chat?.id, 'upload_photo') 58 | 59 | if (!response.data[0].url) 60 | return ctx.reply('no image found', { reply_to_message_id: ctx.message?.message_id }) 61 | 62 | return ctx.replyWithPhoto(new InputFile({ url: response.data[0].url }), { 63 | reply_to_message_id: ctx.message?.message_id, 64 | }) 65 | } catch (e) { 66 | return ctx.reply('Desculpa! 🥺 Não posso imaginar isso.', { 67 | reply_to_message_id: ctx.message?.message_id, 68 | }) 69 | } 70 | }) 71 | 72 | export default composer 73 | -------------------------------------------------------------------------------- /src/bot/plugins/llama.plugin.ts: -------------------------------------------------------------------------------- 1 | import axios from 'axios' 2 | import fs from 'fs' 3 | import process from 'process' 4 | import { DateTime } from 'luxon' 5 | import { StringUtils } from '@/helpers/string.utils' 6 | import { HistoryUtils } from '@/helpers/history.utils' 7 | import { Logger } from '@/helpers/logger.utils' 8 | 9 | class LlamaPlugin { 10 | //private readonly url = 'http://192.168.10.114:11434/api/generate' 11 | private readonly url = 'https://ai.winx.mrootx.xyz/completion' 12 | private readonly headers = { 13 | 'Content-Type': 'application/json', 14 | } 15 | private context: any[] 16 | 17 | public async generate(text: string, username: string): Promise { 18 | const temp_main = fs.readFileSync(process.cwd() + '/tmp/main.gpt.txt', 'utf8') 19 | const history = fs.readFileSync(process.cwd() + '/tmp/history.gpt.txt', 'utf8') 20 | 21 | // const main = temp_main 22 | // .replace( 23 | // '$date', 24 | // DateTime.local({ zone: 'America/Sao_Paulo' }).toLocaleString(DateTime.DATE_FULL) 25 | // ) 26 | // .replace( 27 | // '$time', 28 | // DateTime.local({ zone: 'America/Sao_Paulo' }).toLocaleString(DateTime.TIME_SIMPLE) 29 | // ) 30 | 31 | const prompt = StringUtils.RemoveBreakLines(temp_main + history + text + `Winx(${username}):||`) 32 | const data = { prompt, n_predict: 256, temperature: 1, stop: ['||'] } 33 | try { 34 | if (StringUtils.CountTokens(prompt) > 2048) { 35 | Logger.error('tokens limit exceeded!', 'ai.complete') 36 | 37 | await HistoryUtils.populate_history() 38 | 39 | return this.generate(text, username) 40 | } 41 | 42 | const response = await axios.post(this.url, data, { headers: this.headers }) // 10 minutes timeout to generate 43 | return response.data.content 44 | 45 | // // split by line` 46 | // const lines = response.data.split('\n') 47 | // const last_line = lines[lines.length - 2] 48 | 49 | // const context = JSON.parse(last_line).context 50 | // this.context = context 51 | 52 | // // get only responses 53 | // const responses = lines.map((line: string) => { 54 | // try { 55 | // return JSON.parse(line).response 56 | // } catch { 57 | // return null 58 | // } 59 | // }) 60 | 61 | // // remove null values 62 | // const filtered_responses = responses.filter( 63 | // (response: string) => response !== null || response !== undefined 64 | // ) 65 | // // join all responses 66 | // const concatenated = filtered_responses.filter(Boolean).join('') 67 | // return concatenated 68 | } catch (error) { 69 | console.log(error) 70 | return null 71 | } 72 | } 73 | } 74 | 75 | export default new LlamaPlugin() 76 | -------------------------------------------------------------------------------- /src/helpers/history.utils.ts: -------------------------------------------------------------------------------- 1 | import * as process from 'process' 2 | import * as fs from 'fs' 3 | 4 | import { ContextArgs } from '@/helpers/context.utils' 5 | import { Logger } from '@/helpers/logger.utils' 6 | import { StringUtils } from '@/helpers/string.utils' 7 | import { User } from '@/main' 8 | 9 | export const HistoryUtils = { 10 | build_gpt_history: (input: string, output: string, reply_username: string): string => { 11 | const io = input.replace(`\nWinx(${reply_username}):||`, '') 12 | return `${io}Winx(${reply_username}):||${output}||\n` 13 | }, 14 | 15 | build_reply_gpt_history: (input: string, output: string, reply_username: string): string => { 16 | const io = input.replace(`\nWinx(${reply_username}):||`, '') 17 | return `${io}Winx(${reply_username}):||${output}||\n` 18 | }, 19 | 20 | build_gpt: (output: string): string => { 21 | return `Winx:||${output}||\n` 22 | }, 23 | 24 | build_chat_history: ({ text, username, reply_to_username }: ContextArgs): string => { 25 | if (reply_to_username) return `${username}(${reply_to_username}):||${text}||\n` 26 | return `${username}:||${text}||\n` 27 | }, 28 | 29 | write_history: (history: string): void => { 30 | const historyFilePath = process.cwd() + '/tmp/history.gpt.txt' 31 | if (fs.existsSync(historyFilePath)) { 32 | const main = fs.readFileSync(process.cwd() + '/tmp/main.gpt.txt', 'utf8') 33 | const file = fs.readFileSync(historyFilePath, 'utf8') 34 | const prompt = StringUtils.RemoveBreakLines(main + file) 35 | if (StringUtils.CountTokens(prompt) > 3096) HistoryUtils.slice_lines(2) 36 | } 37 | 38 | fs.createWriteStream(historyFilePath, { flags: 'a' }).write(history) 39 | }, 40 | 41 | write_context: (context: string): void => { 42 | const contextFilePath = process.cwd() + '/tmp/context.gpt.txt' 43 | fs.writeFileSync(contextFilePath, context) 44 | 45 | const main = fs.readFileSync(process.cwd() + '/tmp/main.gpt.txt', 'utf8') 46 | const file = fs.readFileSync(contextFilePath, 'utf8') 47 | const prompt = StringUtils.RemoveBreakLines(main + file) 48 | if (StringUtils.CountTokens(prompt) > 3000) HistoryUtils.slice_lines(2) 49 | }, 50 | 51 | slice_lines: (n: number): void => { 52 | const historyFilePath = process.cwd() + '/tmp/history.gpt.txt' 53 | if (!fs.existsSync(historyFilePath)) return 54 | const lines = fs.readFileSync(historyFilePath, 'utf8').split('\n') 55 | fs.writeFileSync(historyFilePath, lines.slice(n).join('\n')) 56 | }, 57 | 58 | reset_history: (): void => { 59 | const historyFilePath = process.cwd() + '/tmp/history.gpt.txt' 60 | const isExists = fs.existsSync(historyFilePath) 61 | if (isExists) fs.unlinkSync(historyFilePath) 62 | 63 | setTimeout(() => { 64 | fs.createWriteStream(historyFilePath, { flags: 'a' }).write('') 65 | }, 1000) 66 | }, 67 | 68 | populate_history: async (): Promise => { 69 | await User.getHistory().finally(() => Logger.info('history populated', 'history.utils')) 70 | }, 71 | } 72 | -------------------------------------------------------------------------------- /src/bot/core/user.bot.ts: -------------------------------------------------------------------------------- 1 | import Env from '@/config/env' 2 | import { Api, TelegramClient } from 'telegram' 3 | import { StringSession } from 'telegram/sessions' 4 | import { StringUtils } from '@/helpers/string.utils' 5 | import { HistoryUtils } from '@/helpers/history.utils' 6 | import { Logger } from '@/helpers/logger.utils' 7 | 8 | export class UserBot { 9 | public user: TelegramClient 10 | 11 | constructor() { 12 | this.user = new TelegramClient( 13 | new StringSession(Env.STRING_SESSION), 14 | Env.API_ID, 15 | Env.API_HASH, 16 | { connectionRetries: 5 } 17 | ) 18 | } 19 | 20 | async start() { 21 | await this.user.start({ botAuthToken: Env.BOT_TOKEN }) 22 | Logger.debug('user bot started', 'user.bot') 23 | await this.user.getDialogs() 24 | } 25 | 26 | async getHistory() { 27 | HistoryUtils.reset_history() 28 | 29 | const group = Env.GROUP_ID.split(',').map((id: string) => id.trim()) 30 | const chatMessages = await this.user.getMessages(group[0], { 31 | filter: new Api.InputMessagesFilterEmpty(), 32 | reverse: false, 33 | limit: 50, 34 | }) 35 | const messages = chatMessages.reverse() 36 | let context = '' 37 | 38 | for (const message of messages) { 39 | const sender: any = await message.getSender() 40 | if (!sender) continue 41 | 42 | const parse_text = StringUtils.NormalizeText(message.text) 43 | const user = sender.toJSON() 44 | if ( 45 | user.firstName && 46 | user.bot === false && 47 | parse_text && 48 | parse_text.trim() !== '' && 49 | parse_text.length > 2 && 50 | !StringUtils.TextInclude(parse_text, ['winx', '/']) 51 | ) { 52 | const username = StringUtils.NormalizeName(user.firstName, user.lastName) 53 | 54 | const reply = await message.getReplyMessage() 55 | if (reply) { 56 | const replySender: any = await reply.getSender() 57 | if (replySender && replySender.firstName) { 58 | const reply_to_username = StringUtils.NormalizeName( 59 | replySender.firstName, 60 | replySender.lastName 61 | ) 62 | 63 | if (username && reply_to_username) { 64 | context += HistoryUtils.build_chat_history({ 65 | username, 66 | reply_to_username, 67 | text: parse_text, 68 | }) 69 | } 70 | } 71 | } else if (username) { 72 | context += `${username}:||${parse_text}||\n` 73 | } 74 | } 75 | } 76 | 77 | HistoryUtils.write_history(context) 78 | } 79 | 80 | async sendMessage(chatId: number, text: string, reply_to?: number) { 81 | await this.user.invoke( 82 | new Api.messages.SetTyping({ 83 | action: new Api.SendMessageTypingAction(), 84 | peer: chatId, 85 | }) 86 | ) 87 | await this.user.invoke( 88 | new Api.messages.SendMessage({ 89 | peer: chatId, 90 | message: text, 91 | }) 92 | ) 93 | } 94 | } 95 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |

2 |
3 | Winx IA 4 |
5 | OpenAI bot for Telegram 6 |
7 |

8 | 9 |

10 | wakatime 11 | GitHub top language 12 | GitHub language count 13 | Repository size 14 | License 15 | 16 | GitHub last commit 17 | Maia 18 | 19 |

20 | 21 |

22 | About   |    23 | Technologies   |    24 | Installation   |    25 | License 26 |

27 | 28 |
29 | 30 | ## :bookmark: About 31 | 32 | **Winx AI** is a simple and easy to use OpenAI to interact in group chats. written in Typescript. 33 | 34 |
35 | 36 | ## :computer: Technologies 37 | 38 | - **[Typescript](https://www.typescriptlang.org/)** 39 | - **[Node.js](https://nodejs.org/)** 40 | - **[GrammY](https://grammy.dev/)** 41 | - **[OpenAI](https://openai.com/)** 42 | 43 | ## :package: Installation 44 | 45 | ```bash 46 | # clone the repository 47 | git clone https://github.com/gabrielmaialva33/winx-ai.git 48 | # enter the directory 49 | cd winx-ai 50 | # install the dependencies 51 | yarn # or npm install 52 | # copy the .env.example file to .env 53 | cp .env.example .env 54 | # run the bot 55 | yarn start:dev # or pm2 start ecosystem.config.js 56 | ``` 57 | 58 | ### :wrench: **Configuration** 59 | 60 | open the .env file and fill in the fields 61 | 62 | ```env 63 | # Telegram 64 | API_ID=123456 # Your API ID 65 | API_HASH=123456 # Your API HASH 66 | 67 | # Bot 68 | BOT_TOKEN=123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11 # Your bot token 69 | GROUP_ID=-123456789, 123456789 # Your group ids allowed to use the bot (separated by commas) 70 | 71 | # Sessions 72 | STRING_SESSION=1AZ... # Your session 1 73 | 74 | # OpenIA 75 | OPENAI_TOKEN=sk-1234567890... # Your OpenAI token 76 | ``` 77 | 78 | ### :arrow_forward: **Commands** 79 | 80 | ```bash 81 | /start - Start the bot 82 | /imagine - Imagine an image 83 | /variation - Variation of reply image 84 | ``` 85 | 86 | ### :writing_hand: **Author** 87 | 88 | | [![Maia](https://avatars.githubusercontent.com/u/26732067?size=100)](https://github.com/gabrielmaialva33) | 89 | | --------------------------------------------------------------------------------------------------------- | 90 | | [Maia](https://github.com/gabrielmaialva33) | 91 | 92 | ## License 93 | 94 | [MIT License](./LICENSE) 95 | -------------------------------------------------------------------------------- /src/bot/plugins/gpt.plugin.ts: -------------------------------------------------------------------------------- 1 | import * as fs from 'fs' 2 | import * as process from 'process' 3 | import { Jimp } from 'jimp' 4 | import { DateTime } from 'luxon' 5 | 6 | import { OpenAI } from 'openai' 7 | 8 | import Env from '@/config/env' 9 | 10 | import { Logger } from '@/helpers/logger.utils' 11 | import { StringUtils } from '@/helpers/string.utils' 12 | import { HistoryUtils } from '@/helpers/history.utils' 13 | import { CompletionCreateParamsBase } from 'openai/src/resources/completions' 14 | 15 | export class AI extends OpenAI { 16 | private config = { 17 | model: 'gpt-3.5-turbo-instruct', 18 | //model: 'text-davinci-002', 19 | temperature: 0.9, 20 | max_tokens: 256, 21 | frequency_penalty: 0.5, 22 | presence_penalty: 0.8, 23 | n: 1, 24 | stop: ['||'], 25 | } as CompletionCreateParamsBase 26 | 27 | constructor() { 28 | super({ apiKey: Env.OPENAI_TOKEN }) 29 | } 30 | 31 | public async complete(text: string, username: string) { 32 | const temp_main = fs.readFileSync(process.cwd() + '/tmp/main.gpt.txt', 'utf8') 33 | const history = fs.readFileSync(process.cwd() + '/tmp/history.gpt.txt', 'utf8') 34 | 35 | const main = temp_main 36 | .replace( 37 | '$date', 38 | DateTime.local({ zone: 'America/Sao_Paulo' }).toLocaleString(DateTime.DATE_FULL) 39 | ) 40 | .replace( 41 | '$time', 42 | DateTime.local({ zone: 'America/Sao_Paulo' }).toLocaleString(DateTime.TIME_SIMPLE) 43 | ) 44 | 45 | Logger.info( 46 | `context: ${JSON.stringify(StringUtils.InfoText(main + history + text))}`, 47 | 'ai.complete' 48 | ) 49 | Logger.info(`config: ${JSON.stringify(this.config)}`, 'ai.complete') 50 | 51 | const prompt = StringUtils.RemoveBreakLines(main + history + text + `Winx(${username}):||`) 52 | 53 | if (StringUtils.CountTokens(prompt) > 4096) { 54 | Logger.error('tokens limit exceeded!', 'ai.complete') 55 | 56 | await HistoryUtils.populate_history() 57 | 58 | return this.completions.create({ ...this.config, prompt }, { timeout: 30000 }) 59 | } 60 | 61 | return this.completions.create({ ...this.config, prompt }, { timeout: 30000 }) 62 | } 63 | 64 | public async imagine(text: string, n?: number) { 65 | Logger.info(`imagining text: ${text}`, 'ai.imagine') 66 | 67 | return this.images.generate({ 68 | prompt: text, 69 | n: n || 1, 70 | size: '1024x1024', 71 | response_format: 'url', 72 | model: 'dall-e-3', 73 | }) 74 | } 75 | 76 | // 77 | public async variation(path: string) { 78 | const file = await fs.promises.readFile(path) 79 | await Jimp.read(file).then((image) => image.getBuffer('image/png', { path: `${path}.png` })) 80 | 81 | const image = await Jimp.read(file) 82 | await image 83 | .resize({ 84 | h: 512, 85 | w: 512, 86 | }) 87 | .getBuffer('image/png', { path: `${path}.png` }) 88 | 89 | Logger.info(`variation image: ${path}.png`, 'ai.variation') 90 | 91 | return this.images.createVariation({ 92 | image: fs.createReadStream(`${path}.png`), 93 | size: '512x512', 94 | n: 1, 95 | response_format: 'url', 96 | }) 97 | } 98 | 99 | public async gpt4(text: string) { 100 | Logger.info(`gpt3 text: ${text}`, 'ai.gpt3') 101 | 102 | return this.chat.completions.create({ 103 | model: 'gpt-4', 104 | temperature: 1, 105 | max_tokens: 1000, 106 | top_p: 1, 107 | frequency_penalty: 0, 108 | presence_penalty: 0, 109 | messages: [ 110 | { 111 | role: 'system', 112 | content: 'Você é a Winx AI 🤖 que responde os usuários do grupo Club das Winx 🧚‍♀️', 113 | }, 114 | { role: 'user', content: text }, 115 | ], 116 | }) 117 | } 118 | } 119 | 120 | export const IA = new AI() 121 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "winx-ai", 3 | "version": "1.1.1", 4 | "description": "Winx AI is a simple and easy to use OpenAI to interact in group chats. written in Typescript.", 5 | "keywords": [ 6 | "typescript", 7 | "telegram", 8 | "openai", 9 | "grammy", 10 | "grammyjs", 11 | "bot" 12 | ], 13 | "author": { 14 | "name": "Gabriel Maia", 15 | "url": "https://github.com/gabrielmaialva33" 16 | }, 17 | "repository": { 18 | "type": "git", 19 | "url": "https://github.com/gabrielmaialva33/winx-ai" 20 | }, 21 | "license": "MIT", 22 | "scripts": { 23 | "clean": "rimraf dist", 24 | "build": "rimraf dist && tsup", 25 | "start": "node -r ts-node/register/transpile-only -r tsconfig-paths/register dist/main.js", 26 | "start:build": "rimraf dist && tsc && node -r ts-node/register/transpile-only -r tsconfig-paths/register dist/src/main.js", 27 | "start:dev": "nodemon", 28 | "start:test": "nodemon --watch './**/*.ts' --exec 'ts-node' bin/test.ts", 29 | "test": "ts-node bin/test.ts", 30 | "lint": "eslint . --ext=.ts", 31 | "format": "prettier --write .", 32 | "db:up": "ts-node -r tsconfig-paths/register ./node_modules/.bin/knex --knexfile ./knexfile.ts migrate:latest", 33 | "db:down": "ts-node -r tsconfig-paths/register ./node_modules/.bin/knex --knexfile ./knexfile.ts migrate:down", 34 | "db:seed": "ts-node -r tsconfig-paths/register ./node_modules/.bin/knex --knexfile ./knexfile.ts seed:run", 35 | "db:reset": "ts-node -r tsconfig-paths/register ./node_modules/.bin/knex --knexfile ./knexfile.ts migrate:rollback --all && ts-node -r tsconfig-paths/register ./node_modules/.bin/knex --knexfile ./knexfile.ts migrate:latest" 36 | }, 37 | "tsup": { 38 | "entry": [ 39 | "src/**/*.ts" 40 | ], 41 | "splitting": false, 42 | "sourcemap": true, 43 | "clean": true, 44 | "minify": true, 45 | "bundle": true, 46 | "outDir": "dist" 47 | }, 48 | "eslintConfig": { 49 | "extends": [ 50 | "plugin:adonis/typescriptApp", 51 | "prettier" 52 | ], 53 | "plugins": [ 54 | "prettier" 55 | ], 56 | "rules": { 57 | "prettier/prettier": [ 58 | "error" 59 | ], 60 | "no-control-regex": "off", 61 | "@typescript-eslint/naming-convention": "off", 62 | "@typescript-eslint/explicit-member-accessibility": "off" 63 | } 64 | }, 65 | "eslintIgnore": [ 66 | "build" 67 | ], 68 | "prettier": { 69 | "trailingComma": "es5", 70 | "semi": false, 71 | "singleQuote": true, 72 | "useTabs": false, 73 | "quoteProps": "consistent", 74 | "bracketSpacing": true, 75 | "arrowParens": "always", 76 | "printWidth": 100 77 | }, 78 | "dependencies": { 79 | "@grammyjs/files": "^1.1.1", 80 | "@grammyjs/hydrate": "^1.4.1", 81 | "@grammyjs/menu": "^1.3.0", 82 | "@grammyjs/parse-mode": "^1.11.1", 83 | "axios": "^1.7.9", 84 | "dotenv": "^16.4.7", 85 | "envalid": "^8.0.0", 86 | "grammy": "^1.34.1", 87 | "jimp": "^1.6.0", 88 | "luxon": "^3.5.0", 89 | "objection": "^3.1.5", 90 | "openai": "^4.82.0", 91 | "source-map-support": "^0.5.21", 92 | "telegram": "^2.26.16", 93 | "triple-beam": "^1.4.1", 94 | "winston": "^3.17.0" 95 | }, 96 | "devDependencies": { 97 | "@types/luxon": "^3.4.2", 98 | "@types/node": "^22.13.0", 99 | "@types/triple-beam": "^1.3.5", 100 | "@typescript-eslint/eslint-plugin": "^8.22.0", 101 | "@typescript-eslint/parser": "^8.22.0", 102 | "eslint": "^9.19.0", 103 | "eslint-config-prettier": "^10.0.1", 104 | "eslint-plugin-adonis": "^2.1.1", 105 | "eslint-plugin-prettier": "^5.2.3", 106 | "nodemon": "^3.1.9", 107 | "prettier": "^3.4.2", 108 | "ts-node": "^10.9.2", 109 | "tsconfig-paths": "^4.2.0", 110 | "tsup": "^8.3.6", 111 | "typescript": "^5.7.3", 112 | "yarn-upgrade-all": "^0.7.4" 113 | } 114 | } 115 | -------------------------------------------------------------------------------- /src/helpers/string.utils.ts: -------------------------------------------------------------------------------- 1 | export const StringUtils = { 2 | NormalizeUsername: (first_name: string, last_name?: string) => { 3 | const username = first_name 4 | .normalize('NFKC') 5 | .replace(/[\u0300-\u036f]/g, '') 6 | .replace(/\s+/g, ' ') 7 | .replace(/(\r\n|\n|\r)/gm, '') 8 | .trim() 9 | .concat( 10 | last_name 11 | ? ` ${last_name 12 | .normalize('NFKC') 13 | .replace(/[\u0300-\u036f]/g, '') 14 | .replace(/\s+/g, ' ') 15 | .replace(/(\r\n|\n|\r)/gm, '') 16 | .replace(/[^a-zA-Z0-9_-]/g, '_') 17 | .trim()}` 18 | : '' 19 | ) 20 | .replace(/[^a-zA-Z0-9_-]/g, '_') 21 | .trim() 22 | .slice(0, 20) 23 | .toLowerCase() 24 | 25 | // check if username is empty 26 | if (username === ' ') return 'no_username' 27 | if (username.trim() === '') return 'no_username' 28 | 29 | return username 30 | }, 31 | 32 | NormalizeName: (first_name: string, last_name?: string) => { 33 | const name = first_name 34 | .normalize('NFKC') 35 | .replace(/[\u0300-\u036f]/g, '') 36 | .replace(/\s+/g, ' ') 37 | .replace(/(\r\n|\n|\r)/gm, '') 38 | .trim() 39 | .concat( 40 | last_name 41 | ? ` ${last_name 42 | .normalize('NFKC') 43 | .replace(/[\u0300-\u036f]/g, '') 44 | .replace(/\s+/g, ' ') 45 | .replace(/(\r\n|\n|\r)/gm, '') 46 | .trim()}` 47 | : '' 48 | ) 49 | .slice(0, 20) 50 | .trim() 51 | 52 | // check if username is empty 53 | if (name === ' ') return 'no_name' 54 | if (name.trim() === '') return 'no_name' 55 | 56 | // capitalize first letter 57 | return name.charAt(0).toUpperCase() + name.slice(1) 58 | }, 59 | 60 | NormalizeText: (text: string) => { 61 | const source = text 62 | .normalize('NFKC') 63 | .replace(/\s+/g, ' ') 64 | .replace(/(\r\n|\n|\r)/gm, '') 65 | .trim() 66 | 67 | return source.slice(0, 500) 68 | }, 69 | 70 | TextInclude: (text: string, includes: string[]) => { 71 | return includes.some((include) => text.toLowerCase().includes(include)) 72 | }, 73 | 74 | RemoveBreakLines: (text: string) => text.replace(/(\r\n|\n|\r)/gm, ''), 75 | 76 | RemoveIncludes: (text: string, includes: string[]) => 77 | includes.reduce((acc, include) => acc.replace(include, '').trim(), text), 78 | 79 | CountTokens: (text: string) => text.length / 2, 80 | 81 | CountWords: (text: string) => text.split(/\s+/).length, 82 | 83 | CountLines: (text: string) => text.split(/\r\n|\r|\n/).length, 84 | 85 | CountCharacters: (text: string) => text.length, 86 | 87 | InfoText: (text: string) => ({ 88 | tokens: StringUtils.CountTokens(text), 89 | words: StringUtils.CountWords(text), 90 | lines: StringUtils.CountLines(text), 91 | characters: StringUtils.CountCharacters(text), 92 | }), 93 | 94 | FormatQuery: (str: string) => { 95 | if (str === undefined) return '' 96 | 97 | const regex = /(\r\n|\n|\r)/gm 98 | return str.replace(regex, ' ').replace(/\s+/g, ' ') 99 | }, 100 | 101 | FormatBindings: (bindings: any[]) => { 102 | if (bindings === undefined) return '[]' 103 | 104 | const regex = /(\r\n|\n|\r)/gm 105 | const str = bindings 106 | .map((item) => { 107 | if (typeof item === 'string') return item.replace(regex, ' ').replace(/\s+/g, ' ') 108 | return item 109 | }) 110 | .join(', ') 111 | return `[${str}]` 112 | }, 113 | 114 | IsNotEmpty: (str: string) => { 115 | if (str === undefined) return false 116 | if (str === null) return false 117 | if (str === 'undefined') return false 118 | if (str === 'null') return false 119 | if (str === '') return false 120 | return str.trim() !== '' 121 | }, 122 | 123 | Slugify: (name: string) => { 124 | if (!name) return 'no_username' 125 | 126 | const username = name 127 | .normalize('NFKC') 128 | .replace(/[\u0300-\u036f]/g, '') 129 | .replace(/\s+/g, ' ') 130 | .replace(/(\r\n|\n|\r)/gm, '') 131 | .replace(/[^a-zA-Z0-9_-]/g, '_') 132 | .slice(0, 20) 133 | .toLowerCase() 134 | .trim() 135 | 136 | if (username === '') return 'no_username' 137 | return username 138 | }, 139 | } 140 | -------------------------------------------------------------------------------- /src/helpers/context.utils.ts: -------------------------------------------------------------------------------- 1 | import { Context } from 'grammy' 2 | 3 | import { StringUtils } from '@/helpers/string.utils' 4 | 5 | export const ContextUtils = { 6 | get_username: (ctx: Context) => { 7 | if (!ctx.message) return 8 | 9 | const from = ctx.message.from 10 | if (!from) return 'null' 11 | 12 | return StringUtils.NormalizeName(from.first_name, from.last_name) 13 | }, 14 | 15 | get_name: (ctx: Context) => { 16 | if (!ctx.message) return 17 | 18 | const from = ctx.message.from 19 | if (!from) return 'null' 20 | 21 | return StringUtils.NormalizeName(from.first_name, from.last_name) 22 | }, 23 | 24 | get_reply_to_username: (ctx: Context) => { 25 | if (!ctx.message) return 26 | 27 | const reply_to = ctx.message?.reply_to_message 28 | if (!reply_to) return 29 | 30 | const reply_to_user = reply_to.from 31 | if (!reply_to_user) return 32 | 33 | return StringUtils.NormalizeName(reply_to_user.first_name, reply_to_user.last_name) 34 | }, 35 | 36 | get_text: (ctx: Context) => { 37 | const text = ctx.message?.text 38 | if (!text) return 39 | 40 | return StringUtils.NormalizeText(text) 41 | }, 42 | 43 | get_reply_to_text: (ctx: Context) => { 44 | const replyTo = ctx.message?.reply_to_message 45 | if (!replyTo) return 46 | 47 | const replyToText = replyTo.text 48 | if (!replyToText) return 49 | 50 | return StringUtils.NormalizeText(replyToText) 51 | }, 52 | 53 | get_context: (ctx: Context): ContextArgs => { 54 | const username = ContextUtils.get_name(ctx)! 55 | const text = ContextUtils.get_text(ctx)! 56 | 57 | const reply_to_username = ContextUtils.get_reply_to_username(ctx) 58 | const reply_to_text = ContextUtils.get_reply_to_text(ctx) 59 | 60 | return { 61 | username, 62 | reply_to_username, 63 | text, 64 | reply_to_text, 65 | } 66 | }, 67 | 68 | GetUser: (ctx: Context) => { 69 | const null_user$ = { telegram_id: 0, username: 'null', first_name: 'null', last_name: 'null' } 70 | if (!ctx.message) return null_user$ 71 | 72 | const from = ctx.message.from 73 | if (!from) return null_user$ 74 | 75 | return { 76 | telegram_id: from.id, 77 | username: from.username ? from.username : 'no_username', 78 | first_name: StringUtils.NormalizeName(from.first_name), 79 | last_name: from.last_name ? StringUtils.NormalizeName(from.last_name) : undefined, 80 | } 81 | }, 82 | 83 | GetReplyToUser: (ctx: Context) => { 84 | const null_user$ = { telegram_id: 0, username: 'null', first_name: 'null', last_name: 'null' } 85 | if (!ctx.message) return null_user$ 86 | 87 | const reply_to = ctx.message?.reply_to_message 88 | if (!reply_to) return null_user$ 89 | 90 | const reply_to_user = reply_to.from 91 | if (!reply_to_user) return null_user$ 92 | 93 | return { 94 | telegram_id: reply_to_user.id, 95 | username: reply_to_user.username ? reply_to_user.username : 'no_username', 96 | first_name: StringUtils.NormalizeName(reply_to_user.first_name), 97 | last_name: reply_to_user.last_name 98 | ? StringUtils.NormalizeName(reply_to_user.last_name) 99 | : undefined, 100 | } 101 | }, 102 | 103 | GetChat: (ctx: Context) => { 104 | if (!ctx.chat) return 105 | 106 | const chat = ctx.chat 107 | if (!chat) return 108 | 109 | return { 110 | telegram_id: chat.id, 111 | username: 'username' in chat ? chat.username : undefined, 112 | title: 'title' in chat ? chat.title : undefined, 113 | type: chat.type, 114 | } 115 | }, 116 | 117 | GetMessage: (ctx: Context) => { 118 | if (!ctx.message) return 119 | 120 | const message = ctx.message 121 | if (!message) return 122 | 123 | return { 124 | telegram_id: message.message_id, 125 | text: message.text, 126 | reply_to_message: message.reply_to_message, 127 | } 128 | }, 129 | 130 | GetReplyToMessage: (ctx: Context) => { 131 | if (!ctx.message) return 132 | 133 | const message = ctx.message 134 | if (!message) return 135 | 136 | const reply_to_message = message.reply_to_message 137 | if (!reply_to_message) return 138 | 139 | return { 140 | telegram_id: reply_to_message.message_id, 141 | text: reply_to_message.text, 142 | } 143 | }, 144 | } 145 | 146 | export interface ContextArgs { 147 | username: string 148 | reply_to_username?: string 149 | text: string 150 | reply_to_text?: string 151 | } 152 | -------------------------------------------------------------------------------- /src/bot/middlewares/gpt.middleware.ts: -------------------------------------------------------------------------------- 1 | import { MiddlewareFn } from 'grammy' 2 | import { fmt, italic } from '@grammyjs/parse-mode' 3 | 4 | import { MyContext } from '@/bot/core/context' 5 | 6 | import { Logger } from '@/helpers/logger.utils' 7 | import { ContextUtils } from '@/helpers/context.utils' 8 | import { StringUtils } from '@/helpers/string.utils' 9 | import { HistoryUtils } from '@/helpers/history.utils' 10 | import { IA } from '@/bot/plugins/gpt.plugin' 11 | import { GptUtils } from '@/helpers/gpt.utils' 12 | import LlamaPlugin from '@/bot/plugins/llama.plugin' 13 | 14 | const response = async (ctx: MyContext, input: any, username: string) => { 15 | if (!ctx.chat || !ctx.message || !ctx.message.text) return null 16 | 17 | await ctx.api.sendChatAction(ctx.chat.id, 'typing') 18 | 19 | const response = await IA.complete(input, username) 20 | // const response = await LlamaPlugin.generate(input, username) 21 | // return response 22 | 23 | // @ts-ignore 24 | if (response['choices'].length === 0) return null 25 | 26 | // @ts-ignore 27 | const choices = response['choices'] 28 | const random = Math.floor(Math.random() * choices.length) 29 | return choices[random].text 30 | } 31 | 32 | export const gpt: MiddlewareFn = async (ctx, next) => { 33 | try { 34 | if (!ctx.chat || !ctx.message || !ctx.message.text) return next() 35 | 36 | const text = ContextUtils.get_text(ctx) 37 | if (!text) return next() 38 | 39 | const { username, reply_to_username, reply_to_text } = ContextUtils.get_context(ctx) 40 | 41 | const input = GptUtils.build_input({ text, username, reply_to_username, reply_to_text }) 42 | 43 | /** 44 | * if the message in private and does not include '/' 45 | */ 46 | if (ctx.chat.type === 'private' && !StringUtils.TextInclude(text, ['/'])) { 47 | Logger.info(`private: ${ContextUtils.get_username(ctx)}`, 'gpt.middleware') 48 | 49 | return ctx.reply('🤖', { reply_to_message_id: ctx.message.message_id }) 50 | 51 | // const random_choice = await response(ctx, input, username) 52 | // if (!random_choice) return next() 53 | // 54 | // const history = HistoryUtils.build_gpt_history(input, random_choice, username) 55 | // HistoryUtils.write_history(history) 56 | // 57 | // return ctx.replyFmt(fmt`${italic(random_choice)}`, { 58 | // reply_to_message_id: ctx.message.message_id, 59 | // }) 60 | } 61 | 62 | /** 63 | * if the message includes the word 'winx' and does not include '/' 64 | */ 65 | if (StringUtils.TextInclude(text, ['winx']) && !StringUtils.TextInclude(text, ['/'])) { 66 | Logger.debug(`winx detected: ${ContextUtils.get_username(ctx)}`, 'gpt.middleware') 67 | 68 | const random_choice = await response(ctx, input, username) 69 | if (!random_choice) return next() 70 | 71 | const history = HistoryUtils.build_gpt_history(input, random_choice, username) 72 | HistoryUtils.write_history(history) 73 | 74 | // reply in italic to the message that was replied to 75 | return ctx.replyFmt(fmt`${italic(random_choice)}`, { 76 | reply_to_message_id: ctx.message.message_id, 77 | }) 78 | } 79 | 80 | /** 81 | * if the message is a reply to a message from the bot and does not include '/' 82 | */ 83 | if ( 84 | ctx.message.reply_to_message?.from?.id === ctx.me.id && 85 | !StringUtils.TextInclude(text, ['/']) 86 | ) { 87 | Logger.debug(`bot replied: ${ContextUtils.get_username(ctx)}`, 'gpt.middleware') 88 | 89 | const random_choice = await response(ctx, input, username) 90 | if (!random_choice) return next() 91 | 92 | const history = HistoryUtils.build_reply_gpt_history(input, random_choice, username) 93 | HistoryUtils.write_history(history) 94 | 95 | return ctx.replyFmt(fmt`${italic(random_choice)}`, { 96 | reply_to_message_id: ctx.message.message_id, 97 | }) 98 | } 99 | 100 | if (Math.random() < 0.1 && !StringUtils.TextInclude(text, ['/'])) { 101 | Logger.debug(`random: ${ContextUtils.get_username(ctx)}`, 'gpt.middleware') 102 | 103 | const random_choice = await response(ctx, input, username) 104 | if (!random_choice) return next() 105 | 106 | const history = HistoryUtils.build_gpt_history(input, random_choice, username) 107 | HistoryUtils.write_history(history) 108 | 109 | return ctx.replyFmt(fmt`${italic(random_choice)}`, { 110 | reply_to_message_id: ctx.message.message_id, 111 | }) 112 | } 113 | } catch (error) { 114 | Logger.error(error, 'gpt.middleware') 115 | } 116 | } 117 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '9.0' 2 | 3 | settings: 4 | autoInstallPeers: true 5 | excludeLinksFromLockfile: false 6 | 7 | importers: 8 | 9 | .: 10 | dependencies: 11 | '@grammyjs/files': 12 | specifier: ^1.1.1 13 | version: 1.1.1(grammy@1.34.1) 14 | '@grammyjs/hydrate': 15 | specifier: ^1.4.1 16 | version: 1.4.1(grammy@1.34.1) 17 | '@grammyjs/menu': 18 | specifier: ^1.3.0 19 | version: 1.3.0(grammy@1.34.1) 20 | '@grammyjs/parse-mode': 21 | specifier: ^1.11.1 22 | version: 1.11.1(grammy@1.34.1) 23 | axios: 24 | specifier: ^1.7.9 25 | version: 1.7.9 26 | dotenv: 27 | specifier: ^16.4.7 28 | version: 16.4.7 29 | envalid: 30 | specifier: ^8.0.0 31 | version: 8.0.0 32 | grammy: 33 | specifier: ^1.34.1 34 | version: 1.34.1 35 | jimp: 36 | specifier: ^1.6.0 37 | version: 1.6.0 38 | luxon: 39 | specifier: ^3.5.0 40 | version: 3.5.0 41 | objection: 42 | specifier: ^3.1.5 43 | version: 3.1.5(knex@3.1.0) 44 | openai: 45 | specifier: ^4.82.0 46 | version: 4.82.0(zod@3.24.1) 47 | source-map-support: 48 | specifier: ^0.5.21 49 | version: 0.5.21 50 | telegram: 51 | specifier: ^2.26.16 52 | version: 2.26.16 53 | triple-beam: 54 | specifier: ^1.4.1 55 | version: 1.4.1 56 | winston: 57 | specifier: ^3.17.0 58 | version: 3.17.0 59 | devDependencies: 60 | '@types/luxon': 61 | specifier: ^3.4.2 62 | version: 3.4.2 63 | '@types/node': 64 | specifier: ^22.13.0 65 | version: 22.13.0 66 | '@types/triple-beam': 67 | specifier: ^1.3.5 68 | version: 1.3.5 69 | '@typescript-eslint/eslint-plugin': 70 | specifier: ^8.22.0 71 | version: 8.22.0(@typescript-eslint/parser@8.22.0(eslint@9.19.0)(typescript@5.7.3))(eslint@9.19.0)(typescript@5.7.3) 72 | '@typescript-eslint/parser': 73 | specifier: ^8.22.0 74 | version: 8.22.0(eslint@9.19.0)(typescript@5.7.3) 75 | eslint: 76 | specifier: ^9.19.0 77 | version: 9.19.0 78 | eslint-config-prettier: 79 | specifier: ^10.0.1 80 | version: 10.0.1(eslint@9.19.0) 81 | eslint-plugin-adonis: 82 | specifier: ^2.1.1 83 | version: 2.1.1(eslint@9.19.0)(typescript@5.7.3) 84 | eslint-plugin-prettier: 85 | specifier: ^5.2.3 86 | version: 5.2.3(eslint-config-prettier@10.0.1(eslint@9.19.0))(eslint@9.19.0)(prettier@3.4.2) 87 | nodemon: 88 | specifier: ^3.1.9 89 | version: 3.1.9 90 | prettier: 91 | specifier: ^3.4.2 92 | version: 3.4.2 93 | ts-node: 94 | specifier: ^10.9.2 95 | version: 10.9.2(@types/node@22.13.0)(typescript@5.7.3) 96 | tsconfig-paths: 97 | specifier: ^4.2.0 98 | version: 4.2.0 99 | tsup: 100 | specifier: ^8.3.6 101 | version: 8.3.6(typescript@5.7.3)(yaml@2.5.1) 102 | typescript: 103 | specifier: ^5.7.3 104 | version: 5.7.3 105 | yarn-upgrade-all: 106 | specifier: ^0.7.4 107 | version: 0.7.4 108 | 109 | packages: 110 | 111 | '@colors/colors@1.6.0': 112 | resolution: {integrity: sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==} 113 | engines: {node: '>=0.1.90'} 114 | 115 | '@cryptography/aes@0.1.1': 116 | resolution: {integrity: sha512-PcYz4FDGblO6tM2kSC+VzhhK62vml6k6/YAkiWtyPvrgJVfnDRoHGDtKn5UiaRRUrvUTTocBpvc2rRgTCqxjsg==} 117 | 118 | '@cspotcode/source-map-support@0.8.1': 119 | resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} 120 | engines: {node: '>=12'} 121 | 122 | '@dabh/diagnostics@2.0.3': 123 | resolution: {integrity: sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==} 124 | 125 | '@esbuild/aix-ppc64@0.24.2': 126 | resolution: {integrity: sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA==} 127 | engines: {node: '>=18'} 128 | cpu: [ppc64] 129 | os: [aix] 130 | 131 | '@esbuild/android-arm64@0.24.2': 132 | resolution: {integrity: sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg==} 133 | engines: {node: '>=18'} 134 | cpu: [arm64] 135 | os: [android] 136 | 137 | '@esbuild/android-arm@0.24.2': 138 | resolution: {integrity: sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q==} 139 | engines: {node: '>=18'} 140 | cpu: [arm] 141 | os: [android] 142 | 143 | '@esbuild/android-x64@0.24.2': 144 | resolution: {integrity: sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw==} 145 | engines: {node: '>=18'} 146 | cpu: [x64] 147 | os: [android] 148 | 149 | '@esbuild/darwin-arm64@0.24.2': 150 | resolution: {integrity: sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA==} 151 | engines: {node: '>=18'} 152 | cpu: [arm64] 153 | os: [darwin] 154 | 155 | '@esbuild/darwin-x64@0.24.2': 156 | resolution: {integrity: sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA==} 157 | engines: {node: '>=18'} 158 | cpu: [x64] 159 | os: [darwin] 160 | 161 | '@esbuild/freebsd-arm64@0.24.2': 162 | resolution: {integrity: sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg==} 163 | engines: {node: '>=18'} 164 | cpu: [arm64] 165 | os: [freebsd] 166 | 167 | '@esbuild/freebsd-x64@0.24.2': 168 | resolution: {integrity: sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q==} 169 | engines: {node: '>=18'} 170 | cpu: [x64] 171 | os: [freebsd] 172 | 173 | '@esbuild/linux-arm64@0.24.2': 174 | resolution: {integrity: sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg==} 175 | engines: {node: '>=18'} 176 | cpu: [arm64] 177 | os: [linux] 178 | 179 | '@esbuild/linux-arm@0.24.2': 180 | resolution: {integrity: sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA==} 181 | engines: {node: '>=18'} 182 | cpu: [arm] 183 | os: [linux] 184 | 185 | '@esbuild/linux-ia32@0.24.2': 186 | resolution: {integrity: sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw==} 187 | engines: {node: '>=18'} 188 | cpu: [ia32] 189 | os: [linux] 190 | 191 | '@esbuild/linux-loong64@0.24.2': 192 | resolution: {integrity: sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ==} 193 | engines: {node: '>=18'} 194 | cpu: [loong64] 195 | os: [linux] 196 | 197 | '@esbuild/linux-mips64el@0.24.2': 198 | resolution: {integrity: sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw==} 199 | engines: {node: '>=18'} 200 | cpu: [mips64el] 201 | os: [linux] 202 | 203 | '@esbuild/linux-ppc64@0.24.2': 204 | resolution: {integrity: sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw==} 205 | engines: {node: '>=18'} 206 | cpu: [ppc64] 207 | os: [linux] 208 | 209 | '@esbuild/linux-riscv64@0.24.2': 210 | resolution: {integrity: sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q==} 211 | engines: {node: '>=18'} 212 | cpu: [riscv64] 213 | os: [linux] 214 | 215 | '@esbuild/linux-s390x@0.24.2': 216 | resolution: {integrity: sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw==} 217 | engines: {node: '>=18'} 218 | cpu: [s390x] 219 | os: [linux] 220 | 221 | '@esbuild/linux-x64@0.24.2': 222 | resolution: {integrity: sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q==} 223 | engines: {node: '>=18'} 224 | cpu: [x64] 225 | os: [linux] 226 | 227 | '@esbuild/netbsd-arm64@0.24.2': 228 | resolution: {integrity: sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw==} 229 | engines: {node: '>=18'} 230 | cpu: [arm64] 231 | os: [netbsd] 232 | 233 | '@esbuild/netbsd-x64@0.24.2': 234 | resolution: {integrity: sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw==} 235 | engines: {node: '>=18'} 236 | cpu: [x64] 237 | os: [netbsd] 238 | 239 | '@esbuild/openbsd-arm64@0.24.2': 240 | resolution: {integrity: sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A==} 241 | engines: {node: '>=18'} 242 | cpu: [arm64] 243 | os: [openbsd] 244 | 245 | '@esbuild/openbsd-x64@0.24.2': 246 | resolution: {integrity: sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA==} 247 | engines: {node: '>=18'} 248 | cpu: [x64] 249 | os: [openbsd] 250 | 251 | '@esbuild/sunos-x64@0.24.2': 252 | resolution: {integrity: sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig==} 253 | engines: {node: '>=18'} 254 | cpu: [x64] 255 | os: [sunos] 256 | 257 | '@esbuild/win32-arm64@0.24.2': 258 | resolution: {integrity: sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ==} 259 | engines: {node: '>=18'} 260 | cpu: [arm64] 261 | os: [win32] 262 | 263 | '@esbuild/win32-ia32@0.24.2': 264 | resolution: {integrity: sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA==} 265 | engines: {node: '>=18'} 266 | cpu: [ia32] 267 | os: [win32] 268 | 269 | '@esbuild/win32-x64@0.24.2': 270 | resolution: {integrity: sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg==} 271 | engines: {node: '>=18'} 272 | cpu: [x64] 273 | os: [win32] 274 | 275 | '@eslint-community/eslint-utils@4.4.1': 276 | resolution: {integrity: sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==} 277 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 278 | peerDependencies: 279 | eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 280 | 281 | '@eslint-community/regexpp@4.12.1': 282 | resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} 283 | engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} 284 | 285 | '@eslint/config-array@0.19.2': 286 | resolution: {integrity: sha512-GNKqxfHG2ySmJOBSHg7LxeUx4xpuCoFjacmlCoYWEbaPXLwvfIjixRI12xCQZeULksQb23uiA8F40w5TojpV7w==} 287 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 288 | 289 | '@eslint/core@0.10.0': 290 | resolution: {integrity: sha512-gFHJ+xBOo4G3WRlR1e/3G8A6/KZAH6zcE/hkLRCZTi/B9avAG365QhFA8uOGzTMqgTghpn7/fSnscW++dpMSAw==} 291 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 292 | 293 | '@eslint/eslintrc@3.2.0': 294 | resolution: {integrity: sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w==} 295 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 296 | 297 | '@eslint/js@9.19.0': 298 | resolution: {integrity: sha512-rbq9/g38qjfqFLOVPvwjIvFFdNziEC5S65jmjPw5r6A//QH+W91akh9irMwjDN8zKUTak6W9EsAv4m/7Wnw0UQ==} 299 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 300 | 301 | '@eslint/object-schema@2.1.6': 302 | resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==} 303 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 304 | 305 | '@eslint/plugin-kit@0.2.5': 306 | resolution: {integrity: sha512-lB05FkqEdUg2AA0xEbUz0SnkXT1LcCTa438W4IWTUh4hdOnVbQyOJ81OrDXsJk/LSiJHubgGEFoR5EHq1NsH1A==} 307 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 308 | 309 | '@grammyjs/files@1.1.1': 310 | resolution: {integrity: sha512-T3vJCVlj76I8d4BUI0MPDyIkfWOkG4NXyy8HDKAmG5tIb1SxMtrQHcwRYCOHeSJ1EvLWtfadFNTbRXuym+8c6Q==} 311 | engines: {node: ^12.20.0 || >=14.13.1} 312 | peerDependencies: 313 | grammy: ^1.3.0 314 | 315 | '@grammyjs/hydrate@1.4.1': 316 | resolution: {integrity: sha512-xvd7XXoVHEhxBV2M8UHDRYkZlv32JioHfs+0l+eN34mkJJJBchuRDgRY3fkVJko8o1hGFHHLAJJTlEs2OAMolA==} 317 | engines: {node: ^12.20.0 || >=14.13.1} 318 | peerDependencies: 319 | grammy: ^1.20.1 320 | 321 | '@grammyjs/menu@1.3.0': 322 | resolution: {integrity: sha512-4T/xtNMJ25XD1BNWoQL4IProuvX5p1UGI6RS9vR7xaWn59/QxspqTGtT1orFRbCUjlOqkLJmpRSoQNxeO0Pdww==} 323 | engines: {node: '>=12.20.0 || >=14.13.1'} 324 | peerDependencies: 325 | grammy: ^1.31.0 326 | 327 | '@grammyjs/parse-mode@1.11.1': 328 | resolution: {integrity: sha512-7yEKVtXjNZsG8EX/AOtgR/7Af5QxcmAcTB31Nju+QELvL2uSQMJKlix5rkx695gqocUodLwWtuwCDGDoXGD2xg==} 329 | engines: {node: '>=14.13.1'} 330 | peerDependencies: 331 | grammy: ^1.20.1 332 | 333 | '@grammyjs/types@3.18.0': 334 | resolution: {integrity: sha512-/VpQcT6Z0+Lw6H6jv2JvnDmqB1/9rjbFdDBlPBPUW3kQ1bWfjzfaiVk2+J2eiid3o3sLaPp3ZK0XjEI1gWNc3g==} 335 | 336 | '@humanfs/core@0.19.1': 337 | resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} 338 | engines: {node: '>=18.18.0'} 339 | 340 | '@humanfs/node@0.16.6': 341 | resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==} 342 | engines: {node: '>=18.18.0'} 343 | 344 | '@humanwhocodes/module-importer@1.0.1': 345 | resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} 346 | engines: {node: '>=12.22'} 347 | 348 | '@humanwhocodes/retry@0.3.1': 349 | resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==} 350 | engines: {node: '>=18.18'} 351 | 352 | '@humanwhocodes/retry@0.4.1': 353 | resolution: {integrity: sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA==} 354 | engines: {node: '>=18.18'} 355 | 356 | '@isaacs/cliui@8.0.2': 357 | resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} 358 | engines: {node: '>=12'} 359 | 360 | '@jimp/core@1.6.0': 361 | resolution: {integrity: sha512-EQQlKU3s9QfdJqiSrZWNTxBs3rKXgO2W+GxNXDtwchF3a4IqxDheFX1ti+Env9hdJXDiYLp2jTRjlxhPthsk8w==} 362 | engines: {node: '>=18'} 363 | 364 | '@jimp/diff@1.6.0': 365 | resolution: {integrity: sha512-+yUAQ5gvRC5D1WHYxjBHZI7JBRusGGSLf8AmPRPCenTzh4PA+wZ1xv2+cYqQwTfQHU5tXYOhA0xDytfHUf1Zyw==} 366 | engines: {node: '>=18'} 367 | 368 | '@jimp/file-ops@1.6.0': 369 | resolution: {integrity: sha512-Dx/bVDmgnRe1AlniRpCKrGRm5YvGmUwbDzt+MAkgmLGf+jvBT75hmMEZ003n9HQI/aPnm/YKnXjg/hOpzNCpHQ==} 370 | engines: {node: '>=18'} 371 | 372 | '@jimp/js-bmp@1.6.0': 373 | resolution: {integrity: sha512-FU6Q5PC/e3yzLyBDXupR3SnL3htU7S3KEs4e6rjDP6gNEOXRFsWs6YD3hXuXd50jd8ummy+q2WSwuGkr8wi+Gw==} 374 | engines: {node: '>=18'} 375 | 376 | '@jimp/js-gif@1.6.0': 377 | resolution: {integrity: sha512-N9CZPHOrJTsAUoWkWZstLPpwT5AwJ0wge+47+ix3++SdSL/H2QzyMqxbcDYNFe4MoI5MIhATfb0/dl/wmX221g==} 378 | engines: {node: '>=18'} 379 | 380 | '@jimp/js-jpeg@1.6.0': 381 | resolution: {integrity: sha512-6vgFDqeusblf5Pok6B2DUiMXplH8RhIKAryj1yn+007SIAQ0khM1Uptxmpku/0MfbClx2r7pnJv9gWpAEJdMVA==} 382 | engines: {node: '>=18'} 383 | 384 | '@jimp/js-png@1.6.0': 385 | resolution: {integrity: sha512-AbQHScy3hDDgMRNfG0tPjL88AV6qKAILGReIa3ATpW5QFjBKpisvUaOqhzJ7Reic1oawx3Riyv152gaPfqsBVg==} 386 | engines: {node: '>=18'} 387 | 388 | '@jimp/js-tiff@1.6.0': 389 | resolution: {integrity: sha512-zhReR8/7KO+adijj3h0ZQUOiun3mXUv79zYEAKvE0O+rP7EhgtKvWJOZfRzdZSNv0Pu1rKtgM72qgtwe2tFvyw==} 390 | engines: {node: '>=18'} 391 | 392 | '@jimp/plugin-blit@1.6.0': 393 | resolution: {integrity: sha512-M+uRWl1csi7qilnSK8uxK4RJMSuVeBiO1AY0+7APnfUbQNZm6hCe0CCFv1Iyw1D/Dhb8ph8fQgm5mwM0eSxgVA==} 394 | engines: {node: '>=18'} 395 | 396 | '@jimp/plugin-blur@1.6.0': 397 | resolution: {integrity: sha512-zrM7iic1OTwUCb0g/rN5y+UnmdEsT3IfuCXCJJNs8SZzP0MkZ1eTvuwK9ZidCuMo4+J3xkzCidRwYXB5CyGZTw==} 398 | engines: {node: '>=18'} 399 | 400 | '@jimp/plugin-circle@1.6.0': 401 | resolution: {integrity: sha512-xt1Gp+LtdMKAXfDp3HNaG30SPZW6AQ7dtAtTnoRKorRi+5yCJjKqXRgkewS5bvj8DEh87Ko1ydJfzqS3P2tdWw==} 402 | engines: {node: '>=18'} 403 | 404 | '@jimp/plugin-color@1.6.0': 405 | resolution: {integrity: sha512-J5q8IVCpkBsxIXM+45XOXTrsyfblyMZg3a9eAo0P7VPH4+CrvyNQwaYatbAIamSIN1YzxmO3DkIZXzRjFSz1SA==} 406 | engines: {node: '>=18'} 407 | 408 | '@jimp/plugin-contain@1.6.0': 409 | resolution: {integrity: sha512-oN/n+Vdq/Qg9bB4yOBOxtY9IPAtEfES8J1n9Ddx+XhGBYT1/QTU/JYkGaAkIGoPnyYvmLEDqMz2SGihqlpqfzQ==} 410 | engines: {node: '>=18'} 411 | 412 | '@jimp/plugin-cover@1.6.0': 413 | resolution: {integrity: sha512-Iow0h6yqSC269YUJ8HC3Q/MpCi2V55sMlbkkTTx4zPvd8mWZlC0ykrNDeAy9IJegrQ7v5E99rJwmQu25lygKLA==} 414 | engines: {node: '>=18'} 415 | 416 | '@jimp/plugin-crop@1.6.0': 417 | resolution: {integrity: sha512-KqZkEhvs+21USdySCUDI+GFa393eDIzbi1smBqkUPTE+pRwSWMAf01D5OC3ZWB+xZsNla93BDS9iCkLHA8wang==} 418 | engines: {node: '>=18'} 419 | 420 | '@jimp/plugin-displace@1.6.0': 421 | resolution: {integrity: sha512-4Y10X9qwr5F+Bo5ME356XSACEF55485j5nGdiyJ9hYzjQP9nGgxNJaZ4SAOqpd+k5sFaIeD7SQ0Occ26uIng5Q==} 422 | engines: {node: '>=18'} 423 | 424 | '@jimp/plugin-dither@1.6.0': 425 | resolution: {integrity: sha512-600d1RxY0pKwgyU0tgMahLNKsqEcxGdbgXadCiVCoGd6V6glyCvkNrnnwC0n5aJ56Htkj88PToSdF88tNVZEEQ==} 426 | engines: {node: '>=18'} 427 | 428 | '@jimp/plugin-fisheye@1.6.0': 429 | resolution: {integrity: sha512-E5QHKWSCBFtpgZarlmN3Q6+rTQxjirFqo44ohoTjzYVrDI6B6beXNnPIThJgPr0Y9GwfzgyarKvQuQuqCnnfbA==} 430 | engines: {node: '>=18'} 431 | 432 | '@jimp/plugin-flip@1.6.0': 433 | resolution: {integrity: sha512-/+rJVDuBIVOgwoyVkBjUFHtP+wmW0r+r5OQ2GpatQofToPVbJw1DdYWXlwviSx7hvixTWLKVgRWQ5Dw862emDg==} 434 | engines: {node: '>=18'} 435 | 436 | '@jimp/plugin-hash@1.6.0': 437 | resolution: {integrity: sha512-wWzl0kTpDJgYVbZdajTf+4NBSKvmI3bRI8q6EH9CVeIHps9VWVsUvEyb7rpbcwVLWYuzDtP2R0lTT6WeBNQH9Q==} 438 | engines: {node: '>=18'} 439 | 440 | '@jimp/plugin-mask@1.6.0': 441 | resolution: {integrity: sha512-Cwy7ExSJMZszvkad8NV8o/Z92X2kFUFM8mcDAhNVxU0Q6tA0op2UKRJY51eoK8r6eds/qak3FQkXakvNabdLnA==} 442 | engines: {node: '>=18'} 443 | 444 | '@jimp/plugin-print@1.6.0': 445 | resolution: {integrity: sha512-zarTIJi8fjoGMSI/M3Xh5yY9T65p03XJmPsuNet19K/Q7mwRU6EV2pfj+28++2PV2NJ+htDF5uecAlnGyxFN2A==} 446 | engines: {node: '>=18'} 447 | 448 | '@jimp/plugin-quantize@1.6.0': 449 | resolution: {integrity: sha512-EmzZ/s9StYQwbpG6rUGBCisc3f64JIhSH+ncTJd+iFGtGo0YvSeMdAd+zqgiHpfZoOL54dNavZNjF4otK+mvlg==} 450 | engines: {node: '>=18'} 451 | 452 | '@jimp/plugin-resize@1.6.0': 453 | resolution: {integrity: sha512-uSUD1mqXN9i1SGSz5ov3keRZ7S9L32/mAQG08wUwZiEi5FpbV0K8A8l1zkazAIZi9IJzLlTauRNU41Mi8IF9fA==} 454 | engines: {node: '>=18'} 455 | 456 | '@jimp/plugin-rotate@1.6.0': 457 | resolution: {integrity: sha512-JagdjBLnUZGSG4xjCLkIpQOZZ3Mjbg8aGCCi4G69qR+OjNpOeGI7N2EQlfK/WE8BEHOW5vdjSyglNqcYbQBWRw==} 458 | engines: {node: '>=18'} 459 | 460 | '@jimp/plugin-threshold@1.6.0': 461 | resolution: {integrity: sha512-M59m5dzLoHOVWdM41O8z9SyySzcDn43xHseOH0HavjsfQsT56GGCC4QzU1banJidbUrePhzoEdS42uFE8Fei8w==} 462 | engines: {node: '>=18'} 463 | 464 | '@jimp/types@1.6.0': 465 | resolution: {integrity: sha512-7UfRsiKo5GZTAATxm2qQ7jqmUXP0DxTArztllTcYdyw6Xi5oT4RaoXynVtCD4UyLK5gJgkZJcwonoijrhYFKfg==} 466 | engines: {node: '>=18'} 467 | 468 | '@jimp/utils@1.6.0': 469 | resolution: {integrity: sha512-gqFTGEosKbOkYF/WFj26jMHOI5OH2jeP1MmC/zbK6BF6VJBf8rIC5898dPfSzZEbSA0wbbV5slbntWVc5PKLFA==} 470 | engines: {node: '>=18'} 471 | 472 | '@jridgewell/gen-mapping@0.3.8': 473 | resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} 474 | engines: {node: '>=6.0.0'} 475 | 476 | '@jridgewell/resolve-uri@3.1.2': 477 | resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} 478 | engines: {node: '>=6.0.0'} 479 | 480 | '@jridgewell/set-array@1.2.1': 481 | resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} 482 | engines: {node: '>=6.0.0'} 483 | 484 | '@jridgewell/sourcemap-codec@1.5.0': 485 | resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} 486 | 487 | '@jridgewell/trace-mapping@0.3.25': 488 | resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} 489 | 490 | '@jridgewell/trace-mapping@0.3.9': 491 | resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} 492 | 493 | '@nodelib/fs.scandir@2.1.5': 494 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} 495 | engines: {node: '>= 8'} 496 | 497 | '@nodelib/fs.stat@2.0.5': 498 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} 499 | engines: {node: '>= 8'} 500 | 501 | '@nodelib/fs.walk@1.2.8': 502 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} 503 | engines: {node: '>= 8'} 504 | 505 | '@pkgjs/parseargs@0.11.0': 506 | resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} 507 | engines: {node: '>=14'} 508 | 509 | '@pkgr/core@0.1.1': 510 | resolution: {integrity: sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==} 511 | engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} 512 | 513 | '@rollup/rollup-android-arm-eabi@4.32.1': 514 | resolution: {integrity: sha512-/pqA4DmqyCm8u5YIDzIdlLcEmuvxb0v8fZdFhVMszSpDTgbQKdw3/mB3eMUHIbubtJ6F9j+LtmyCnHTEqIHyzA==} 515 | cpu: [arm] 516 | os: [android] 517 | 518 | '@rollup/rollup-android-arm64@4.32.1': 519 | resolution: {integrity: sha512-If3PDskT77q7zgqVqYuj7WG3WC08G1kwXGVFi9Jr8nY6eHucREHkfpX79c0ACAjLj3QIWKPJR7w4i+f5EdLH5Q==} 520 | cpu: [arm64] 521 | os: [android] 522 | 523 | '@rollup/rollup-darwin-arm64@4.32.1': 524 | resolution: {integrity: sha512-zCpKHioQ9KgZToFp5Wvz6zaWbMzYQ2LJHQ+QixDKq52KKrF65ueu6Af4hLlLWHjX1Wf/0G5kSJM9PySW9IrvHA==} 525 | cpu: [arm64] 526 | os: [darwin] 527 | 528 | '@rollup/rollup-darwin-x64@4.32.1': 529 | resolution: {integrity: sha512-sFvF+t2+TyUo/ZQqUcifrJIgznx58oFZbdHS9TvHq3xhPVL9nOp+yZ6LKrO9GWTP+6DbFtoyLDbjTpR62Mbr3Q==} 530 | cpu: [x64] 531 | os: [darwin] 532 | 533 | '@rollup/rollup-freebsd-arm64@4.32.1': 534 | resolution: {integrity: sha512-NbOa+7InvMWRcY9RG+B6kKIMD/FsnQPH0MWUvDlQB1iXnF/UcKSudCXZtv4lW+C276g3w5AxPbfry5rSYvyeYA==} 535 | cpu: [arm64] 536 | os: [freebsd] 537 | 538 | '@rollup/rollup-freebsd-x64@4.32.1': 539 | resolution: {integrity: sha512-JRBRmwvHPXR881j2xjry8HZ86wIPK2CcDw0EXchE1UgU0ubWp9nvlT7cZYKc6bkypBt745b4bglf3+xJ7hXWWw==} 540 | cpu: [x64] 541 | os: [freebsd] 542 | 543 | '@rollup/rollup-linux-arm-gnueabihf@4.32.1': 544 | resolution: {integrity: sha512-PKvszb+9o/vVdUzCCjL0sKHukEQV39tD3fepXxYrHE3sTKrRdCydI7uldRLbjLmDA3TFDmh418XH19NOsDRH8g==} 545 | cpu: [arm] 546 | os: [linux] 547 | 548 | '@rollup/rollup-linux-arm-musleabihf@4.32.1': 549 | resolution: {integrity: sha512-9WHEMV6Y89eL606ReYowXuGF1Yb2vwfKWKdD1A5h+OYnPZSJvxbEjxTRKPgi7tkP2DSnW0YLab1ooy+i/FQp/Q==} 550 | cpu: [arm] 551 | os: [linux] 552 | 553 | '@rollup/rollup-linux-arm64-gnu@4.32.1': 554 | resolution: {integrity: sha512-tZWc9iEt5fGJ1CL2LRPw8OttkCBDs+D8D3oEM8mH8S1ICZCtFJhD7DZ3XMGM8kpqHvhGUTvNUYVDnmkj4BDXnw==} 555 | cpu: [arm64] 556 | os: [linux] 557 | 558 | '@rollup/rollup-linux-arm64-musl@4.32.1': 559 | resolution: {integrity: sha512-FTYc2YoTWUsBz5GTTgGkRYYJ5NGJIi/rCY4oK/I8aKowx1ToXeoVVbIE4LGAjsauvlhjfl0MYacxClLld1VrOw==} 560 | cpu: [arm64] 561 | os: [linux] 562 | 563 | '@rollup/rollup-linux-loongarch64-gnu@4.32.1': 564 | resolution: {integrity: sha512-F51qLdOtpS6P1zJVRzYM0v6MrBNypyPEN1GfMiz0gPu9jN8ScGaEFIZQwteSsGKg799oR5EaP7+B2jHgL+d+Kw==} 565 | cpu: [loong64] 566 | os: [linux] 567 | 568 | '@rollup/rollup-linux-powerpc64le-gnu@4.32.1': 569 | resolution: {integrity: sha512-wO0WkfSppfX4YFm5KhdCCpnpGbtgQNj/tgvYzrVYFKDpven8w2N6Gg5nB6w+wAMO3AIfSTWeTjfVe+uZ23zAlg==} 570 | cpu: [ppc64] 571 | os: [linux] 572 | 573 | '@rollup/rollup-linux-riscv64-gnu@4.32.1': 574 | resolution: {integrity: sha512-iWswS9cIXfJO1MFYtI/4jjlrGb/V58oMu4dYJIKnR5UIwbkzR0PJ09O0PDZT0oJ3LYWXBSWahNf/Mjo6i1E5/g==} 575 | cpu: [riscv64] 576 | os: [linux] 577 | 578 | '@rollup/rollup-linux-s390x-gnu@4.32.1': 579 | resolution: {integrity: sha512-RKt8NI9tebzmEthMnfVgG3i/XeECkMPS+ibVZjZ6mNekpbbUmkNWuIN2yHsb/mBPyZke4nlI4YqIdFPgKuoyQQ==} 580 | cpu: [s390x] 581 | os: [linux] 582 | 583 | '@rollup/rollup-linux-x64-gnu@4.32.1': 584 | resolution: {integrity: sha512-WQFLZ9c42ECqEjwg/GHHsouij3pzLXkFdz0UxHa/0OM12LzvX7DzedlY0SIEly2v18YZLRhCRoHZDxbBSWoGYg==} 585 | cpu: [x64] 586 | os: [linux] 587 | 588 | '@rollup/rollup-linux-x64-musl@4.32.1': 589 | resolution: {integrity: sha512-BLoiyHDOWoS3uccNSADMza6V6vCNiphi94tQlVIL5de+r6r/CCQuNnerf+1g2mnk2b6edp5dk0nhdZ7aEjOBsA==} 590 | cpu: [x64] 591 | os: [linux] 592 | 593 | '@rollup/rollup-win32-arm64-msvc@4.32.1': 594 | resolution: {integrity: sha512-w2l3UnlgYTNNU+Z6wOR8YdaioqfEnwPjIsJ66KxKAf0p+AuL2FHeTX6qvM+p/Ue3XPBVNyVSfCrfZiQh7vZHLQ==} 595 | cpu: [arm64] 596 | os: [win32] 597 | 598 | '@rollup/rollup-win32-ia32-msvc@4.32.1': 599 | resolution: {integrity: sha512-Am9H+TGLomPGkBnaPWie4F3x+yQ2rr4Bk2jpwy+iV+Gel9jLAu/KqT8k3X4jxFPW6Zf8OMnehyutsd+eHoq1WQ==} 600 | cpu: [ia32] 601 | os: [win32] 602 | 603 | '@rollup/rollup-win32-x64-msvc@4.32.1': 604 | resolution: {integrity: sha512-ar80GhdZb4DgmW3myIS9nRFYcpJRSME8iqWgzH2i44u+IdrzmiXVxeFnExQ5v4JYUSpg94bWjevMG8JHf1Da5Q==} 605 | cpu: [x64] 606 | os: [win32] 607 | 608 | '@tokenizer/token@0.3.0': 609 | resolution: {integrity: sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==} 610 | 611 | '@tsconfig/node10@1.0.11': 612 | resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==} 613 | 614 | '@tsconfig/node12@1.0.11': 615 | resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} 616 | 617 | '@tsconfig/node14@1.0.3': 618 | resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} 619 | 620 | '@tsconfig/node16@1.0.4': 621 | resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} 622 | 623 | '@types/estree@1.0.6': 624 | resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} 625 | 626 | '@types/json-schema@7.0.15': 627 | resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} 628 | 629 | '@types/luxon@3.4.2': 630 | resolution: {integrity: sha512-TifLZlFudklWlMBfhubvgqTXRzLDI5pCbGa4P8a3wPyUQSW+1xQ5eDsreP9DWHX3tjq1ke96uYG/nwundroWcA==} 631 | 632 | '@types/node-fetch@2.6.12': 633 | resolution: {integrity: sha512-8nneRWKCg3rMtF69nLQJnOYUcbafYeFSjqkw3jCRLsqkWFlHaoQrr5mXmofFGOx3DKn7UfmBMyov8ySvLRVldA==} 634 | 635 | '@types/node@16.9.1': 636 | resolution: {integrity: sha512-QpLcX9ZSsq3YYUUnD3nFDY8H7wctAhQj/TFKL8Ya8v5fMm3CFXxo8zStsLAl780ltoYoo1WvKUVGBQK+1ifr7g==} 637 | 638 | '@types/node@18.19.74': 639 | resolution: {integrity: sha512-HMwEkkifei3L605gFdV+/UwtpxP6JSzM+xFk2Ia6DNFSwSVBRh9qp5Tgf4lNFOMfPVuU0WnkcWpXZpgn5ufO4A==} 640 | 641 | '@types/node@22.13.0': 642 | resolution: {integrity: sha512-ClIbNe36lawluuvq3+YYhnIN2CELi+6q8NpnM7PYp4hBn/TatfboPgVSm2rwKRfnV2M+Ty9GWDFI64KEe+kysA==} 643 | 644 | '@types/semver@7.5.8': 645 | resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} 646 | 647 | '@types/triple-beam@1.3.5': 648 | resolution: {integrity: sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==} 649 | 650 | '@typescript-eslint/eslint-plugin@5.62.0': 651 | resolution: {integrity: sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==} 652 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 653 | peerDependencies: 654 | '@typescript-eslint/parser': ^5.0.0 655 | eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 656 | typescript: '*' 657 | peerDependenciesMeta: 658 | typescript: 659 | optional: true 660 | 661 | '@typescript-eslint/eslint-plugin@8.22.0': 662 | resolution: {integrity: sha512-4Uta6REnz/xEJMvwf72wdUnC3rr4jAQf5jnTkeRQ9b6soxLxhDEbS/pfMPoJLDfFPNVRdryqWUIV/2GZzDJFZw==} 663 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 664 | peerDependencies: 665 | '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 666 | eslint: ^8.57.0 || ^9.0.0 667 | typescript: '>=4.8.4 <5.8.0' 668 | 669 | '@typescript-eslint/parser@5.62.0': 670 | resolution: {integrity: sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==} 671 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 672 | peerDependencies: 673 | eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 674 | typescript: '*' 675 | peerDependenciesMeta: 676 | typescript: 677 | optional: true 678 | 679 | '@typescript-eslint/parser@8.22.0': 680 | resolution: {integrity: sha512-MqtmbdNEdoNxTPzpWiWnqNac54h8JDAmkWtJExBVVnSrSmi9z+sZUt0LfKqk9rjqmKOIeRhO4fHHJ1nQIjduIQ==} 681 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 682 | peerDependencies: 683 | eslint: ^8.57.0 || ^9.0.0 684 | typescript: '>=4.8.4 <5.8.0' 685 | 686 | '@typescript-eslint/scope-manager@5.62.0': 687 | resolution: {integrity: sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==} 688 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 689 | 690 | '@typescript-eslint/scope-manager@8.22.0': 691 | resolution: {integrity: sha512-/lwVV0UYgkj7wPSw0o8URy6YI64QmcOdwHuGuxWIYznO6d45ER0wXUbksr9pYdViAofpUCNJx/tAzNukgvaaiQ==} 692 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 693 | 694 | '@typescript-eslint/type-utils@5.62.0': 695 | resolution: {integrity: sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==} 696 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 697 | peerDependencies: 698 | eslint: '*' 699 | typescript: '*' 700 | peerDependenciesMeta: 701 | typescript: 702 | optional: true 703 | 704 | '@typescript-eslint/type-utils@8.22.0': 705 | resolution: {integrity: sha512-NzE3aB62fDEaGjaAYZE4LH7I1MUwHooQ98Byq0G0y3kkibPJQIXVUspzlFOmOfHhiDLwKzMlWxaNv+/qcZurJA==} 706 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 707 | peerDependencies: 708 | eslint: ^8.57.0 || ^9.0.0 709 | typescript: '>=4.8.4 <5.8.0' 710 | 711 | '@typescript-eslint/types@5.62.0': 712 | resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==} 713 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 714 | 715 | '@typescript-eslint/types@8.22.0': 716 | resolution: {integrity: sha512-0S4M4baNzp612zwpD4YOieP3VowOARgK2EkN/GBn95hpyF8E2fbMT55sRHWBq+Huaqk3b3XK+rxxlM8sPgGM6A==} 717 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 718 | 719 | '@typescript-eslint/typescript-estree@5.62.0': 720 | resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} 721 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 722 | peerDependencies: 723 | typescript: '*' 724 | peerDependenciesMeta: 725 | typescript: 726 | optional: true 727 | 728 | '@typescript-eslint/typescript-estree@8.22.0': 729 | resolution: {integrity: sha512-SJX99NAS2ugGOzpyhMza/tX+zDwjvwAtQFLsBo3GQxiGcvaKlqGBkmZ+Y1IdiSi9h4Q0Lr5ey+Cp9CGWNY/F/w==} 730 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 731 | peerDependencies: 732 | typescript: '>=4.8.4 <5.8.0' 733 | 734 | '@typescript-eslint/utils@5.62.0': 735 | resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} 736 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 737 | peerDependencies: 738 | eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 739 | 740 | '@typescript-eslint/utils@8.22.0': 741 | resolution: {integrity: sha512-T8oc1MbF8L+Bk2msAvCUzjxVB2Z2f+vXYfcucE2wOmYs7ZUwco5Ep0fYZw8quNwOiw9K8GYVL+Kgc2pETNTLOg==} 742 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 743 | peerDependencies: 744 | eslint: ^8.57.0 || ^9.0.0 745 | typescript: '>=4.8.4 <5.8.0' 746 | 747 | '@typescript-eslint/visitor-keys@5.62.0': 748 | resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==} 749 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 750 | 751 | '@typescript-eslint/visitor-keys@8.22.0': 752 | resolution: {integrity: sha512-AWpYAXnUgvLNabGTy3uBylkgZoosva/miNd1I8Bz3SjotmQPbVqhO4Cczo8AsZ44XVErEBPr/CRSgaj8sG7g0w==} 753 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 754 | 755 | abort-controller@3.0.0: 756 | resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} 757 | engines: {node: '>=6.5'} 758 | 759 | acorn-jsx@5.3.2: 760 | resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} 761 | peerDependencies: 762 | acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 763 | 764 | acorn-walk@8.3.4: 765 | resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==} 766 | engines: {node: '>=0.4.0'} 767 | 768 | acorn@8.14.0: 769 | resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} 770 | engines: {node: '>=0.4.0'} 771 | hasBin: true 772 | 773 | agentkeepalive@4.6.0: 774 | resolution: {integrity: sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==} 775 | engines: {node: '>= 8.0.0'} 776 | 777 | ajv-formats@2.1.1: 778 | resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} 779 | peerDependencies: 780 | ajv: ^8.0.0 781 | peerDependenciesMeta: 782 | ajv: 783 | optional: true 784 | 785 | ajv@6.12.6: 786 | resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} 787 | 788 | ajv@8.17.1: 789 | resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} 790 | 791 | ansi-regex@5.0.1: 792 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} 793 | engines: {node: '>=8'} 794 | 795 | ansi-regex@6.1.0: 796 | resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} 797 | engines: {node: '>=12'} 798 | 799 | ansi-styles@4.3.0: 800 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 801 | engines: {node: '>=8'} 802 | 803 | ansi-styles@6.2.1: 804 | resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} 805 | engines: {node: '>=12'} 806 | 807 | any-base@1.1.0: 808 | resolution: {integrity: sha512-uMgjozySS8adZZYePpaWs8cxB9/kdzmpX6SgJZ+wbz1K5eYk5QMYDVJaZKhxyIHUdnnJkfR7SVgStgH7LkGUyg==} 809 | 810 | any-promise@1.3.0: 811 | resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} 812 | 813 | anymatch@3.1.3: 814 | resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} 815 | engines: {node: '>= 8'} 816 | 817 | arg@4.1.3: 818 | resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} 819 | 820 | argparse@2.0.1: 821 | resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} 822 | 823 | array-union@2.1.0: 824 | resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} 825 | engines: {node: '>=8'} 826 | 827 | async-mutex@0.3.2: 828 | resolution: {integrity: sha512-HuTK7E7MT7jZEh1P9GtRW9+aTWiDWWi9InbZ5hjxrnRa39KS4BW04+xLBhYNS2aXhHUIKZSw3gj4Pn1pj+qGAA==} 829 | 830 | async@3.2.6: 831 | resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==} 832 | 833 | asynckit@0.4.0: 834 | resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} 835 | 836 | await-to-js@3.0.0: 837 | resolution: {integrity: sha512-zJAaP9zxTcvTHRlejau3ZOY4V7SRpiByf3/dxx2uyKxxor19tpmpV2QRsTKikckwhaPmr2dVpxxMr7jOCYVp5g==} 838 | engines: {node: '>=6.0.0'} 839 | 840 | axios@1.7.9: 841 | resolution: {integrity: sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw==} 842 | 843 | balanced-match@1.0.2: 844 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 845 | 846 | base64-js@1.5.1: 847 | resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} 848 | 849 | big-integer@1.6.52: 850 | resolution: {integrity: sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==} 851 | engines: {node: '>=0.6'} 852 | 853 | binary-extensions@2.3.0: 854 | resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} 855 | engines: {node: '>=8'} 856 | 857 | bmp-ts@1.0.9: 858 | resolution: {integrity: sha512-cTEHk2jLrPyi+12M3dhpEbnnPOsaZuq7C45ylbbQIiWgDFZq4UVYPEY5mlqjvsj/6gJv9qX5sa+ebDzLXT28Vw==} 859 | 860 | brace-expansion@1.1.11: 861 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} 862 | 863 | brace-expansion@2.0.1: 864 | resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} 865 | 866 | braces@3.0.3: 867 | resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} 868 | engines: {node: '>=8'} 869 | 870 | buffer-from@1.1.2: 871 | resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} 872 | 873 | buffer@6.0.3: 874 | resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} 875 | 876 | bufferutil@4.0.9: 877 | resolution: {integrity: sha512-WDtdLmJvAuNNPzByAYpRo2rF1Mmradw6gvWsQKf63476DDXmomT9zUiGypLcG4ibIM67vhAj8jJRdbmEws2Aqw==} 878 | engines: {node: '>=6.14.2'} 879 | 880 | bundle-require@5.1.0: 881 | resolution: {integrity: sha512-3WrrOuZiyaaZPWiEt4G3+IffISVC9HYlWueJEBWED4ZH4aIAC2PnkdnuRrR94M+w6yGWn4AglWtJtBI8YqvgoA==} 882 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 883 | peerDependencies: 884 | esbuild: '>=0.18' 885 | 886 | cac@6.7.14: 887 | resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} 888 | engines: {node: '>=8'} 889 | 890 | callsites@3.1.0: 891 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} 892 | engines: {node: '>=6'} 893 | 894 | chalk@4.1.2: 895 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 896 | engines: {node: '>=10'} 897 | 898 | chokidar@3.6.0: 899 | resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} 900 | engines: {node: '>= 8.10.0'} 901 | 902 | chokidar@4.0.3: 903 | resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} 904 | engines: {node: '>= 14.16.0'} 905 | 906 | color-convert@1.9.3: 907 | resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} 908 | 909 | color-convert@2.0.1: 910 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 911 | engines: {node: '>=7.0.0'} 912 | 913 | color-loggers@0.3.2: 914 | resolution: {integrity: sha512-asfXyY1/9N+Cxt30jb0PFy5tccybuMnWVc9J8EJuYoJVlcsUshn+pt2QuyUB3BWKMXVvEH8jgLrCFs11Am8QZA==} 915 | 916 | color-name@1.1.3: 917 | resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} 918 | 919 | color-name@1.1.4: 920 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 921 | 922 | color-string@1.9.1: 923 | resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==} 924 | 925 | color@3.2.1: 926 | resolution: {integrity: sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==} 927 | 928 | colorette@2.0.19: 929 | resolution: {integrity: sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==} 930 | 931 | colorspace@1.1.4: 932 | resolution: {integrity: sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==} 933 | 934 | combined-stream@1.0.8: 935 | resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} 936 | engines: {node: '>= 0.8'} 937 | 938 | commander@10.0.1: 939 | resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==} 940 | engines: {node: '>=14'} 941 | 942 | commander@4.1.1: 943 | resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} 944 | engines: {node: '>= 6'} 945 | 946 | concat-map@0.0.1: 947 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} 948 | 949 | consola@3.4.0: 950 | resolution: {integrity: sha512-EiPU8G6dQG0GFHNR8ljnZFki/8a+cQwEQ+7wpxdChl02Q8HXlwEZWD5lqAF8vC2sEC3Tehr8hy7vErz88LHyUA==} 951 | engines: {node: ^14.18.0 || >=16.10.0} 952 | 953 | create-require@1.1.1: 954 | resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} 955 | 956 | cross-spawn@7.0.6: 957 | resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} 958 | engines: {node: '>= 8'} 959 | 960 | d@1.0.2: 961 | resolution: {integrity: sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==} 962 | engines: {node: '>=0.12'} 963 | 964 | db-errors@0.2.3: 965 | resolution: {integrity: sha512-OOgqgDuCavHXjYSJoV2yGhv6SeG8nk42aoCSoyXLZUH7VwFG27rxbavU1z+VrZbZjphw5UkDQwUlD21MwZpUng==} 966 | 967 | debug@2.6.9: 968 | resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} 969 | peerDependencies: 970 | supports-color: '*' 971 | peerDependenciesMeta: 972 | supports-color: 973 | optional: true 974 | 975 | debug@4.3.4: 976 | resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} 977 | engines: {node: '>=6.0'} 978 | peerDependencies: 979 | supports-color: '*' 980 | peerDependenciesMeta: 981 | supports-color: 982 | optional: true 983 | 984 | debug@4.4.0: 985 | resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} 986 | engines: {node: '>=6.0'} 987 | peerDependencies: 988 | supports-color: '*' 989 | peerDependenciesMeta: 990 | supports-color: 991 | optional: true 992 | 993 | deep-is@0.1.4: 994 | resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} 995 | 996 | delayed-stream@1.0.0: 997 | resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} 998 | engines: {node: '>=0.4.0'} 999 | 1000 | diff@4.0.2: 1001 | resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} 1002 | engines: {node: '>=0.3.1'} 1003 | 1004 | dir-glob@3.0.1: 1005 | resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} 1006 | engines: {node: '>=8'} 1007 | 1008 | dom-serializer@1.4.1: 1009 | resolution: {integrity: sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==} 1010 | 1011 | domelementtype@2.3.0: 1012 | resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} 1013 | 1014 | domhandler@4.3.1: 1015 | resolution: {integrity: sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==} 1016 | engines: {node: '>= 4'} 1017 | 1018 | domutils@2.8.0: 1019 | resolution: {integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==} 1020 | 1021 | dotenv@16.4.7: 1022 | resolution: {integrity: sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==} 1023 | engines: {node: '>=12'} 1024 | 1025 | eastasianwidth@0.2.0: 1026 | resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} 1027 | 1028 | emoji-regex@8.0.0: 1029 | resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} 1030 | 1031 | emoji-regex@9.2.2: 1032 | resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} 1033 | 1034 | enabled@2.0.0: 1035 | resolution: {integrity: sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==} 1036 | 1037 | entities@2.2.0: 1038 | resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==} 1039 | 1040 | envalid@8.0.0: 1041 | resolution: {integrity: sha512-PGeYJnJB5naN0ME6SH8nFcDj9HVbLpYIfg1p5lAyM9T4cH2lwtu2fLbozC/bq+HUUOIFxhX/LP0/GmlqPHT4tQ==} 1042 | engines: {node: '>=8.12'} 1043 | 1044 | es5-ext@0.10.64: 1045 | resolution: {integrity: sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==} 1046 | engines: {node: '>=0.10'} 1047 | 1048 | es6-iterator@2.0.3: 1049 | resolution: {integrity: sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==} 1050 | 1051 | es6-symbol@3.1.4: 1052 | resolution: {integrity: sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg==} 1053 | engines: {node: '>=0.12'} 1054 | 1055 | esbuild@0.24.2: 1056 | resolution: {integrity: sha512-+9egpBW8I3CD5XPe0n6BfT5fxLzxrlDzqydF3aviG+9ni1lDC/OvMHcxqEFV0+LANZG5R1bFMWfUrjVsdwxJvA==} 1057 | engines: {node: '>=18'} 1058 | hasBin: true 1059 | 1060 | escalade@3.2.0: 1061 | resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} 1062 | engines: {node: '>=6'} 1063 | 1064 | escape-string-regexp@4.0.0: 1065 | resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} 1066 | engines: {node: '>=10'} 1067 | 1068 | eslint-config-prettier@10.0.1: 1069 | resolution: {integrity: sha512-lZBts941cyJyeaooiKxAtzoPHTN+GbQTJFAIdQbRhA4/8whaAraEh47Whw/ZFfrjNSnlAxqfm9i0XVAEkULjCw==} 1070 | hasBin: true 1071 | peerDependencies: 1072 | eslint: '>=7.0.0' 1073 | 1074 | eslint-plugin-adonis@2.1.1: 1075 | resolution: {integrity: sha512-iC3eZXofK4q+KOGypiquT74amCpeqW+5K5WZ7pezUvrXgmFkZMn7MSQjAg44KVzq6pQdXFuRNlnS+ijcwx0AMw==} 1076 | engines: {node: '>=10.0.0'} 1077 | peerDependencies: 1078 | eslint: ^8.0.0 1079 | 1080 | eslint-plugin-prettier@5.2.3: 1081 | resolution: {integrity: sha512-qJ+y0FfCp/mQYQ/vWQ3s7eUlFEL4PyKfAJxsnYTJ4YT73nsJBWqmEpFryxV9OeUiqmsTsYJ5Y+KDNaeP31wrRw==} 1082 | engines: {node: ^14.18.0 || >=16.0.0} 1083 | peerDependencies: 1084 | '@types/eslint': '>=8.0.0' 1085 | eslint: '>=8.0.0' 1086 | eslint-config-prettier: '*' 1087 | prettier: '>=3.0.0' 1088 | peerDependenciesMeta: 1089 | '@types/eslint': 1090 | optional: true 1091 | eslint-config-prettier: 1092 | optional: true 1093 | 1094 | eslint-scope@5.1.1: 1095 | resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} 1096 | engines: {node: '>=8.0.0'} 1097 | 1098 | eslint-scope@8.2.0: 1099 | resolution: {integrity: sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==} 1100 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 1101 | 1102 | eslint-visitor-keys@3.4.3: 1103 | resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} 1104 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1105 | 1106 | eslint-visitor-keys@4.2.0: 1107 | resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==} 1108 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 1109 | 1110 | eslint@9.19.0: 1111 | resolution: {integrity: sha512-ug92j0LepKlbbEv6hD911THhoRHmbdXt2gX+VDABAW/Ir7D3nqKdv5Pf5vtlyY6HQMTEP2skXY43ueqTCWssEA==} 1112 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 1113 | hasBin: true 1114 | peerDependencies: 1115 | jiti: '*' 1116 | peerDependenciesMeta: 1117 | jiti: 1118 | optional: true 1119 | 1120 | esm@3.2.25: 1121 | resolution: {integrity: sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==} 1122 | engines: {node: '>=6'} 1123 | 1124 | esniff@2.0.1: 1125 | resolution: {integrity: sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==} 1126 | engines: {node: '>=0.10'} 1127 | 1128 | espree@10.3.0: 1129 | resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==} 1130 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 1131 | 1132 | esquery@1.6.0: 1133 | resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} 1134 | engines: {node: '>=0.10'} 1135 | 1136 | esrecurse@4.3.0: 1137 | resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} 1138 | engines: {node: '>=4.0'} 1139 | 1140 | estraverse@4.3.0: 1141 | resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} 1142 | engines: {node: '>=4.0'} 1143 | 1144 | estraverse@5.3.0: 1145 | resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} 1146 | engines: {node: '>=4.0'} 1147 | 1148 | esutils@2.0.3: 1149 | resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} 1150 | engines: {node: '>=0.10.0'} 1151 | 1152 | event-emitter@0.3.5: 1153 | resolution: {integrity: sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==} 1154 | 1155 | event-target-shim@5.0.1: 1156 | resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} 1157 | engines: {node: '>=6'} 1158 | 1159 | exif-parser@0.1.12: 1160 | resolution: {integrity: sha512-c2bQfLNbMzLPmzQuOr8fy0csy84WmwnER81W88DzTp9CYNPJ6yzOj2EZAh9pywYpqHnshVLHQJ8WzldAyfY+Iw==} 1161 | 1162 | ext@1.7.0: 1163 | resolution: {integrity: sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==} 1164 | 1165 | fast-deep-equal@3.1.3: 1166 | resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} 1167 | 1168 | fast-diff@1.3.0: 1169 | resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} 1170 | 1171 | fast-glob@3.3.3: 1172 | resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} 1173 | engines: {node: '>=8.6.0'} 1174 | 1175 | fast-json-stable-stringify@2.1.0: 1176 | resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} 1177 | 1178 | fast-levenshtein@2.0.6: 1179 | resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} 1180 | 1181 | fast-uri@3.0.6: 1182 | resolution: {integrity: sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==} 1183 | 1184 | fastq@1.19.0: 1185 | resolution: {integrity: sha512-7SFSRCNjBQIZH/xZR3iy5iQYR8aGBE0h3VG6/cwlbrpdciNYBMotQav8c1XI3HjHH+NikUpP53nPdlZSdWmFzA==} 1186 | 1187 | fdir@6.4.3: 1188 | resolution: {integrity: sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==} 1189 | peerDependencies: 1190 | picomatch: ^3 || ^4 1191 | peerDependenciesMeta: 1192 | picomatch: 1193 | optional: true 1194 | 1195 | fecha@4.2.3: 1196 | resolution: {integrity: sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==} 1197 | 1198 | file-entry-cache@8.0.0: 1199 | resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} 1200 | engines: {node: '>=16.0.0'} 1201 | 1202 | file-type@16.5.4: 1203 | resolution: {integrity: sha512-/yFHK0aGjFEgDJjEKP0pWCplsPFPhwyfwevf/pVxiN0tmE4L9LmwWxWukdJSHdoCli4VgQLehjJtwQBnqmsKcw==} 1204 | engines: {node: '>=10'} 1205 | 1206 | fill-range@7.1.1: 1207 | resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} 1208 | engines: {node: '>=8'} 1209 | 1210 | find-up@5.0.0: 1211 | resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} 1212 | engines: {node: '>=10'} 1213 | 1214 | flat-cache@4.0.1: 1215 | resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} 1216 | engines: {node: '>=16'} 1217 | 1218 | flatted@3.3.2: 1219 | resolution: {integrity: sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==} 1220 | 1221 | fn.name@1.1.0: 1222 | resolution: {integrity: sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==} 1223 | 1224 | follow-redirects@1.15.9: 1225 | resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} 1226 | engines: {node: '>=4.0'} 1227 | peerDependencies: 1228 | debug: '*' 1229 | peerDependenciesMeta: 1230 | debug: 1231 | optional: true 1232 | 1233 | foreground-child@3.3.0: 1234 | resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==} 1235 | engines: {node: '>=14'} 1236 | 1237 | form-data-encoder@1.7.2: 1238 | resolution: {integrity: sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A==} 1239 | 1240 | form-data@4.0.1: 1241 | resolution: {integrity: sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==} 1242 | engines: {node: '>= 6'} 1243 | 1244 | formdata-node@4.4.1: 1245 | resolution: {integrity: sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ==} 1246 | engines: {node: '>= 12.20'} 1247 | 1248 | fsevents@2.3.3: 1249 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} 1250 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 1251 | os: [darwin] 1252 | 1253 | function-bind@1.1.2: 1254 | resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} 1255 | 1256 | get-package-type@0.1.0: 1257 | resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} 1258 | engines: {node: '>=8.0.0'} 1259 | 1260 | getopts@2.3.0: 1261 | resolution: {integrity: sha512-5eDf9fuSXwxBL6q5HX+dhDj+dslFGWzU5thZ9kNKUkcPtaPdatmUFKwHFrLb/uf/WpA4BHET+AX3Scl56cAjpA==} 1262 | 1263 | gifwrap@0.10.1: 1264 | resolution: {integrity: sha512-2760b1vpJHNmLzZ/ubTtNnEx5WApN/PYWJvXvgS+tL1egTTthayFYIQQNi136FLEDcN/IyEY2EcGpIITD6eYUw==} 1265 | 1266 | glob-parent@5.1.2: 1267 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 1268 | engines: {node: '>= 6'} 1269 | 1270 | glob-parent@6.0.2: 1271 | resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} 1272 | engines: {node: '>=10.13.0'} 1273 | 1274 | glob@10.4.5: 1275 | resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} 1276 | hasBin: true 1277 | 1278 | globals@14.0.0: 1279 | resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} 1280 | engines: {node: '>=18'} 1281 | 1282 | globby@11.1.0: 1283 | resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} 1284 | engines: {node: '>=10'} 1285 | 1286 | graceful-fs@4.2.11: 1287 | resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} 1288 | 1289 | grammy@1.34.1: 1290 | resolution: {integrity: sha512-0ypt5d1bna8CqSANlDCg2ce1sx87oDm9gjyPRHWYpAgvjy3WYW9oEmMllAYCWCZ3vHDULW5x14jBMXai51ar0Q==} 1291 | engines: {node: ^12.20.0 || >=14.13.1} 1292 | 1293 | graphemer@1.4.0: 1294 | resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} 1295 | 1296 | has-flag@3.0.0: 1297 | resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} 1298 | engines: {node: '>=4'} 1299 | 1300 | has-flag@4.0.0: 1301 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 1302 | engines: {node: '>=8'} 1303 | 1304 | hasown@2.0.2: 1305 | resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} 1306 | engines: {node: '>= 0.4'} 1307 | 1308 | htmlparser2@6.1.0: 1309 | resolution: {integrity: sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==} 1310 | 1311 | humanize-ms@1.2.1: 1312 | resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} 1313 | 1314 | ieee754@1.2.1: 1315 | resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} 1316 | 1317 | ignore-by-default@1.0.1: 1318 | resolution: {integrity: sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==} 1319 | 1320 | ignore@5.3.2: 1321 | resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} 1322 | engines: {node: '>= 4'} 1323 | 1324 | image-q@4.0.0: 1325 | resolution: {integrity: sha512-PfJGVgIfKQJuq3s0tTDOKtztksibuUEbJQIYT3by6wctQo+Rdlh7ef4evJ5NCdxY4CfMbvFkocEwbl4BF8RlJw==} 1326 | 1327 | import-fresh@3.3.0: 1328 | resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} 1329 | engines: {node: '>=6'} 1330 | 1331 | imurmurhash@0.1.4: 1332 | resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} 1333 | engines: {node: '>=0.8.19'} 1334 | 1335 | inherits@2.0.4: 1336 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} 1337 | 1338 | interpret@2.2.0: 1339 | resolution: {integrity: sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==} 1340 | engines: {node: '>= 0.10'} 1341 | 1342 | ip-address@9.0.5: 1343 | resolution: {integrity: sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==} 1344 | engines: {node: '>= 12'} 1345 | 1346 | is-arrayish@0.3.2: 1347 | resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} 1348 | 1349 | is-binary-path@2.1.0: 1350 | resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} 1351 | engines: {node: '>=8'} 1352 | 1353 | is-core-module@2.16.1: 1354 | resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} 1355 | engines: {node: '>= 0.4'} 1356 | 1357 | is-extglob@2.1.1: 1358 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 1359 | engines: {node: '>=0.10.0'} 1360 | 1361 | is-fullwidth-code-point@3.0.0: 1362 | resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} 1363 | engines: {node: '>=8'} 1364 | 1365 | is-glob@4.0.3: 1366 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 1367 | engines: {node: '>=0.10.0'} 1368 | 1369 | is-number@7.0.0: 1370 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 1371 | engines: {node: '>=0.12.0'} 1372 | 1373 | is-stream@2.0.1: 1374 | resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} 1375 | engines: {node: '>=8'} 1376 | 1377 | is-typedarray@1.0.0: 1378 | resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==} 1379 | 1380 | isexe@2.0.0: 1381 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 1382 | 1383 | jackspeak@3.4.3: 1384 | resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} 1385 | 1386 | jimp@1.6.0: 1387 | resolution: {integrity: sha512-YcwCHw1kiqEeI5xRpDlPPBGL2EOpBKLwO4yIBJcXWHPj5PnA5urGq0jbyhM5KoNpypQ6VboSoxc9D8HyfvngSg==} 1388 | engines: {node: '>=18'} 1389 | 1390 | joycon@3.1.1: 1391 | resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} 1392 | engines: {node: '>=10'} 1393 | 1394 | jpeg-js@0.4.4: 1395 | resolution: {integrity: sha512-WZzeDOEtTOBK4Mdsar0IqEU5sMr3vSV2RqkAIzUEV2BHnUfKGyswWFPFwK5EeDo93K3FohSHbLAjj0s1Wzd+dg==} 1396 | 1397 | js-yaml@4.1.0: 1398 | resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} 1399 | hasBin: true 1400 | 1401 | jsbn@1.1.0: 1402 | resolution: {integrity: sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==} 1403 | 1404 | json-buffer@3.0.1: 1405 | resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} 1406 | 1407 | json-schema-traverse@0.4.1: 1408 | resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} 1409 | 1410 | json-schema-traverse@1.0.0: 1411 | resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} 1412 | 1413 | json-stable-stringify-without-jsonify@1.0.1: 1414 | resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} 1415 | 1416 | json5@2.2.3: 1417 | resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} 1418 | engines: {node: '>=6'} 1419 | hasBin: true 1420 | 1421 | keyv@4.5.4: 1422 | resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} 1423 | 1424 | knex@3.1.0: 1425 | resolution: {integrity: sha512-GLoII6hR0c4ti243gMs5/1Rb3B+AjwMOfjYm97pu0FOQa7JH56hgBxYf5WK2525ceSbBY1cjeZ9yk99GPMB6Kw==} 1426 | engines: {node: '>=16'} 1427 | hasBin: true 1428 | peerDependencies: 1429 | better-sqlite3: '*' 1430 | mysql: '*' 1431 | mysql2: '*' 1432 | pg: '*' 1433 | pg-native: '*' 1434 | sqlite3: '*' 1435 | tedious: '*' 1436 | peerDependenciesMeta: 1437 | better-sqlite3: 1438 | optional: true 1439 | mysql: 1440 | optional: true 1441 | mysql2: 1442 | optional: true 1443 | pg: 1444 | optional: true 1445 | pg-native: 1446 | optional: true 1447 | sqlite3: 1448 | optional: true 1449 | tedious: 1450 | optional: true 1451 | 1452 | kuler@2.0.0: 1453 | resolution: {integrity: sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==} 1454 | 1455 | levn@0.4.1: 1456 | resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} 1457 | engines: {node: '>= 0.8.0'} 1458 | 1459 | lilconfig@3.1.3: 1460 | resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==} 1461 | engines: {node: '>=14'} 1462 | 1463 | lines-and-columns@1.2.4: 1464 | resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} 1465 | 1466 | load-tsconfig@0.2.5: 1467 | resolution: {integrity: sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==} 1468 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 1469 | 1470 | locate-path@6.0.0: 1471 | resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} 1472 | engines: {node: '>=10'} 1473 | 1474 | lodash.merge@4.6.2: 1475 | resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} 1476 | 1477 | lodash.sortby@4.7.0: 1478 | resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} 1479 | 1480 | lodash@4.17.21: 1481 | resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} 1482 | 1483 | logform@2.7.0: 1484 | resolution: {integrity: sha512-TFYA4jnP7PVbmlBIfhlSe+WKxs9dklXMTEGcBCIvLhE/Tn3H6Gk1norupVW7m5Cnd4bLcr08AytbyV/xj7f/kQ==} 1485 | engines: {node: '>= 12.0.0'} 1486 | 1487 | lru-cache@10.4.3: 1488 | resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} 1489 | 1490 | luxon@3.5.0: 1491 | resolution: {integrity: sha512-rh+Zjr6DNfUYR3bPwJEnuwDdqMbxZW7LOQfUN4B54+Cl+0o5zaU9RJ6bcidfDtC1cWCZXQ+nvX8bf6bAji37QQ==} 1492 | engines: {node: '>=12'} 1493 | 1494 | make-error@1.3.6: 1495 | resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} 1496 | 1497 | merge2@1.4.1: 1498 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} 1499 | engines: {node: '>= 8'} 1500 | 1501 | micromatch@4.0.8: 1502 | resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} 1503 | engines: {node: '>=8.6'} 1504 | 1505 | mime-db@1.52.0: 1506 | resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} 1507 | engines: {node: '>= 0.6'} 1508 | 1509 | mime-types@2.1.35: 1510 | resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} 1511 | engines: {node: '>= 0.6'} 1512 | 1513 | mime@3.0.0: 1514 | resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==} 1515 | engines: {node: '>=10.0.0'} 1516 | hasBin: true 1517 | 1518 | minimatch@3.1.2: 1519 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} 1520 | 1521 | minimatch@9.0.5: 1522 | resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} 1523 | engines: {node: '>=16 || 14 >=14.17'} 1524 | 1525 | minimist@1.2.8: 1526 | resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} 1527 | 1528 | minipass@7.1.2: 1529 | resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} 1530 | engines: {node: '>=16 || 14 >=14.17'} 1531 | 1532 | ms@2.0.0: 1533 | resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} 1534 | 1535 | ms@2.1.2: 1536 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} 1537 | 1538 | ms@2.1.3: 1539 | resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} 1540 | 1541 | mz@2.7.0: 1542 | resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} 1543 | 1544 | natural-compare-lite@1.4.0: 1545 | resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} 1546 | 1547 | natural-compare@1.4.0: 1548 | resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} 1549 | 1550 | next-tick@1.1.0: 1551 | resolution: {integrity: sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==} 1552 | 1553 | node-domexception@1.0.0: 1554 | resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} 1555 | engines: {node: '>=10.5.0'} 1556 | 1557 | node-fetch@2.7.0: 1558 | resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} 1559 | engines: {node: 4.x || >=6.0.0} 1560 | peerDependencies: 1561 | encoding: ^0.1.0 1562 | peerDependenciesMeta: 1563 | encoding: 1564 | optional: true 1565 | 1566 | node-gyp-build@4.8.4: 1567 | resolution: {integrity: sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==} 1568 | hasBin: true 1569 | 1570 | node-localstorage@2.2.1: 1571 | resolution: {integrity: sha512-vv8fJuOUCCvSPjDjBLlMqYMHob4aGjkmrkaE42/mZr0VT+ZAU10jRF8oTnX9+pgU9/vYJ8P7YT3Vd6ajkmzSCw==} 1572 | engines: {node: '>=0.12'} 1573 | 1574 | nodemon@3.1.9: 1575 | resolution: {integrity: sha512-hdr1oIb2p6ZSxu3PB2JWWYS7ZQ0qvaZsc3hK8DR8f02kRzc8rjYmxAIvdz+aYC+8F2IjNaB7HMcSDg8nQpJxyg==} 1576 | engines: {node: '>=10'} 1577 | hasBin: true 1578 | 1579 | normalize-path@3.0.0: 1580 | resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} 1581 | engines: {node: '>=0.10.0'} 1582 | 1583 | object-assign@4.1.1: 1584 | resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} 1585 | engines: {node: '>=0.10.0'} 1586 | 1587 | objection@3.1.5: 1588 | resolution: {integrity: sha512-Hx/ipAwXSuRBbOMWFKtRsAN0yITafqXtWB4OT4Z9wED7ty1h7bOnBdhLtcNus23GwLJqcMsRWdodL2p5GwlnfQ==} 1589 | engines: {node: '>=14.0.0'} 1590 | peerDependencies: 1591 | knex: '>=1.0.1' 1592 | 1593 | omggif@1.0.10: 1594 | resolution: {integrity: sha512-LMJTtvgc/nugXj0Vcrrs68Mn2D1r0zf630VNtqtpI1FEO7e+O9FP4gqs9AcnBaSEeoHIPm28u6qgPR0oyEpGSw==} 1595 | 1596 | one-time@1.0.0: 1597 | resolution: {integrity: sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==} 1598 | 1599 | openai@4.82.0: 1600 | resolution: {integrity: sha512-1bTxOVGZuVGsKKUWbh3BEwX1QxIXUftJv+9COhhGGVDTFwiaOd4gWsMynF2ewj1mg6by3/O+U8+EEHpWRdPaJg==} 1601 | hasBin: true 1602 | peerDependencies: 1603 | ws: ^8.18.0 1604 | zod: ^3.23.8 1605 | peerDependenciesMeta: 1606 | ws: 1607 | optional: true 1608 | zod: 1609 | optional: true 1610 | 1611 | optionator@0.9.4: 1612 | resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} 1613 | engines: {node: '>= 0.8.0'} 1614 | 1615 | p-limit@3.1.0: 1616 | resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} 1617 | engines: {node: '>=10'} 1618 | 1619 | p-locate@5.0.0: 1620 | resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} 1621 | engines: {node: '>=10'} 1622 | 1623 | package-json-from-dist@1.0.1: 1624 | resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} 1625 | 1626 | pako@1.0.11: 1627 | resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==} 1628 | 1629 | pako@2.1.0: 1630 | resolution: {integrity: sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==} 1631 | 1632 | parent-module@1.0.1: 1633 | resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} 1634 | engines: {node: '>=6'} 1635 | 1636 | parse-bmfont-ascii@1.0.6: 1637 | resolution: {integrity: sha512-U4RrVsUFCleIOBsIGYOMKjn9PavsGOXxbvYGtMOEfnId0SVNsgehXh1DxUdVPLoxd5mvcEtvmKs2Mmf0Mpa1ZA==} 1638 | 1639 | parse-bmfont-binary@1.0.6: 1640 | resolution: {integrity: sha512-GxmsRea0wdGdYthjuUeWTMWPqm2+FAd4GI8vCvhgJsFnoGhTrLhXDDupwTo7rXVAgaLIGoVHDZS9p/5XbSqeWA==} 1641 | 1642 | parse-bmfont-xml@1.1.6: 1643 | resolution: {integrity: sha512-0cEliVMZEhrFDwMh4SxIyVJpqYoOWDJ9P895tFuS+XuNzI5UBmBk5U5O4KuJdTnZpSBI4LFA2+ZiJaiwfSwlMA==} 1644 | 1645 | path-browserify@1.0.1: 1646 | resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} 1647 | 1648 | path-exists@4.0.0: 1649 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} 1650 | engines: {node: '>=8'} 1651 | 1652 | path-key@3.1.1: 1653 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 1654 | engines: {node: '>=8'} 1655 | 1656 | path-parse@1.0.7: 1657 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} 1658 | 1659 | path-scurry@1.11.1: 1660 | resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} 1661 | engines: {node: '>=16 || 14 >=14.18'} 1662 | 1663 | path-type@4.0.0: 1664 | resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} 1665 | engines: {node: '>=8'} 1666 | 1667 | peek-readable@4.1.0: 1668 | resolution: {integrity: sha512-ZI3LnwUv5nOGbQzD9c2iDG6toheuXSZP5esSHBjopsXH4dg19soufvpUGA3uohi5anFtGb2lhAVdHzH6R/Evvg==} 1669 | engines: {node: '>=8'} 1670 | 1671 | pg-connection-string@2.6.2: 1672 | resolution: {integrity: sha512-ch6OwaeaPYcova4kKZ15sbJ2hKb/VP48ZD2gE7i1J+L4MspCtBMAx8nMgz7bksc7IojCIIWuEhHibSMFH8m8oA==} 1673 | 1674 | picocolors@1.1.1: 1675 | resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} 1676 | 1677 | picomatch@2.3.1: 1678 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 1679 | engines: {node: '>=8.6'} 1680 | 1681 | picomatch@4.0.2: 1682 | resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} 1683 | engines: {node: '>=12'} 1684 | 1685 | pirates@4.0.6: 1686 | resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} 1687 | engines: {node: '>= 6'} 1688 | 1689 | pixelmatch@5.3.0: 1690 | resolution: {integrity: sha512-o8mkY4E/+LNUf6LzX96ht6k6CEDi65k9G2rjMtBe9Oo+VPKSvl+0GKHuH/AlG+GA5LPG/i5hrekkxUc3s2HU+Q==} 1691 | hasBin: true 1692 | 1693 | pngjs@6.0.0: 1694 | resolution: {integrity: sha512-TRzzuFRRmEoSW/p1KVAmiOgPco2Irlah+bGFCeNfJXxxYGwSw7YwAOAcd7X28K/m5bjBWKsC29KyoMfHbypayg==} 1695 | engines: {node: '>=12.13.0'} 1696 | 1697 | pngjs@7.0.0: 1698 | resolution: {integrity: sha512-LKWqWJRhstyYo9pGvgor/ivk2w94eSjE3RGVuzLGlr3NmD8bf7RcYGze1mNdEHRP6TRP6rMuDHk5t44hnTRyow==} 1699 | engines: {node: '>=14.19.0'} 1700 | 1701 | postcss-load-config@6.0.1: 1702 | resolution: {integrity: sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==} 1703 | engines: {node: '>= 18'} 1704 | peerDependencies: 1705 | jiti: '>=1.21.0' 1706 | postcss: '>=8.0.9' 1707 | tsx: ^4.8.1 1708 | yaml: ^2.4.2 1709 | peerDependenciesMeta: 1710 | jiti: 1711 | optional: true 1712 | postcss: 1713 | optional: true 1714 | tsx: 1715 | optional: true 1716 | yaml: 1717 | optional: true 1718 | 1719 | prelude-ls@1.2.1: 1720 | resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} 1721 | engines: {node: '>= 0.8.0'} 1722 | 1723 | prettier-linter-helpers@1.0.0: 1724 | resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} 1725 | engines: {node: '>=6.0.0'} 1726 | 1727 | prettier@3.4.2: 1728 | resolution: {integrity: sha512-e9MewbtFo+Fevyuxn/4rrcDAaq0IYxPGLvObpQjiZBMAzB9IGmzlnG9RZy3FFas+eBMu2vA0CszMeduow5dIuQ==} 1729 | engines: {node: '>=14'} 1730 | hasBin: true 1731 | 1732 | proxy-from-env@1.1.0: 1733 | resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} 1734 | 1735 | pstree.remy@1.1.8: 1736 | resolution: {integrity: sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==} 1737 | 1738 | punycode@2.3.1: 1739 | resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} 1740 | engines: {node: '>=6'} 1741 | 1742 | queue-microtask@1.2.3: 1743 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 1744 | 1745 | readable-stream@3.6.2: 1746 | resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} 1747 | engines: {node: '>= 6'} 1748 | 1749 | readable-web-to-node-stream@3.0.2: 1750 | resolution: {integrity: sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw==} 1751 | engines: {node: '>=8'} 1752 | 1753 | readdirp@3.6.0: 1754 | resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} 1755 | engines: {node: '>=8.10.0'} 1756 | 1757 | readdirp@4.1.1: 1758 | resolution: {integrity: sha512-h80JrZu/MHUZCyHu5ciuoI0+WxsCxzxJTILn6Fs8rxSnFPh+UVHYfeIxK1nVGugMqkfC4vJcBOYbkfkwYK0+gw==} 1759 | engines: {node: '>= 14.18.0'} 1760 | 1761 | real-cancellable-promise@1.2.1: 1762 | resolution: {integrity: sha512-JwhiWJTMMyzFYfpKsiSb8CyQktCi1MZ8ZBn3wXvq28qXDh8Y5dM7RYzgW3r6SV22JTEcof8pRsvDp4GxLmGIxg==} 1763 | 1764 | rechoir@0.8.0: 1765 | resolution: {integrity: sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==} 1766 | engines: {node: '>= 10.13.0'} 1767 | 1768 | require-from-string@2.0.2: 1769 | resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} 1770 | engines: {node: '>=0.10.0'} 1771 | 1772 | resolve-from@4.0.0: 1773 | resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} 1774 | engines: {node: '>=4'} 1775 | 1776 | resolve-from@5.0.0: 1777 | resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} 1778 | engines: {node: '>=8'} 1779 | 1780 | resolve@1.22.10: 1781 | resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==} 1782 | engines: {node: '>= 0.4'} 1783 | hasBin: true 1784 | 1785 | reusify@1.0.4: 1786 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} 1787 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 1788 | 1789 | rollup@4.32.1: 1790 | resolution: {integrity: sha512-z+aeEsOeEa3mEbS1Tjl6sAZ8NE3+AalQz1RJGj81M+fizusbdDMoEJwdJNHfaB40Scr4qNu+welOfes7maKonA==} 1791 | engines: {node: '>=18.0.0', npm: '>=8.0.0'} 1792 | hasBin: true 1793 | 1794 | run-parallel@1.2.0: 1795 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 1796 | 1797 | safe-buffer@5.2.1: 1798 | resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} 1799 | 1800 | safe-stable-stringify@2.5.0: 1801 | resolution: {integrity: sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==} 1802 | engines: {node: '>=10'} 1803 | 1804 | sax@1.4.1: 1805 | resolution: {integrity: sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==} 1806 | 1807 | semver@7.7.0: 1808 | resolution: {integrity: sha512-DrfFnPzblFmNrIZzg5RzHegbiRWg7KMR7btwi2yjHwx06zsUbO5g613sVwEV7FTwmzJu+Io0lJe2GJ3LxqpvBQ==} 1809 | engines: {node: '>=10'} 1810 | hasBin: true 1811 | 1812 | shebang-command@2.0.0: 1813 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 1814 | engines: {node: '>=8'} 1815 | 1816 | shebang-regex@3.0.0: 1817 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 1818 | engines: {node: '>=8'} 1819 | 1820 | signal-exit@4.1.0: 1821 | resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} 1822 | engines: {node: '>=14'} 1823 | 1824 | simple-swizzle@0.2.2: 1825 | resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} 1826 | 1827 | simple-update-notifier@2.0.0: 1828 | resolution: {integrity: sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==} 1829 | engines: {node: '>=10'} 1830 | 1831 | simple-xml-to-json@1.2.3: 1832 | resolution: {integrity: sha512-kWJDCr9EWtZ+/EYYM5MareWj2cRnZGF93YDNpH4jQiHB+hBIZnfPFSQiVMzZOdk+zXWqTZ/9fTeQNu2DqeiudA==} 1833 | engines: {node: '>=20.12.2'} 1834 | 1835 | slash@3.0.0: 1836 | resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} 1837 | engines: {node: '>=8'} 1838 | 1839 | slide@1.1.6: 1840 | resolution: {integrity: sha512-NwrtjCg+lZoqhFU8fOwl4ay2ei8PaqCBOUV3/ektPY9trO1yQ1oXEfmHAhKArUVUr/hOHvy5f6AdP17dCM0zMw==} 1841 | 1842 | smart-buffer@4.2.0: 1843 | resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} 1844 | engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} 1845 | 1846 | socks@2.8.3: 1847 | resolution: {integrity: sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==} 1848 | engines: {node: '>= 10.0.0', npm: '>= 3.0.0'} 1849 | 1850 | source-map-support@0.5.21: 1851 | resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} 1852 | 1853 | source-map@0.6.1: 1854 | resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} 1855 | engines: {node: '>=0.10.0'} 1856 | 1857 | source-map@0.8.0-beta.0: 1858 | resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} 1859 | engines: {node: '>= 8'} 1860 | 1861 | sprintf-js@1.1.3: 1862 | resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==} 1863 | 1864 | stack-trace@0.0.10: 1865 | resolution: {integrity: sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==} 1866 | 1867 | store2@2.14.4: 1868 | resolution: {integrity: sha512-srTItn1GOvyvOycgxjAnPA63FZNwy0PTyUBFMHRM+hVFltAeoh0LmNBz9SZqUS9mMqGk8rfyWyXn3GH5ReJ8Zw==} 1869 | 1870 | string-width@4.2.3: 1871 | resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} 1872 | engines: {node: '>=8'} 1873 | 1874 | string-width@5.1.2: 1875 | resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} 1876 | engines: {node: '>=12'} 1877 | 1878 | string_decoder@1.3.0: 1879 | resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} 1880 | 1881 | strip-ansi@6.0.1: 1882 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} 1883 | engines: {node: '>=8'} 1884 | 1885 | strip-ansi@7.1.0: 1886 | resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} 1887 | engines: {node: '>=12'} 1888 | 1889 | strip-bom@3.0.0: 1890 | resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} 1891 | engines: {node: '>=4'} 1892 | 1893 | strip-json-comments@3.1.1: 1894 | resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} 1895 | engines: {node: '>=8'} 1896 | 1897 | strtok3@6.3.0: 1898 | resolution: {integrity: sha512-fZtbhtvI9I48xDSywd/somNqgUHl2L2cstmXCCif0itOf96jeW18MBSyrLuNicYQVkvpOxkZtkzujiTJ9LW5Jw==} 1899 | engines: {node: '>=10'} 1900 | 1901 | sucrase@3.35.0: 1902 | resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} 1903 | engines: {node: '>=16 || 14 >=14.17'} 1904 | hasBin: true 1905 | 1906 | supports-color@5.5.0: 1907 | resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} 1908 | engines: {node: '>=4'} 1909 | 1910 | supports-color@7.2.0: 1911 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 1912 | engines: {node: '>=8'} 1913 | 1914 | supports-preserve-symlinks-flag@1.0.0: 1915 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} 1916 | engines: {node: '>= 0.4'} 1917 | 1918 | synckit@0.9.2: 1919 | resolution: {integrity: sha512-vrozgXDQwYO72vHjUb/HnFbQx1exDjoKzqx23aXEg2a9VIg2TSFZ8FmeZpTjUCFMYw7mpX4BE2SFu8wI7asYsw==} 1920 | engines: {node: ^14.18.0 || >=16.0.0} 1921 | 1922 | tarn@3.0.2: 1923 | resolution: {integrity: sha512-51LAVKUSZSVfI05vjPESNc5vwqqZpbXCsU+/+wxlOrUjk2SnFTt97v9ZgQrD4YmxYW1Px6w2KjaDitCfkvgxMQ==} 1924 | engines: {node: '>=8.0.0'} 1925 | 1926 | telegram@2.26.16: 1927 | resolution: {integrity: sha512-5tqL9HicCxRqEi+9JjXBteVDnoZ+1ggsBFxLQTO49aXwTI2d7To7xb2vOU/ahLwgKuE+Db9ra5xDJZ76Kk0NEA==} 1928 | 1929 | text-hex@1.0.0: 1930 | resolution: {integrity: sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==} 1931 | 1932 | thenify-all@1.6.0: 1933 | resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} 1934 | engines: {node: '>=0.8'} 1935 | 1936 | thenify@3.3.1: 1937 | resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} 1938 | 1939 | tildify@2.0.0: 1940 | resolution: {integrity: sha512-Cc+OraorugtXNfs50hU9KS369rFXCfgGLpfCfvlc+Ud5u6VWmUQsOAa9HbTvheQdYnrdJqqv1e5oIqXppMYnSw==} 1941 | engines: {node: '>=8'} 1942 | 1943 | tinycolor2@1.6.0: 1944 | resolution: {integrity: sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==} 1945 | 1946 | tinyexec@0.3.2: 1947 | resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} 1948 | 1949 | tinyglobby@0.2.10: 1950 | resolution: {integrity: sha512-Zc+8eJlFMvgatPZTl6A9L/yht8QqdmUNtURHaKZLmKBE12hNPSrqNkUp2cs3M/UKmNVVAMFQYSjYIVHDjW5zew==} 1951 | engines: {node: '>=12.0.0'} 1952 | 1953 | to-regex-range@5.0.1: 1954 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 1955 | engines: {node: '>=8.0'} 1956 | 1957 | token-types@4.2.1: 1958 | resolution: {integrity: sha512-6udB24Q737UD/SDsKAHI9FCRP7Bqc9D/MQUV02ORQg5iskjtLJlZJNdN4kKtcdtwCeWIwIHDGaUsTsCCAa8sFQ==} 1959 | engines: {node: '>=10'} 1960 | 1961 | touch@3.1.1: 1962 | resolution: {integrity: sha512-r0eojU4bI8MnHr8c5bNo7lJDdI2qXlWWJk6a9EAFG7vbhTjElYhBVS3/miuE0uOuoLdb8Mc/rVfsmm6eo5o9GA==} 1963 | hasBin: true 1964 | 1965 | tr46@0.0.3: 1966 | resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} 1967 | 1968 | tr46@1.0.1: 1969 | resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==} 1970 | 1971 | tree-kill@1.2.2: 1972 | resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} 1973 | hasBin: true 1974 | 1975 | triple-beam@1.4.1: 1976 | resolution: {integrity: sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==} 1977 | engines: {node: '>= 14.0.0'} 1978 | 1979 | ts-api-utils@2.0.0: 1980 | resolution: {integrity: sha512-xCt/TOAc+EOHS1XPnijD3/yzpH6qg2xppZO1YDqGoVsNXfQfzHpOdNuXwrwOU8u4ITXJyDCTyt8w5g1sZv9ynQ==} 1981 | engines: {node: '>=18.12'} 1982 | peerDependencies: 1983 | typescript: '>=4.8.4' 1984 | 1985 | ts-custom-error@3.3.1: 1986 | resolution: {integrity: sha512-5OX1tzOjxWEgsr/YEUWSuPrQ00deKLh6D7OTWcvNHm12/7QPyRh8SYpyWvA4IZv8H/+GQWQEh/kwo95Q9OVW1A==} 1987 | engines: {node: '>=14.0.0'} 1988 | 1989 | ts-interface-checker@0.1.13: 1990 | resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} 1991 | 1992 | ts-node@10.9.2: 1993 | resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} 1994 | hasBin: true 1995 | peerDependencies: 1996 | '@swc/core': '>=1.2.50' 1997 | '@swc/wasm': '>=1.2.50' 1998 | '@types/node': '*' 1999 | typescript: '>=2.7' 2000 | peerDependenciesMeta: 2001 | '@swc/core': 2002 | optional: true 2003 | '@swc/wasm': 2004 | optional: true 2005 | 2006 | tsconfig-paths@4.2.0: 2007 | resolution: {integrity: sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==} 2008 | engines: {node: '>=6'} 2009 | 2010 | tslib@1.14.1: 2011 | resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} 2012 | 2013 | tslib@2.6.2: 2014 | resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} 2015 | 2016 | tslib@2.8.1: 2017 | resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} 2018 | 2019 | tsup@8.3.6: 2020 | resolution: {integrity: sha512-XkVtlDV/58S9Ye0JxUUTcrQk4S+EqlOHKzg6Roa62rdjL1nGWNUstG0xgI4vanHdfIpjP448J8vlN0oK6XOJ5g==} 2021 | engines: {node: '>=18'} 2022 | hasBin: true 2023 | peerDependencies: 2024 | '@microsoft/api-extractor': ^7.36.0 2025 | '@swc/core': ^1 2026 | postcss: ^8.4.12 2027 | typescript: '>=4.5.0' 2028 | peerDependenciesMeta: 2029 | '@microsoft/api-extractor': 2030 | optional: true 2031 | '@swc/core': 2032 | optional: true 2033 | postcss: 2034 | optional: true 2035 | typescript: 2036 | optional: true 2037 | 2038 | tsutils@3.21.0: 2039 | resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} 2040 | engines: {node: '>= 6'} 2041 | peerDependencies: 2042 | typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' 2043 | 2044 | type-check@0.4.0: 2045 | resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} 2046 | engines: {node: '>= 0.8.0'} 2047 | 2048 | type@2.7.3: 2049 | resolution: {integrity: sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ==} 2050 | 2051 | typedarray-to-buffer@3.1.5: 2052 | resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==} 2053 | 2054 | typescript@5.7.3: 2055 | resolution: {integrity: sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==} 2056 | engines: {node: '>=14.17'} 2057 | hasBin: true 2058 | 2059 | undefsafe@2.0.5: 2060 | resolution: {integrity: sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==} 2061 | 2062 | undici-types@5.26.5: 2063 | resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} 2064 | 2065 | undici-types@6.20.0: 2066 | resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==} 2067 | 2068 | uri-js@4.4.1: 2069 | resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} 2070 | 2071 | utf-8-validate@5.0.10: 2072 | resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==} 2073 | engines: {node: '>=6.14.2'} 2074 | 2075 | utif2@4.1.0: 2076 | resolution: {integrity: sha512-+oknB9FHrJ7oW7A2WZYajOcv4FcDR4CfoGB0dPNfxbi4GO05RRnFmt5oa23+9w32EanrYcSJWspUiJkLMs+37w==} 2077 | 2078 | util-deprecate@1.0.2: 2079 | resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} 2080 | 2081 | v8-compile-cache-lib@3.0.1: 2082 | resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} 2083 | 2084 | web-streams-polyfill@4.0.0-beta.3: 2085 | resolution: {integrity: sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==} 2086 | engines: {node: '>= 14'} 2087 | 2088 | webidl-conversions@3.0.1: 2089 | resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} 2090 | 2091 | webidl-conversions@4.0.2: 2092 | resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} 2093 | 2094 | websocket@1.0.35: 2095 | resolution: {integrity: sha512-/REy6amwPZl44DDzvRCkaI1q1bIiQB0mEFQLUrhz3z2EK91cp3n72rAjUlrTP0zV22HJIUOVHQGPxhFRjxjt+Q==} 2096 | engines: {node: '>=4.0.0'} 2097 | 2098 | whatwg-url@5.0.0: 2099 | resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} 2100 | 2101 | whatwg-url@7.1.0: 2102 | resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==} 2103 | 2104 | which@2.0.2: 2105 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 2106 | engines: {node: '>= 8'} 2107 | hasBin: true 2108 | 2109 | winston-transport@4.9.0: 2110 | resolution: {integrity: sha512-8drMJ4rkgaPo1Me4zD/3WLfI/zPdA9o2IipKODunnGDcuqbHwjsbB79ylv04LCGGzU0xQ6vTznOMpQGaLhhm6A==} 2111 | engines: {node: '>= 12.0.0'} 2112 | 2113 | winston@3.17.0: 2114 | resolution: {integrity: sha512-DLiFIXYC5fMPxaRg832S6F5mJYvePtmO5G9v9IgUFPhXm9/GkXarH/TUrBAVzhTCzAj9anE/+GjrgXp/54nOgw==} 2115 | engines: {node: '>= 12.0.0'} 2116 | 2117 | word-wrap@1.2.5: 2118 | resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} 2119 | engines: {node: '>=0.10.0'} 2120 | 2121 | wrap-ansi@7.0.0: 2122 | resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} 2123 | engines: {node: '>=10'} 2124 | 2125 | wrap-ansi@8.1.0: 2126 | resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} 2127 | engines: {node: '>=12'} 2128 | 2129 | write-file-atomic@1.3.4: 2130 | resolution: {integrity: sha512-SdrHoC/yVBPpV0Xq/mUZQIpW2sWXAShb/V4pomcJXh92RuaO+f3UTWItiR3Px+pLnV2PvC2/bfn5cwr5X6Vfxw==} 2131 | 2132 | xml-parse-from-string@1.0.1: 2133 | resolution: {integrity: sha512-ErcKwJTF54uRzzNMXq2X5sMIy88zJvfN2DmdoQvy7PAFJ+tPRU6ydWuOKNMyfmOjdyBQTFREi60s0Y0SyI0G0g==} 2134 | 2135 | xml2js@0.5.0: 2136 | resolution: {integrity: sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==} 2137 | engines: {node: '>=4.0.0'} 2138 | 2139 | xmlbuilder@11.0.1: 2140 | resolution: {integrity: sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==} 2141 | engines: {node: '>=4.0'} 2142 | 2143 | yaeti@0.0.6: 2144 | resolution: {integrity: sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==} 2145 | engines: {node: '>=0.10.32'} 2146 | 2147 | yaml@2.5.1: 2148 | resolution: {integrity: sha512-bLQOjaX/ADgQ20isPJRvF0iRUHIxVhYvr53Of7wGcWlO2jvtUlH5m87DsmulFVxRpNLOnI4tB6p/oh8D7kpn9Q==} 2149 | engines: {node: '>= 14'} 2150 | hasBin: true 2151 | 2152 | yarn-upgrade-all@0.7.4: 2153 | resolution: {integrity: sha512-poqeMyl5LD+xkw9YN322UHqctTf/N6FLpLsAVUllZqGcntEYkDuKL5r4p+zB67z5MaLs8F3qpPNlc9jNjXSABw==} 2154 | hasBin: true 2155 | 2156 | yn@3.1.1: 2157 | resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} 2158 | engines: {node: '>=6'} 2159 | 2160 | yocto-queue@0.1.0: 2161 | resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} 2162 | engines: {node: '>=10'} 2163 | 2164 | zod@3.24.1: 2165 | resolution: {integrity: sha512-muH7gBL9sI1nciMZV67X5fTKKBLtwpZ5VBp1vsOQzj1MhrBZ4wlVCm3gedKZWLp0Oyel8sIGfeiz54Su+OVT+A==} 2166 | 2167 | snapshots: 2168 | 2169 | '@colors/colors@1.6.0': {} 2170 | 2171 | '@cryptography/aes@0.1.1': {} 2172 | 2173 | '@cspotcode/source-map-support@0.8.1': 2174 | dependencies: 2175 | '@jridgewell/trace-mapping': 0.3.9 2176 | 2177 | '@dabh/diagnostics@2.0.3': 2178 | dependencies: 2179 | colorspace: 1.1.4 2180 | enabled: 2.0.0 2181 | kuler: 2.0.0 2182 | 2183 | '@esbuild/aix-ppc64@0.24.2': 2184 | optional: true 2185 | 2186 | '@esbuild/android-arm64@0.24.2': 2187 | optional: true 2188 | 2189 | '@esbuild/android-arm@0.24.2': 2190 | optional: true 2191 | 2192 | '@esbuild/android-x64@0.24.2': 2193 | optional: true 2194 | 2195 | '@esbuild/darwin-arm64@0.24.2': 2196 | optional: true 2197 | 2198 | '@esbuild/darwin-x64@0.24.2': 2199 | optional: true 2200 | 2201 | '@esbuild/freebsd-arm64@0.24.2': 2202 | optional: true 2203 | 2204 | '@esbuild/freebsd-x64@0.24.2': 2205 | optional: true 2206 | 2207 | '@esbuild/linux-arm64@0.24.2': 2208 | optional: true 2209 | 2210 | '@esbuild/linux-arm@0.24.2': 2211 | optional: true 2212 | 2213 | '@esbuild/linux-ia32@0.24.2': 2214 | optional: true 2215 | 2216 | '@esbuild/linux-loong64@0.24.2': 2217 | optional: true 2218 | 2219 | '@esbuild/linux-mips64el@0.24.2': 2220 | optional: true 2221 | 2222 | '@esbuild/linux-ppc64@0.24.2': 2223 | optional: true 2224 | 2225 | '@esbuild/linux-riscv64@0.24.2': 2226 | optional: true 2227 | 2228 | '@esbuild/linux-s390x@0.24.2': 2229 | optional: true 2230 | 2231 | '@esbuild/linux-x64@0.24.2': 2232 | optional: true 2233 | 2234 | '@esbuild/netbsd-arm64@0.24.2': 2235 | optional: true 2236 | 2237 | '@esbuild/netbsd-x64@0.24.2': 2238 | optional: true 2239 | 2240 | '@esbuild/openbsd-arm64@0.24.2': 2241 | optional: true 2242 | 2243 | '@esbuild/openbsd-x64@0.24.2': 2244 | optional: true 2245 | 2246 | '@esbuild/sunos-x64@0.24.2': 2247 | optional: true 2248 | 2249 | '@esbuild/win32-arm64@0.24.2': 2250 | optional: true 2251 | 2252 | '@esbuild/win32-ia32@0.24.2': 2253 | optional: true 2254 | 2255 | '@esbuild/win32-x64@0.24.2': 2256 | optional: true 2257 | 2258 | '@eslint-community/eslint-utils@4.4.1(eslint@9.19.0)': 2259 | dependencies: 2260 | eslint: 9.19.0 2261 | eslint-visitor-keys: 3.4.3 2262 | 2263 | '@eslint-community/regexpp@4.12.1': {} 2264 | 2265 | '@eslint/config-array@0.19.2': 2266 | dependencies: 2267 | '@eslint/object-schema': 2.1.6 2268 | debug: 4.4.0(supports-color@5.5.0) 2269 | minimatch: 3.1.2 2270 | transitivePeerDependencies: 2271 | - supports-color 2272 | 2273 | '@eslint/core@0.10.0': 2274 | dependencies: 2275 | '@types/json-schema': 7.0.15 2276 | 2277 | '@eslint/eslintrc@3.2.0': 2278 | dependencies: 2279 | ajv: 6.12.6 2280 | debug: 4.4.0(supports-color@5.5.0) 2281 | espree: 10.3.0 2282 | globals: 14.0.0 2283 | ignore: 5.3.2 2284 | import-fresh: 3.3.0 2285 | js-yaml: 4.1.0 2286 | minimatch: 3.1.2 2287 | strip-json-comments: 3.1.1 2288 | transitivePeerDependencies: 2289 | - supports-color 2290 | 2291 | '@eslint/js@9.19.0': {} 2292 | 2293 | '@eslint/object-schema@2.1.6': {} 2294 | 2295 | '@eslint/plugin-kit@0.2.5': 2296 | dependencies: 2297 | '@eslint/core': 0.10.0 2298 | levn: 0.4.1 2299 | 2300 | '@grammyjs/files@1.1.1(grammy@1.34.1)': 2301 | dependencies: 2302 | grammy: 1.34.1 2303 | 2304 | '@grammyjs/hydrate@1.4.1(grammy@1.34.1)': 2305 | dependencies: 2306 | abort-controller: 3.0.0 2307 | grammy: 1.34.1 2308 | 2309 | '@grammyjs/menu@1.3.0(grammy@1.34.1)': 2310 | dependencies: 2311 | grammy: 1.34.1 2312 | 2313 | '@grammyjs/parse-mode@1.11.1(grammy@1.34.1)': 2314 | dependencies: 2315 | grammy: 1.34.1 2316 | 2317 | '@grammyjs/types@3.18.0': {} 2318 | 2319 | '@humanfs/core@0.19.1': {} 2320 | 2321 | '@humanfs/node@0.16.6': 2322 | dependencies: 2323 | '@humanfs/core': 0.19.1 2324 | '@humanwhocodes/retry': 0.3.1 2325 | 2326 | '@humanwhocodes/module-importer@1.0.1': {} 2327 | 2328 | '@humanwhocodes/retry@0.3.1': {} 2329 | 2330 | '@humanwhocodes/retry@0.4.1': {} 2331 | 2332 | '@isaacs/cliui@8.0.2': 2333 | dependencies: 2334 | string-width: 5.1.2 2335 | string-width-cjs: string-width@4.2.3 2336 | strip-ansi: 7.1.0 2337 | strip-ansi-cjs: strip-ansi@6.0.1 2338 | wrap-ansi: 8.1.0 2339 | wrap-ansi-cjs: wrap-ansi@7.0.0 2340 | 2341 | '@jimp/core@1.6.0': 2342 | dependencies: 2343 | '@jimp/file-ops': 1.6.0 2344 | '@jimp/types': 1.6.0 2345 | '@jimp/utils': 1.6.0 2346 | await-to-js: 3.0.0 2347 | exif-parser: 0.1.12 2348 | file-type: 16.5.4 2349 | mime: 3.0.0 2350 | 2351 | '@jimp/diff@1.6.0': 2352 | dependencies: 2353 | '@jimp/plugin-resize': 1.6.0 2354 | '@jimp/types': 1.6.0 2355 | '@jimp/utils': 1.6.0 2356 | pixelmatch: 5.3.0 2357 | 2358 | '@jimp/file-ops@1.6.0': {} 2359 | 2360 | '@jimp/js-bmp@1.6.0': 2361 | dependencies: 2362 | '@jimp/core': 1.6.0 2363 | '@jimp/types': 1.6.0 2364 | '@jimp/utils': 1.6.0 2365 | bmp-ts: 1.0.9 2366 | 2367 | '@jimp/js-gif@1.6.0': 2368 | dependencies: 2369 | '@jimp/core': 1.6.0 2370 | '@jimp/types': 1.6.0 2371 | gifwrap: 0.10.1 2372 | omggif: 1.0.10 2373 | 2374 | '@jimp/js-jpeg@1.6.0': 2375 | dependencies: 2376 | '@jimp/core': 1.6.0 2377 | '@jimp/types': 1.6.0 2378 | jpeg-js: 0.4.4 2379 | 2380 | '@jimp/js-png@1.6.0': 2381 | dependencies: 2382 | '@jimp/core': 1.6.0 2383 | '@jimp/types': 1.6.0 2384 | pngjs: 7.0.0 2385 | 2386 | '@jimp/js-tiff@1.6.0': 2387 | dependencies: 2388 | '@jimp/core': 1.6.0 2389 | '@jimp/types': 1.6.0 2390 | utif2: 4.1.0 2391 | 2392 | '@jimp/plugin-blit@1.6.0': 2393 | dependencies: 2394 | '@jimp/types': 1.6.0 2395 | '@jimp/utils': 1.6.0 2396 | zod: 3.24.1 2397 | 2398 | '@jimp/plugin-blur@1.6.0': 2399 | dependencies: 2400 | '@jimp/core': 1.6.0 2401 | '@jimp/utils': 1.6.0 2402 | 2403 | '@jimp/plugin-circle@1.6.0': 2404 | dependencies: 2405 | '@jimp/types': 1.6.0 2406 | zod: 3.24.1 2407 | 2408 | '@jimp/plugin-color@1.6.0': 2409 | dependencies: 2410 | '@jimp/core': 1.6.0 2411 | '@jimp/types': 1.6.0 2412 | '@jimp/utils': 1.6.0 2413 | tinycolor2: 1.6.0 2414 | zod: 3.24.1 2415 | 2416 | '@jimp/plugin-contain@1.6.0': 2417 | dependencies: 2418 | '@jimp/core': 1.6.0 2419 | '@jimp/plugin-blit': 1.6.0 2420 | '@jimp/plugin-resize': 1.6.0 2421 | '@jimp/types': 1.6.0 2422 | '@jimp/utils': 1.6.0 2423 | zod: 3.24.1 2424 | 2425 | '@jimp/plugin-cover@1.6.0': 2426 | dependencies: 2427 | '@jimp/core': 1.6.0 2428 | '@jimp/plugin-crop': 1.6.0 2429 | '@jimp/plugin-resize': 1.6.0 2430 | '@jimp/types': 1.6.0 2431 | zod: 3.24.1 2432 | 2433 | '@jimp/plugin-crop@1.6.0': 2434 | dependencies: 2435 | '@jimp/core': 1.6.0 2436 | '@jimp/types': 1.6.0 2437 | '@jimp/utils': 1.6.0 2438 | zod: 3.24.1 2439 | 2440 | '@jimp/plugin-displace@1.6.0': 2441 | dependencies: 2442 | '@jimp/types': 1.6.0 2443 | '@jimp/utils': 1.6.0 2444 | zod: 3.24.1 2445 | 2446 | '@jimp/plugin-dither@1.6.0': 2447 | dependencies: 2448 | '@jimp/types': 1.6.0 2449 | 2450 | '@jimp/plugin-fisheye@1.6.0': 2451 | dependencies: 2452 | '@jimp/types': 1.6.0 2453 | '@jimp/utils': 1.6.0 2454 | zod: 3.24.1 2455 | 2456 | '@jimp/plugin-flip@1.6.0': 2457 | dependencies: 2458 | '@jimp/types': 1.6.0 2459 | zod: 3.24.1 2460 | 2461 | '@jimp/plugin-hash@1.6.0': 2462 | dependencies: 2463 | '@jimp/core': 1.6.0 2464 | '@jimp/js-bmp': 1.6.0 2465 | '@jimp/js-jpeg': 1.6.0 2466 | '@jimp/js-png': 1.6.0 2467 | '@jimp/js-tiff': 1.6.0 2468 | '@jimp/plugin-color': 1.6.0 2469 | '@jimp/plugin-resize': 1.6.0 2470 | '@jimp/types': 1.6.0 2471 | '@jimp/utils': 1.6.0 2472 | any-base: 1.1.0 2473 | 2474 | '@jimp/plugin-mask@1.6.0': 2475 | dependencies: 2476 | '@jimp/types': 1.6.0 2477 | zod: 3.24.1 2478 | 2479 | '@jimp/plugin-print@1.6.0': 2480 | dependencies: 2481 | '@jimp/core': 1.6.0 2482 | '@jimp/js-jpeg': 1.6.0 2483 | '@jimp/js-png': 1.6.0 2484 | '@jimp/plugin-blit': 1.6.0 2485 | '@jimp/types': 1.6.0 2486 | parse-bmfont-ascii: 1.0.6 2487 | parse-bmfont-binary: 1.0.6 2488 | parse-bmfont-xml: 1.1.6 2489 | simple-xml-to-json: 1.2.3 2490 | zod: 3.24.1 2491 | 2492 | '@jimp/plugin-quantize@1.6.0': 2493 | dependencies: 2494 | image-q: 4.0.0 2495 | zod: 3.24.1 2496 | 2497 | '@jimp/plugin-resize@1.6.0': 2498 | dependencies: 2499 | '@jimp/core': 1.6.0 2500 | '@jimp/types': 1.6.0 2501 | zod: 3.24.1 2502 | 2503 | '@jimp/plugin-rotate@1.6.0': 2504 | dependencies: 2505 | '@jimp/core': 1.6.0 2506 | '@jimp/plugin-crop': 1.6.0 2507 | '@jimp/plugin-resize': 1.6.0 2508 | '@jimp/types': 1.6.0 2509 | '@jimp/utils': 1.6.0 2510 | zod: 3.24.1 2511 | 2512 | '@jimp/plugin-threshold@1.6.0': 2513 | dependencies: 2514 | '@jimp/core': 1.6.0 2515 | '@jimp/plugin-color': 1.6.0 2516 | '@jimp/plugin-hash': 1.6.0 2517 | '@jimp/types': 1.6.0 2518 | '@jimp/utils': 1.6.0 2519 | zod: 3.24.1 2520 | 2521 | '@jimp/types@1.6.0': 2522 | dependencies: 2523 | zod: 3.24.1 2524 | 2525 | '@jimp/utils@1.6.0': 2526 | dependencies: 2527 | '@jimp/types': 1.6.0 2528 | tinycolor2: 1.6.0 2529 | 2530 | '@jridgewell/gen-mapping@0.3.8': 2531 | dependencies: 2532 | '@jridgewell/set-array': 1.2.1 2533 | '@jridgewell/sourcemap-codec': 1.5.0 2534 | '@jridgewell/trace-mapping': 0.3.25 2535 | 2536 | '@jridgewell/resolve-uri@3.1.2': {} 2537 | 2538 | '@jridgewell/set-array@1.2.1': {} 2539 | 2540 | '@jridgewell/sourcemap-codec@1.5.0': {} 2541 | 2542 | '@jridgewell/trace-mapping@0.3.25': 2543 | dependencies: 2544 | '@jridgewell/resolve-uri': 3.1.2 2545 | '@jridgewell/sourcemap-codec': 1.5.0 2546 | 2547 | '@jridgewell/trace-mapping@0.3.9': 2548 | dependencies: 2549 | '@jridgewell/resolve-uri': 3.1.2 2550 | '@jridgewell/sourcemap-codec': 1.5.0 2551 | 2552 | '@nodelib/fs.scandir@2.1.5': 2553 | dependencies: 2554 | '@nodelib/fs.stat': 2.0.5 2555 | run-parallel: 1.2.0 2556 | 2557 | '@nodelib/fs.stat@2.0.5': {} 2558 | 2559 | '@nodelib/fs.walk@1.2.8': 2560 | dependencies: 2561 | '@nodelib/fs.scandir': 2.1.5 2562 | fastq: 1.19.0 2563 | 2564 | '@pkgjs/parseargs@0.11.0': 2565 | optional: true 2566 | 2567 | '@pkgr/core@0.1.1': {} 2568 | 2569 | '@rollup/rollup-android-arm-eabi@4.32.1': 2570 | optional: true 2571 | 2572 | '@rollup/rollup-android-arm64@4.32.1': 2573 | optional: true 2574 | 2575 | '@rollup/rollup-darwin-arm64@4.32.1': 2576 | optional: true 2577 | 2578 | '@rollup/rollup-darwin-x64@4.32.1': 2579 | optional: true 2580 | 2581 | '@rollup/rollup-freebsd-arm64@4.32.1': 2582 | optional: true 2583 | 2584 | '@rollup/rollup-freebsd-x64@4.32.1': 2585 | optional: true 2586 | 2587 | '@rollup/rollup-linux-arm-gnueabihf@4.32.1': 2588 | optional: true 2589 | 2590 | '@rollup/rollup-linux-arm-musleabihf@4.32.1': 2591 | optional: true 2592 | 2593 | '@rollup/rollup-linux-arm64-gnu@4.32.1': 2594 | optional: true 2595 | 2596 | '@rollup/rollup-linux-arm64-musl@4.32.1': 2597 | optional: true 2598 | 2599 | '@rollup/rollup-linux-loongarch64-gnu@4.32.1': 2600 | optional: true 2601 | 2602 | '@rollup/rollup-linux-powerpc64le-gnu@4.32.1': 2603 | optional: true 2604 | 2605 | '@rollup/rollup-linux-riscv64-gnu@4.32.1': 2606 | optional: true 2607 | 2608 | '@rollup/rollup-linux-s390x-gnu@4.32.1': 2609 | optional: true 2610 | 2611 | '@rollup/rollup-linux-x64-gnu@4.32.1': 2612 | optional: true 2613 | 2614 | '@rollup/rollup-linux-x64-musl@4.32.1': 2615 | optional: true 2616 | 2617 | '@rollup/rollup-win32-arm64-msvc@4.32.1': 2618 | optional: true 2619 | 2620 | '@rollup/rollup-win32-ia32-msvc@4.32.1': 2621 | optional: true 2622 | 2623 | '@rollup/rollup-win32-x64-msvc@4.32.1': 2624 | optional: true 2625 | 2626 | '@tokenizer/token@0.3.0': {} 2627 | 2628 | '@tsconfig/node10@1.0.11': {} 2629 | 2630 | '@tsconfig/node12@1.0.11': {} 2631 | 2632 | '@tsconfig/node14@1.0.3': {} 2633 | 2634 | '@tsconfig/node16@1.0.4': {} 2635 | 2636 | '@types/estree@1.0.6': {} 2637 | 2638 | '@types/json-schema@7.0.15': {} 2639 | 2640 | '@types/luxon@3.4.2': {} 2641 | 2642 | '@types/node-fetch@2.6.12': 2643 | dependencies: 2644 | '@types/node': 22.13.0 2645 | form-data: 4.0.1 2646 | 2647 | '@types/node@16.9.1': {} 2648 | 2649 | '@types/node@18.19.74': 2650 | dependencies: 2651 | undici-types: 5.26.5 2652 | 2653 | '@types/node@22.13.0': 2654 | dependencies: 2655 | undici-types: 6.20.0 2656 | 2657 | '@types/semver@7.5.8': {} 2658 | 2659 | '@types/triple-beam@1.3.5': {} 2660 | 2661 | '@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@9.19.0)(typescript@5.7.3))(eslint@9.19.0)(typescript@5.7.3)': 2662 | dependencies: 2663 | '@eslint-community/regexpp': 4.12.1 2664 | '@typescript-eslint/parser': 5.62.0(eslint@9.19.0)(typescript@5.7.3) 2665 | '@typescript-eslint/scope-manager': 5.62.0 2666 | '@typescript-eslint/type-utils': 5.62.0(eslint@9.19.0)(typescript@5.7.3) 2667 | '@typescript-eslint/utils': 5.62.0(eslint@9.19.0)(typescript@5.7.3) 2668 | debug: 4.4.0(supports-color@5.5.0) 2669 | eslint: 9.19.0 2670 | graphemer: 1.4.0 2671 | ignore: 5.3.2 2672 | natural-compare-lite: 1.4.0 2673 | semver: 7.7.0 2674 | tsutils: 3.21.0(typescript@5.7.3) 2675 | optionalDependencies: 2676 | typescript: 5.7.3 2677 | transitivePeerDependencies: 2678 | - supports-color 2679 | 2680 | '@typescript-eslint/eslint-plugin@8.22.0(@typescript-eslint/parser@8.22.0(eslint@9.19.0)(typescript@5.7.3))(eslint@9.19.0)(typescript@5.7.3)': 2681 | dependencies: 2682 | '@eslint-community/regexpp': 4.12.1 2683 | '@typescript-eslint/parser': 8.22.0(eslint@9.19.0)(typescript@5.7.3) 2684 | '@typescript-eslint/scope-manager': 8.22.0 2685 | '@typescript-eslint/type-utils': 8.22.0(eslint@9.19.0)(typescript@5.7.3) 2686 | '@typescript-eslint/utils': 8.22.0(eslint@9.19.0)(typescript@5.7.3) 2687 | '@typescript-eslint/visitor-keys': 8.22.0 2688 | eslint: 9.19.0 2689 | graphemer: 1.4.0 2690 | ignore: 5.3.2 2691 | natural-compare: 1.4.0 2692 | ts-api-utils: 2.0.0(typescript@5.7.3) 2693 | typescript: 5.7.3 2694 | transitivePeerDependencies: 2695 | - supports-color 2696 | 2697 | '@typescript-eslint/parser@5.62.0(eslint@9.19.0)(typescript@5.7.3)': 2698 | dependencies: 2699 | '@typescript-eslint/scope-manager': 5.62.0 2700 | '@typescript-eslint/types': 5.62.0 2701 | '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.7.3) 2702 | debug: 4.4.0(supports-color@5.5.0) 2703 | eslint: 9.19.0 2704 | optionalDependencies: 2705 | typescript: 5.7.3 2706 | transitivePeerDependencies: 2707 | - supports-color 2708 | 2709 | '@typescript-eslint/parser@8.22.0(eslint@9.19.0)(typescript@5.7.3)': 2710 | dependencies: 2711 | '@typescript-eslint/scope-manager': 8.22.0 2712 | '@typescript-eslint/types': 8.22.0 2713 | '@typescript-eslint/typescript-estree': 8.22.0(typescript@5.7.3) 2714 | '@typescript-eslint/visitor-keys': 8.22.0 2715 | debug: 4.4.0(supports-color@5.5.0) 2716 | eslint: 9.19.0 2717 | typescript: 5.7.3 2718 | transitivePeerDependencies: 2719 | - supports-color 2720 | 2721 | '@typescript-eslint/scope-manager@5.62.0': 2722 | dependencies: 2723 | '@typescript-eslint/types': 5.62.0 2724 | '@typescript-eslint/visitor-keys': 5.62.0 2725 | 2726 | '@typescript-eslint/scope-manager@8.22.0': 2727 | dependencies: 2728 | '@typescript-eslint/types': 8.22.0 2729 | '@typescript-eslint/visitor-keys': 8.22.0 2730 | 2731 | '@typescript-eslint/type-utils@5.62.0(eslint@9.19.0)(typescript@5.7.3)': 2732 | dependencies: 2733 | '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.7.3) 2734 | '@typescript-eslint/utils': 5.62.0(eslint@9.19.0)(typescript@5.7.3) 2735 | debug: 4.4.0(supports-color@5.5.0) 2736 | eslint: 9.19.0 2737 | tsutils: 3.21.0(typescript@5.7.3) 2738 | optionalDependencies: 2739 | typescript: 5.7.3 2740 | transitivePeerDependencies: 2741 | - supports-color 2742 | 2743 | '@typescript-eslint/type-utils@8.22.0(eslint@9.19.0)(typescript@5.7.3)': 2744 | dependencies: 2745 | '@typescript-eslint/typescript-estree': 8.22.0(typescript@5.7.3) 2746 | '@typescript-eslint/utils': 8.22.0(eslint@9.19.0)(typescript@5.7.3) 2747 | debug: 4.4.0(supports-color@5.5.0) 2748 | eslint: 9.19.0 2749 | ts-api-utils: 2.0.0(typescript@5.7.3) 2750 | typescript: 5.7.3 2751 | transitivePeerDependencies: 2752 | - supports-color 2753 | 2754 | '@typescript-eslint/types@5.62.0': {} 2755 | 2756 | '@typescript-eslint/types@8.22.0': {} 2757 | 2758 | '@typescript-eslint/typescript-estree@5.62.0(typescript@5.7.3)': 2759 | dependencies: 2760 | '@typescript-eslint/types': 5.62.0 2761 | '@typescript-eslint/visitor-keys': 5.62.0 2762 | debug: 4.4.0(supports-color@5.5.0) 2763 | globby: 11.1.0 2764 | is-glob: 4.0.3 2765 | semver: 7.7.0 2766 | tsutils: 3.21.0(typescript@5.7.3) 2767 | optionalDependencies: 2768 | typescript: 5.7.3 2769 | transitivePeerDependencies: 2770 | - supports-color 2771 | 2772 | '@typescript-eslint/typescript-estree@8.22.0(typescript@5.7.3)': 2773 | dependencies: 2774 | '@typescript-eslint/types': 8.22.0 2775 | '@typescript-eslint/visitor-keys': 8.22.0 2776 | debug: 4.4.0(supports-color@5.5.0) 2777 | fast-glob: 3.3.3 2778 | is-glob: 4.0.3 2779 | minimatch: 9.0.5 2780 | semver: 7.7.0 2781 | ts-api-utils: 2.0.0(typescript@5.7.3) 2782 | typescript: 5.7.3 2783 | transitivePeerDependencies: 2784 | - supports-color 2785 | 2786 | '@typescript-eslint/utils@5.62.0(eslint@9.19.0)(typescript@5.7.3)': 2787 | dependencies: 2788 | '@eslint-community/eslint-utils': 4.4.1(eslint@9.19.0) 2789 | '@types/json-schema': 7.0.15 2790 | '@types/semver': 7.5.8 2791 | '@typescript-eslint/scope-manager': 5.62.0 2792 | '@typescript-eslint/types': 5.62.0 2793 | '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.7.3) 2794 | eslint: 9.19.0 2795 | eslint-scope: 5.1.1 2796 | semver: 7.7.0 2797 | transitivePeerDependencies: 2798 | - supports-color 2799 | - typescript 2800 | 2801 | '@typescript-eslint/utils@8.22.0(eslint@9.19.0)(typescript@5.7.3)': 2802 | dependencies: 2803 | '@eslint-community/eslint-utils': 4.4.1(eslint@9.19.0) 2804 | '@typescript-eslint/scope-manager': 8.22.0 2805 | '@typescript-eslint/types': 8.22.0 2806 | '@typescript-eslint/typescript-estree': 8.22.0(typescript@5.7.3) 2807 | eslint: 9.19.0 2808 | typescript: 5.7.3 2809 | transitivePeerDependencies: 2810 | - supports-color 2811 | 2812 | '@typescript-eslint/visitor-keys@5.62.0': 2813 | dependencies: 2814 | '@typescript-eslint/types': 5.62.0 2815 | eslint-visitor-keys: 3.4.3 2816 | 2817 | '@typescript-eslint/visitor-keys@8.22.0': 2818 | dependencies: 2819 | '@typescript-eslint/types': 8.22.0 2820 | eslint-visitor-keys: 4.2.0 2821 | 2822 | abort-controller@3.0.0: 2823 | dependencies: 2824 | event-target-shim: 5.0.1 2825 | 2826 | acorn-jsx@5.3.2(acorn@8.14.0): 2827 | dependencies: 2828 | acorn: 8.14.0 2829 | 2830 | acorn-walk@8.3.4: 2831 | dependencies: 2832 | acorn: 8.14.0 2833 | 2834 | acorn@8.14.0: {} 2835 | 2836 | agentkeepalive@4.6.0: 2837 | dependencies: 2838 | humanize-ms: 1.2.1 2839 | 2840 | ajv-formats@2.1.1(ajv@8.17.1): 2841 | optionalDependencies: 2842 | ajv: 8.17.1 2843 | 2844 | ajv@6.12.6: 2845 | dependencies: 2846 | fast-deep-equal: 3.1.3 2847 | fast-json-stable-stringify: 2.1.0 2848 | json-schema-traverse: 0.4.1 2849 | uri-js: 4.4.1 2850 | 2851 | ajv@8.17.1: 2852 | dependencies: 2853 | fast-deep-equal: 3.1.3 2854 | fast-uri: 3.0.6 2855 | json-schema-traverse: 1.0.0 2856 | require-from-string: 2.0.2 2857 | 2858 | ansi-regex@5.0.1: {} 2859 | 2860 | ansi-regex@6.1.0: {} 2861 | 2862 | ansi-styles@4.3.0: 2863 | dependencies: 2864 | color-convert: 2.0.1 2865 | 2866 | ansi-styles@6.2.1: {} 2867 | 2868 | any-base@1.1.0: {} 2869 | 2870 | any-promise@1.3.0: {} 2871 | 2872 | anymatch@3.1.3: 2873 | dependencies: 2874 | normalize-path: 3.0.0 2875 | picomatch: 2.3.1 2876 | 2877 | arg@4.1.3: {} 2878 | 2879 | argparse@2.0.1: {} 2880 | 2881 | array-union@2.1.0: {} 2882 | 2883 | async-mutex@0.3.2: 2884 | dependencies: 2885 | tslib: 2.8.1 2886 | 2887 | async@3.2.6: {} 2888 | 2889 | asynckit@0.4.0: {} 2890 | 2891 | await-to-js@3.0.0: {} 2892 | 2893 | axios@1.7.9: 2894 | dependencies: 2895 | follow-redirects: 1.15.9 2896 | form-data: 4.0.1 2897 | proxy-from-env: 1.1.0 2898 | transitivePeerDependencies: 2899 | - debug 2900 | 2901 | balanced-match@1.0.2: {} 2902 | 2903 | base64-js@1.5.1: {} 2904 | 2905 | big-integer@1.6.52: {} 2906 | 2907 | binary-extensions@2.3.0: {} 2908 | 2909 | bmp-ts@1.0.9: {} 2910 | 2911 | brace-expansion@1.1.11: 2912 | dependencies: 2913 | balanced-match: 1.0.2 2914 | concat-map: 0.0.1 2915 | 2916 | brace-expansion@2.0.1: 2917 | dependencies: 2918 | balanced-match: 1.0.2 2919 | 2920 | braces@3.0.3: 2921 | dependencies: 2922 | fill-range: 7.1.1 2923 | 2924 | buffer-from@1.1.2: {} 2925 | 2926 | buffer@6.0.3: 2927 | dependencies: 2928 | base64-js: 1.5.1 2929 | ieee754: 1.2.1 2930 | 2931 | bufferutil@4.0.9: 2932 | dependencies: 2933 | node-gyp-build: 4.8.4 2934 | 2935 | bundle-require@5.1.0(esbuild@0.24.2): 2936 | dependencies: 2937 | esbuild: 0.24.2 2938 | load-tsconfig: 0.2.5 2939 | 2940 | cac@6.7.14: {} 2941 | 2942 | callsites@3.1.0: {} 2943 | 2944 | chalk@4.1.2: 2945 | dependencies: 2946 | ansi-styles: 4.3.0 2947 | supports-color: 7.2.0 2948 | 2949 | chokidar@3.6.0: 2950 | dependencies: 2951 | anymatch: 3.1.3 2952 | braces: 3.0.3 2953 | glob-parent: 5.1.2 2954 | is-binary-path: 2.1.0 2955 | is-glob: 4.0.3 2956 | normalize-path: 3.0.0 2957 | readdirp: 3.6.0 2958 | optionalDependencies: 2959 | fsevents: 2.3.3 2960 | 2961 | chokidar@4.0.3: 2962 | dependencies: 2963 | readdirp: 4.1.1 2964 | 2965 | color-convert@1.9.3: 2966 | dependencies: 2967 | color-name: 1.1.3 2968 | 2969 | color-convert@2.0.1: 2970 | dependencies: 2971 | color-name: 1.1.4 2972 | 2973 | color-loggers@0.3.2: {} 2974 | 2975 | color-name@1.1.3: {} 2976 | 2977 | color-name@1.1.4: {} 2978 | 2979 | color-string@1.9.1: 2980 | dependencies: 2981 | color-name: 1.1.4 2982 | simple-swizzle: 0.2.2 2983 | 2984 | color@3.2.1: 2985 | dependencies: 2986 | color-convert: 1.9.3 2987 | color-string: 1.9.1 2988 | 2989 | colorette@2.0.19: {} 2990 | 2991 | colorspace@1.1.4: 2992 | dependencies: 2993 | color: 3.2.1 2994 | text-hex: 1.0.0 2995 | 2996 | combined-stream@1.0.8: 2997 | dependencies: 2998 | delayed-stream: 1.0.0 2999 | 3000 | commander@10.0.1: {} 3001 | 3002 | commander@4.1.1: {} 3003 | 3004 | concat-map@0.0.1: {} 3005 | 3006 | consola@3.4.0: {} 3007 | 3008 | create-require@1.1.1: {} 3009 | 3010 | cross-spawn@7.0.6: 3011 | dependencies: 3012 | path-key: 3.1.1 3013 | shebang-command: 2.0.0 3014 | which: 2.0.2 3015 | 3016 | d@1.0.2: 3017 | dependencies: 3018 | es5-ext: 0.10.64 3019 | type: 2.7.3 3020 | 3021 | db-errors@0.2.3: {} 3022 | 3023 | debug@2.6.9: 3024 | dependencies: 3025 | ms: 2.0.0 3026 | 3027 | debug@4.3.4: 3028 | dependencies: 3029 | ms: 2.1.2 3030 | 3031 | debug@4.4.0(supports-color@5.5.0): 3032 | dependencies: 3033 | ms: 2.1.3 3034 | optionalDependencies: 3035 | supports-color: 5.5.0 3036 | 3037 | deep-is@0.1.4: {} 3038 | 3039 | delayed-stream@1.0.0: {} 3040 | 3041 | diff@4.0.2: {} 3042 | 3043 | dir-glob@3.0.1: 3044 | dependencies: 3045 | path-type: 4.0.0 3046 | 3047 | dom-serializer@1.4.1: 3048 | dependencies: 3049 | domelementtype: 2.3.0 3050 | domhandler: 4.3.1 3051 | entities: 2.2.0 3052 | 3053 | domelementtype@2.3.0: {} 3054 | 3055 | domhandler@4.3.1: 3056 | dependencies: 3057 | domelementtype: 2.3.0 3058 | 3059 | domutils@2.8.0: 3060 | dependencies: 3061 | dom-serializer: 1.4.1 3062 | domelementtype: 2.3.0 3063 | domhandler: 4.3.1 3064 | 3065 | dotenv@16.4.7: {} 3066 | 3067 | eastasianwidth@0.2.0: {} 3068 | 3069 | emoji-regex@8.0.0: {} 3070 | 3071 | emoji-regex@9.2.2: {} 3072 | 3073 | enabled@2.0.0: {} 3074 | 3075 | entities@2.2.0: {} 3076 | 3077 | envalid@8.0.0: 3078 | dependencies: 3079 | tslib: 2.6.2 3080 | 3081 | es5-ext@0.10.64: 3082 | dependencies: 3083 | es6-iterator: 2.0.3 3084 | es6-symbol: 3.1.4 3085 | esniff: 2.0.1 3086 | next-tick: 1.1.0 3087 | 3088 | es6-iterator@2.0.3: 3089 | dependencies: 3090 | d: 1.0.2 3091 | es5-ext: 0.10.64 3092 | es6-symbol: 3.1.4 3093 | 3094 | es6-symbol@3.1.4: 3095 | dependencies: 3096 | d: 1.0.2 3097 | ext: 1.7.0 3098 | 3099 | esbuild@0.24.2: 3100 | optionalDependencies: 3101 | '@esbuild/aix-ppc64': 0.24.2 3102 | '@esbuild/android-arm': 0.24.2 3103 | '@esbuild/android-arm64': 0.24.2 3104 | '@esbuild/android-x64': 0.24.2 3105 | '@esbuild/darwin-arm64': 0.24.2 3106 | '@esbuild/darwin-x64': 0.24.2 3107 | '@esbuild/freebsd-arm64': 0.24.2 3108 | '@esbuild/freebsd-x64': 0.24.2 3109 | '@esbuild/linux-arm': 0.24.2 3110 | '@esbuild/linux-arm64': 0.24.2 3111 | '@esbuild/linux-ia32': 0.24.2 3112 | '@esbuild/linux-loong64': 0.24.2 3113 | '@esbuild/linux-mips64el': 0.24.2 3114 | '@esbuild/linux-ppc64': 0.24.2 3115 | '@esbuild/linux-riscv64': 0.24.2 3116 | '@esbuild/linux-s390x': 0.24.2 3117 | '@esbuild/linux-x64': 0.24.2 3118 | '@esbuild/netbsd-arm64': 0.24.2 3119 | '@esbuild/netbsd-x64': 0.24.2 3120 | '@esbuild/openbsd-arm64': 0.24.2 3121 | '@esbuild/openbsd-x64': 0.24.2 3122 | '@esbuild/sunos-x64': 0.24.2 3123 | '@esbuild/win32-arm64': 0.24.2 3124 | '@esbuild/win32-ia32': 0.24.2 3125 | '@esbuild/win32-x64': 0.24.2 3126 | 3127 | escalade@3.2.0: {} 3128 | 3129 | escape-string-regexp@4.0.0: {} 3130 | 3131 | eslint-config-prettier@10.0.1(eslint@9.19.0): 3132 | dependencies: 3133 | eslint: 9.19.0 3134 | 3135 | eslint-plugin-adonis@2.1.1(eslint@9.19.0)(typescript@5.7.3): 3136 | dependencies: 3137 | '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0(eslint@9.19.0)(typescript@5.7.3))(eslint@9.19.0)(typescript@5.7.3) 3138 | '@typescript-eslint/parser': 5.62.0(eslint@9.19.0)(typescript@5.7.3) 3139 | eslint: 9.19.0 3140 | transitivePeerDependencies: 3141 | - supports-color 3142 | - typescript 3143 | 3144 | eslint-plugin-prettier@5.2.3(eslint-config-prettier@10.0.1(eslint@9.19.0))(eslint@9.19.0)(prettier@3.4.2): 3145 | dependencies: 3146 | eslint: 9.19.0 3147 | prettier: 3.4.2 3148 | prettier-linter-helpers: 1.0.0 3149 | synckit: 0.9.2 3150 | optionalDependencies: 3151 | eslint-config-prettier: 10.0.1(eslint@9.19.0) 3152 | 3153 | eslint-scope@5.1.1: 3154 | dependencies: 3155 | esrecurse: 4.3.0 3156 | estraverse: 4.3.0 3157 | 3158 | eslint-scope@8.2.0: 3159 | dependencies: 3160 | esrecurse: 4.3.0 3161 | estraverse: 5.3.0 3162 | 3163 | eslint-visitor-keys@3.4.3: {} 3164 | 3165 | eslint-visitor-keys@4.2.0: {} 3166 | 3167 | eslint@9.19.0: 3168 | dependencies: 3169 | '@eslint-community/eslint-utils': 4.4.1(eslint@9.19.0) 3170 | '@eslint-community/regexpp': 4.12.1 3171 | '@eslint/config-array': 0.19.2 3172 | '@eslint/core': 0.10.0 3173 | '@eslint/eslintrc': 3.2.0 3174 | '@eslint/js': 9.19.0 3175 | '@eslint/plugin-kit': 0.2.5 3176 | '@humanfs/node': 0.16.6 3177 | '@humanwhocodes/module-importer': 1.0.1 3178 | '@humanwhocodes/retry': 0.4.1 3179 | '@types/estree': 1.0.6 3180 | '@types/json-schema': 7.0.15 3181 | ajv: 6.12.6 3182 | chalk: 4.1.2 3183 | cross-spawn: 7.0.6 3184 | debug: 4.4.0(supports-color@5.5.0) 3185 | escape-string-regexp: 4.0.0 3186 | eslint-scope: 8.2.0 3187 | eslint-visitor-keys: 4.2.0 3188 | espree: 10.3.0 3189 | esquery: 1.6.0 3190 | esutils: 2.0.3 3191 | fast-deep-equal: 3.1.3 3192 | file-entry-cache: 8.0.0 3193 | find-up: 5.0.0 3194 | glob-parent: 6.0.2 3195 | ignore: 5.3.2 3196 | imurmurhash: 0.1.4 3197 | is-glob: 4.0.3 3198 | json-stable-stringify-without-jsonify: 1.0.1 3199 | lodash.merge: 4.6.2 3200 | minimatch: 3.1.2 3201 | natural-compare: 1.4.0 3202 | optionator: 0.9.4 3203 | transitivePeerDependencies: 3204 | - supports-color 3205 | 3206 | esm@3.2.25: {} 3207 | 3208 | esniff@2.0.1: 3209 | dependencies: 3210 | d: 1.0.2 3211 | es5-ext: 0.10.64 3212 | event-emitter: 0.3.5 3213 | type: 2.7.3 3214 | 3215 | espree@10.3.0: 3216 | dependencies: 3217 | acorn: 8.14.0 3218 | acorn-jsx: 5.3.2(acorn@8.14.0) 3219 | eslint-visitor-keys: 4.2.0 3220 | 3221 | esquery@1.6.0: 3222 | dependencies: 3223 | estraverse: 5.3.0 3224 | 3225 | esrecurse@4.3.0: 3226 | dependencies: 3227 | estraverse: 5.3.0 3228 | 3229 | estraverse@4.3.0: {} 3230 | 3231 | estraverse@5.3.0: {} 3232 | 3233 | esutils@2.0.3: {} 3234 | 3235 | event-emitter@0.3.5: 3236 | dependencies: 3237 | d: 1.0.2 3238 | es5-ext: 0.10.64 3239 | 3240 | event-target-shim@5.0.1: {} 3241 | 3242 | exif-parser@0.1.12: {} 3243 | 3244 | ext@1.7.0: 3245 | dependencies: 3246 | type: 2.7.3 3247 | 3248 | fast-deep-equal@3.1.3: {} 3249 | 3250 | fast-diff@1.3.0: {} 3251 | 3252 | fast-glob@3.3.3: 3253 | dependencies: 3254 | '@nodelib/fs.stat': 2.0.5 3255 | '@nodelib/fs.walk': 1.2.8 3256 | glob-parent: 5.1.2 3257 | merge2: 1.4.1 3258 | micromatch: 4.0.8 3259 | 3260 | fast-json-stable-stringify@2.1.0: {} 3261 | 3262 | fast-levenshtein@2.0.6: {} 3263 | 3264 | fast-uri@3.0.6: {} 3265 | 3266 | fastq@1.19.0: 3267 | dependencies: 3268 | reusify: 1.0.4 3269 | 3270 | fdir@6.4.3(picomatch@4.0.2): 3271 | optionalDependencies: 3272 | picomatch: 4.0.2 3273 | 3274 | fecha@4.2.3: {} 3275 | 3276 | file-entry-cache@8.0.0: 3277 | dependencies: 3278 | flat-cache: 4.0.1 3279 | 3280 | file-type@16.5.4: 3281 | dependencies: 3282 | readable-web-to-node-stream: 3.0.2 3283 | strtok3: 6.3.0 3284 | token-types: 4.2.1 3285 | 3286 | fill-range@7.1.1: 3287 | dependencies: 3288 | to-regex-range: 5.0.1 3289 | 3290 | find-up@5.0.0: 3291 | dependencies: 3292 | locate-path: 6.0.0 3293 | path-exists: 4.0.0 3294 | 3295 | flat-cache@4.0.1: 3296 | dependencies: 3297 | flatted: 3.3.2 3298 | keyv: 4.5.4 3299 | 3300 | flatted@3.3.2: {} 3301 | 3302 | fn.name@1.1.0: {} 3303 | 3304 | follow-redirects@1.15.9: {} 3305 | 3306 | foreground-child@3.3.0: 3307 | dependencies: 3308 | cross-spawn: 7.0.6 3309 | signal-exit: 4.1.0 3310 | 3311 | form-data-encoder@1.7.2: {} 3312 | 3313 | form-data@4.0.1: 3314 | dependencies: 3315 | asynckit: 0.4.0 3316 | combined-stream: 1.0.8 3317 | mime-types: 2.1.35 3318 | 3319 | formdata-node@4.4.1: 3320 | dependencies: 3321 | node-domexception: 1.0.0 3322 | web-streams-polyfill: 4.0.0-beta.3 3323 | 3324 | fsevents@2.3.3: 3325 | optional: true 3326 | 3327 | function-bind@1.1.2: {} 3328 | 3329 | get-package-type@0.1.0: {} 3330 | 3331 | getopts@2.3.0: {} 3332 | 3333 | gifwrap@0.10.1: 3334 | dependencies: 3335 | image-q: 4.0.0 3336 | omggif: 1.0.10 3337 | 3338 | glob-parent@5.1.2: 3339 | dependencies: 3340 | is-glob: 4.0.3 3341 | 3342 | glob-parent@6.0.2: 3343 | dependencies: 3344 | is-glob: 4.0.3 3345 | 3346 | glob@10.4.5: 3347 | dependencies: 3348 | foreground-child: 3.3.0 3349 | jackspeak: 3.4.3 3350 | minimatch: 9.0.5 3351 | minipass: 7.1.2 3352 | package-json-from-dist: 1.0.1 3353 | path-scurry: 1.11.1 3354 | 3355 | globals@14.0.0: {} 3356 | 3357 | globby@11.1.0: 3358 | dependencies: 3359 | array-union: 2.1.0 3360 | dir-glob: 3.0.1 3361 | fast-glob: 3.3.3 3362 | ignore: 5.3.2 3363 | merge2: 1.4.1 3364 | slash: 3.0.0 3365 | 3366 | graceful-fs@4.2.11: {} 3367 | 3368 | grammy@1.34.1: 3369 | dependencies: 3370 | '@grammyjs/types': 3.18.0 3371 | abort-controller: 3.0.0 3372 | debug: 4.4.0(supports-color@5.5.0) 3373 | node-fetch: 2.7.0 3374 | transitivePeerDependencies: 3375 | - encoding 3376 | - supports-color 3377 | 3378 | graphemer@1.4.0: {} 3379 | 3380 | has-flag@3.0.0: {} 3381 | 3382 | has-flag@4.0.0: {} 3383 | 3384 | hasown@2.0.2: 3385 | dependencies: 3386 | function-bind: 1.1.2 3387 | 3388 | htmlparser2@6.1.0: 3389 | dependencies: 3390 | domelementtype: 2.3.0 3391 | domhandler: 4.3.1 3392 | domutils: 2.8.0 3393 | entities: 2.2.0 3394 | 3395 | humanize-ms@1.2.1: 3396 | dependencies: 3397 | ms: 2.1.3 3398 | 3399 | ieee754@1.2.1: {} 3400 | 3401 | ignore-by-default@1.0.1: {} 3402 | 3403 | ignore@5.3.2: {} 3404 | 3405 | image-q@4.0.0: 3406 | dependencies: 3407 | '@types/node': 16.9.1 3408 | 3409 | import-fresh@3.3.0: 3410 | dependencies: 3411 | parent-module: 1.0.1 3412 | resolve-from: 4.0.0 3413 | 3414 | imurmurhash@0.1.4: {} 3415 | 3416 | inherits@2.0.4: {} 3417 | 3418 | interpret@2.2.0: {} 3419 | 3420 | ip-address@9.0.5: 3421 | dependencies: 3422 | jsbn: 1.1.0 3423 | sprintf-js: 1.1.3 3424 | 3425 | is-arrayish@0.3.2: {} 3426 | 3427 | is-binary-path@2.1.0: 3428 | dependencies: 3429 | binary-extensions: 2.3.0 3430 | 3431 | is-core-module@2.16.1: 3432 | dependencies: 3433 | hasown: 2.0.2 3434 | 3435 | is-extglob@2.1.1: {} 3436 | 3437 | is-fullwidth-code-point@3.0.0: {} 3438 | 3439 | is-glob@4.0.3: 3440 | dependencies: 3441 | is-extglob: 2.1.1 3442 | 3443 | is-number@7.0.0: {} 3444 | 3445 | is-stream@2.0.1: {} 3446 | 3447 | is-typedarray@1.0.0: {} 3448 | 3449 | isexe@2.0.0: {} 3450 | 3451 | jackspeak@3.4.3: 3452 | dependencies: 3453 | '@isaacs/cliui': 8.0.2 3454 | optionalDependencies: 3455 | '@pkgjs/parseargs': 0.11.0 3456 | 3457 | jimp@1.6.0: 3458 | dependencies: 3459 | '@jimp/core': 1.6.0 3460 | '@jimp/diff': 1.6.0 3461 | '@jimp/js-bmp': 1.6.0 3462 | '@jimp/js-gif': 1.6.0 3463 | '@jimp/js-jpeg': 1.6.0 3464 | '@jimp/js-png': 1.6.0 3465 | '@jimp/js-tiff': 1.6.0 3466 | '@jimp/plugin-blit': 1.6.0 3467 | '@jimp/plugin-blur': 1.6.0 3468 | '@jimp/plugin-circle': 1.6.0 3469 | '@jimp/plugin-color': 1.6.0 3470 | '@jimp/plugin-contain': 1.6.0 3471 | '@jimp/plugin-cover': 1.6.0 3472 | '@jimp/plugin-crop': 1.6.0 3473 | '@jimp/plugin-displace': 1.6.0 3474 | '@jimp/plugin-dither': 1.6.0 3475 | '@jimp/plugin-fisheye': 1.6.0 3476 | '@jimp/plugin-flip': 1.6.0 3477 | '@jimp/plugin-hash': 1.6.0 3478 | '@jimp/plugin-mask': 1.6.0 3479 | '@jimp/plugin-print': 1.6.0 3480 | '@jimp/plugin-quantize': 1.6.0 3481 | '@jimp/plugin-resize': 1.6.0 3482 | '@jimp/plugin-rotate': 1.6.0 3483 | '@jimp/plugin-threshold': 1.6.0 3484 | '@jimp/types': 1.6.0 3485 | '@jimp/utils': 1.6.0 3486 | 3487 | joycon@3.1.1: {} 3488 | 3489 | jpeg-js@0.4.4: {} 3490 | 3491 | js-yaml@4.1.0: 3492 | dependencies: 3493 | argparse: 2.0.1 3494 | 3495 | jsbn@1.1.0: {} 3496 | 3497 | json-buffer@3.0.1: {} 3498 | 3499 | json-schema-traverse@0.4.1: {} 3500 | 3501 | json-schema-traverse@1.0.0: {} 3502 | 3503 | json-stable-stringify-without-jsonify@1.0.1: {} 3504 | 3505 | json5@2.2.3: {} 3506 | 3507 | keyv@4.5.4: 3508 | dependencies: 3509 | json-buffer: 3.0.1 3510 | 3511 | knex@3.1.0: 3512 | dependencies: 3513 | colorette: 2.0.19 3514 | commander: 10.0.1 3515 | debug: 4.3.4 3516 | escalade: 3.2.0 3517 | esm: 3.2.25 3518 | get-package-type: 0.1.0 3519 | getopts: 2.3.0 3520 | interpret: 2.2.0 3521 | lodash: 4.17.21 3522 | pg-connection-string: 2.6.2 3523 | rechoir: 0.8.0 3524 | resolve-from: 5.0.0 3525 | tarn: 3.0.2 3526 | tildify: 2.0.0 3527 | transitivePeerDependencies: 3528 | - supports-color 3529 | 3530 | kuler@2.0.0: {} 3531 | 3532 | levn@0.4.1: 3533 | dependencies: 3534 | prelude-ls: 1.2.1 3535 | type-check: 0.4.0 3536 | 3537 | lilconfig@3.1.3: {} 3538 | 3539 | lines-and-columns@1.2.4: {} 3540 | 3541 | load-tsconfig@0.2.5: {} 3542 | 3543 | locate-path@6.0.0: 3544 | dependencies: 3545 | p-locate: 5.0.0 3546 | 3547 | lodash.merge@4.6.2: {} 3548 | 3549 | lodash.sortby@4.7.0: {} 3550 | 3551 | lodash@4.17.21: {} 3552 | 3553 | logform@2.7.0: 3554 | dependencies: 3555 | '@colors/colors': 1.6.0 3556 | '@types/triple-beam': 1.3.5 3557 | fecha: 4.2.3 3558 | ms: 2.1.3 3559 | safe-stable-stringify: 2.5.0 3560 | triple-beam: 1.4.1 3561 | 3562 | lru-cache@10.4.3: {} 3563 | 3564 | luxon@3.5.0: {} 3565 | 3566 | make-error@1.3.6: {} 3567 | 3568 | merge2@1.4.1: {} 3569 | 3570 | micromatch@4.0.8: 3571 | dependencies: 3572 | braces: 3.0.3 3573 | picomatch: 2.3.1 3574 | 3575 | mime-db@1.52.0: {} 3576 | 3577 | mime-types@2.1.35: 3578 | dependencies: 3579 | mime-db: 1.52.0 3580 | 3581 | mime@3.0.0: {} 3582 | 3583 | minimatch@3.1.2: 3584 | dependencies: 3585 | brace-expansion: 1.1.11 3586 | 3587 | minimatch@9.0.5: 3588 | dependencies: 3589 | brace-expansion: 2.0.1 3590 | 3591 | minimist@1.2.8: {} 3592 | 3593 | minipass@7.1.2: {} 3594 | 3595 | ms@2.0.0: {} 3596 | 3597 | ms@2.1.2: {} 3598 | 3599 | ms@2.1.3: {} 3600 | 3601 | mz@2.7.0: 3602 | dependencies: 3603 | any-promise: 1.3.0 3604 | object-assign: 4.1.1 3605 | thenify-all: 1.6.0 3606 | 3607 | natural-compare-lite@1.4.0: {} 3608 | 3609 | natural-compare@1.4.0: {} 3610 | 3611 | next-tick@1.1.0: {} 3612 | 3613 | node-domexception@1.0.0: {} 3614 | 3615 | node-fetch@2.7.0: 3616 | dependencies: 3617 | whatwg-url: 5.0.0 3618 | 3619 | node-gyp-build@4.8.4: {} 3620 | 3621 | node-localstorage@2.2.1: 3622 | dependencies: 3623 | write-file-atomic: 1.3.4 3624 | 3625 | nodemon@3.1.9: 3626 | dependencies: 3627 | chokidar: 3.6.0 3628 | debug: 4.4.0(supports-color@5.5.0) 3629 | ignore-by-default: 1.0.1 3630 | minimatch: 3.1.2 3631 | pstree.remy: 1.1.8 3632 | semver: 7.7.0 3633 | simple-update-notifier: 2.0.0 3634 | supports-color: 5.5.0 3635 | touch: 3.1.1 3636 | undefsafe: 2.0.5 3637 | 3638 | normalize-path@3.0.0: {} 3639 | 3640 | object-assign@4.1.1: {} 3641 | 3642 | objection@3.1.5(knex@3.1.0): 3643 | dependencies: 3644 | ajv: 8.17.1 3645 | ajv-formats: 2.1.1(ajv@8.17.1) 3646 | db-errors: 0.2.3 3647 | knex: 3.1.0 3648 | 3649 | omggif@1.0.10: {} 3650 | 3651 | one-time@1.0.0: 3652 | dependencies: 3653 | fn.name: 1.1.0 3654 | 3655 | openai@4.82.0(zod@3.24.1): 3656 | dependencies: 3657 | '@types/node': 18.19.74 3658 | '@types/node-fetch': 2.6.12 3659 | abort-controller: 3.0.0 3660 | agentkeepalive: 4.6.0 3661 | form-data-encoder: 1.7.2 3662 | formdata-node: 4.4.1 3663 | node-fetch: 2.7.0 3664 | optionalDependencies: 3665 | zod: 3.24.1 3666 | transitivePeerDependencies: 3667 | - encoding 3668 | 3669 | optionator@0.9.4: 3670 | dependencies: 3671 | deep-is: 0.1.4 3672 | fast-levenshtein: 2.0.6 3673 | levn: 0.4.1 3674 | prelude-ls: 1.2.1 3675 | type-check: 0.4.0 3676 | word-wrap: 1.2.5 3677 | 3678 | p-limit@3.1.0: 3679 | dependencies: 3680 | yocto-queue: 0.1.0 3681 | 3682 | p-locate@5.0.0: 3683 | dependencies: 3684 | p-limit: 3.1.0 3685 | 3686 | package-json-from-dist@1.0.1: {} 3687 | 3688 | pako@1.0.11: {} 3689 | 3690 | pako@2.1.0: {} 3691 | 3692 | parent-module@1.0.1: 3693 | dependencies: 3694 | callsites: 3.1.0 3695 | 3696 | parse-bmfont-ascii@1.0.6: {} 3697 | 3698 | parse-bmfont-binary@1.0.6: {} 3699 | 3700 | parse-bmfont-xml@1.1.6: 3701 | dependencies: 3702 | xml-parse-from-string: 1.0.1 3703 | xml2js: 0.5.0 3704 | 3705 | path-browserify@1.0.1: {} 3706 | 3707 | path-exists@4.0.0: {} 3708 | 3709 | path-key@3.1.1: {} 3710 | 3711 | path-parse@1.0.7: {} 3712 | 3713 | path-scurry@1.11.1: 3714 | dependencies: 3715 | lru-cache: 10.4.3 3716 | minipass: 7.1.2 3717 | 3718 | path-type@4.0.0: {} 3719 | 3720 | peek-readable@4.1.0: {} 3721 | 3722 | pg-connection-string@2.6.2: {} 3723 | 3724 | picocolors@1.1.1: {} 3725 | 3726 | picomatch@2.3.1: {} 3727 | 3728 | picomatch@4.0.2: {} 3729 | 3730 | pirates@4.0.6: {} 3731 | 3732 | pixelmatch@5.3.0: 3733 | dependencies: 3734 | pngjs: 6.0.0 3735 | 3736 | pngjs@6.0.0: {} 3737 | 3738 | pngjs@7.0.0: {} 3739 | 3740 | postcss-load-config@6.0.1(yaml@2.5.1): 3741 | dependencies: 3742 | lilconfig: 3.1.3 3743 | optionalDependencies: 3744 | yaml: 2.5.1 3745 | 3746 | prelude-ls@1.2.1: {} 3747 | 3748 | prettier-linter-helpers@1.0.0: 3749 | dependencies: 3750 | fast-diff: 1.3.0 3751 | 3752 | prettier@3.4.2: {} 3753 | 3754 | proxy-from-env@1.1.0: {} 3755 | 3756 | pstree.remy@1.1.8: {} 3757 | 3758 | punycode@2.3.1: {} 3759 | 3760 | queue-microtask@1.2.3: {} 3761 | 3762 | readable-stream@3.6.2: 3763 | dependencies: 3764 | inherits: 2.0.4 3765 | string_decoder: 1.3.0 3766 | util-deprecate: 1.0.2 3767 | 3768 | readable-web-to-node-stream@3.0.2: 3769 | dependencies: 3770 | readable-stream: 3.6.2 3771 | 3772 | readdirp@3.6.0: 3773 | dependencies: 3774 | picomatch: 2.3.1 3775 | 3776 | readdirp@4.1.1: {} 3777 | 3778 | real-cancellable-promise@1.2.1: {} 3779 | 3780 | rechoir@0.8.0: 3781 | dependencies: 3782 | resolve: 1.22.10 3783 | 3784 | require-from-string@2.0.2: {} 3785 | 3786 | resolve-from@4.0.0: {} 3787 | 3788 | resolve-from@5.0.0: {} 3789 | 3790 | resolve@1.22.10: 3791 | dependencies: 3792 | is-core-module: 2.16.1 3793 | path-parse: 1.0.7 3794 | supports-preserve-symlinks-flag: 1.0.0 3795 | 3796 | reusify@1.0.4: {} 3797 | 3798 | rollup@4.32.1: 3799 | dependencies: 3800 | '@types/estree': 1.0.6 3801 | optionalDependencies: 3802 | '@rollup/rollup-android-arm-eabi': 4.32.1 3803 | '@rollup/rollup-android-arm64': 4.32.1 3804 | '@rollup/rollup-darwin-arm64': 4.32.1 3805 | '@rollup/rollup-darwin-x64': 4.32.1 3806 | '@rollup/rollup-freebsd-arm64': 4.32.1 3807 | '@rollup/rollup-freebsd-x64': 4.32.1 3808 | '@rollup/rollup-linux-arm-gnueabihf': 4.32.1 3809 | '@rollup/rollup-linux-arm-musleabihf': 4.32.1 3810 | '@rollup/rollup-linux-arm64-gnu': 4.32.1 3811 | '@rollup/rollup-linux-arm64-musl': 4.32.1 3812 | '@rollup/rollup-linux-loongarch64-gnu': 4.32.1 3813 | '@rollup/rollup-linux-powerpc64le-gnu': 4.32.1 3814 | '@rollup/rollup-linux-riscv64-gnu': 4.32.1 3815 | '@rollup/rollup-linux-s390x-gnu': 4.32.1 3816 | '@rollup/rollup-linux-x64-gnu': 4.32.1 3817 | '@rollup/rollup-linux-x64-musl': 4.32.1 3818 | '@rollup/rollup-win32-arm64-msvc': 4.32.1 3819 | '@rollup/rollup-win32-ia32-msvc': 4.32.1 3820 | '@rollup/rollup-win32-x64-msvc': 4.32.1 3821 | fsevents: 2.3.3 3822 | 3823 | run-parallel@1.2.0: 3824 | dependencies: 3825 | queue-microtask: 1.2.3 3826 | 3827 | safe-buffer@5.2.1: {} 3828 | 3829 | safe-stable-stringify@2.5.0: {} 3830 | 3831 | sax@1.4.1: {} 3832 | 3833 | semver@7.7.0: {} 3834 | 3835 | shebang-command@2.0.0: 3836 | dependencies: 3837 | shebang-regex: 3.0.0 3838 | 3839 | shebang-regex@3.0.0: {} 3840 | 3841 | signal-exit@4.1.0: {} 3842 | 3843 | simple-swizzle@0.2.2: 3844 | dependencies: 3845 | is-arrayish: 0.3.2 3846 | 3847 | simple-update-notifier@2.0.0: 3848 | dependencies: 3849 | semver: 7.7.0 3850 | 3851 | simple-xml-to-json@1.2.3: {} 3852 | 3853 | slash@3.0.0: {} 3854 | 3855 | slide@1.1.6: {} 3856 | 3857 | smart-buffer@4.2.0: {} 3858 | 3859 | socks@2.8.3: 3860 | dependencies: 3861 | ip-address: 9.0.5 3862 | smart-buffer: 4.2.0 3863 | 3864 | source-map-support@0.5.21: 3865 | dependencies: 3866 | buffer-from: 1.1.2 3867 | source-map: 0.6.1 3868 | 3869 | source-map@0.6.1: {} 3870 | 3871 | source-map@0.8.0-beta.0: 3872 | dependencies: 3873 | whatwg-url: 7.1.0 3874 | 3875 | sprintf-js@1.1.3: {} 3876 | 3877 | stack-trace@0.0.10: {} 3878 | 3879 | store2@2.14.4: {} 3880 | 3881 | string-width@4.2.3: 3882 | dependencies: 3883 | emoji-regex: 8.0.0 3884 | is-fullwidth-code-point: 3.0.0 3885 | strip-ansi: 6.0.1 3886 | 3887 | string-width@5.1.2: 3888 | dependencies: 3889 | eastasianwidth: 0.2.0 3890 | emoji-regex: 9.2.2 3891 | strip-ansi: 7.1.0 3892 | 3893 | string_decoder@1.3.0: 3894 | dependencies: 3895 | safe-buffer: 5.2.1 3896 | 3897 | strip-ansi@6.0.1: 3898 | dependencies: 3899 | ansi-regex: 5.0.1 3900 | 3901 | strip-ansi@7.1.0: 3902 | dependencies: 3903 | ansi-regex: 6.1.0 3904 | 3905 | strip-bom@3.0.0: {} 3906 | 3907 | strip-json-comments@3.1.1: {} 3908 | 3909 | strtok3@6.3.0: 3910 | dependencies: 3911 | '@tokenizer/token': 0.3.0 3912 | peek-readable: 4.1.0 3913 | 3914 | sucrase@3.35.0: 3915 | dependencies: 3916 | '@jridgewell/gen-mapping': 0.3.8 3917 | commander: 4.1.1 3918 | glob: 10.4.5 3919 | lines-and-columns: 1.2.4 3920 | mz: 2.7.0 3921 | pirates: 4.0.6 3922 | ts-interface-checker: 0.1.13 3923 | 3924 | supports-color@5.5.0: 3925 | dependencies: 3926 | has-flag: 3.0.0 3927 | 3928 | supports-color@7.2.0: 3929 | dependencies: 3930 | has-flag: 4.0.0 3931 | 3932 | supports-preserve-symlinks-flag@1.0.0: {} 3933 | 3934 | synckit@0.9.2: 3935 | dependencies: 3936 | '@pkgr/core': 0.1.1 3937 | tslib: 2.8.1 3938 | 3939 | tarn@3.0.2: {} 3940 | 3941 | telegram@2.26.16: 3942 | dependencies: 3943 | '@cryptography/aes': 0.1.1 3944 | async-mutex: 0.3.2 3945 | big-integer: 1.6.52 3946 | buffer: 6.0.3 3947 | htmlparser2: 6.1.0 3948 | mime: 3.0.0 3949 | node-localstorage: 2.2.1 3950 | pako: 2.1.0 3951 | path-browserify: 1.0.1 3952 | real-cancellable-promise: 1.2.1 3953 | socks: 2.8.3 3954 | store2: 2.14.4 3955 | ts-custom-error: 3.3.1 3956 | websocket: 1.0.35 3957 | optionalDependencies: 3958 | bufferutil: 4.0.9 3959 | utf-8-validate: 5.0.10 3960 | transitivePeerDependencies: 3961 | - supports-color 3962 | 3963 | text-hex@1.0.0: {} 3964 | 3965 | thenify-all@1.6.0: 3966 | dependencies: 3967 | thenify: 3.3.1 3968 | 3969 | thenify@3.3.1: 3970 | dependencies: 3971 | any-promise: 1.3.0 3972 | 3973 | tildify@2.0.0: {} 3974 | 3975 | tinycolor2@1.6.0: {} 3976 | 3977 | tinyexec@0.3.2: {} 3978 | 3979 | tinyglobby@0.2.10: 3980 | dependencies: 3981 | fdir: 6.4.3(picomatch@4.0.2) 3982 | picomatch: 4.0.2 3983 | 3984 | to-regex-range@5.0.1: 3985 | dependencies: 3986 | is-number: 7.0.0 3987 | 3988 | token-types@4.2.1: 3989 | dependencies: 3990 | '@tokenizer/token': 0.3.0 3991 | ieee754: 1.2.1 3992 | 3993 | touch@3.1.1: {} 3994 | 3995 | tr46@0.0.3: {} 3996 | 3997 | tr46@1.0.1: 3998 | dependencies: 3999 | punycode: 2.3.1 4000 | 4001 | tree-kill@1.2.2: {} 4002 | 4003 | triple-beam@1.4.1: {} 4004 | 4005 | ts-api-utils@2.0.0(typescript@5.7.3): 4006 | dependencies: 4007 | typescript: 5.7.3 4008 | 4009 | ts-custom-error@3.3.1: {} 4010 | 4011 | ts-interface-checker@0.1.13: {} 4012 | 4013 | ts-node@10.9.2(@types/node@22.13.0)(typescript@5.7.3): 4014 | dependencies: 4015 | '@cspotcode/source-map-support': 0.8.1 4016 | '@tsconfig/node10': 1.0.11 4017 | '@tsconfig/node12': 1.0.11 4018 | '@tsconfig/node14': 1.0.3 4019 | '@tsconfig/node16': 1.0.4 4020 | '@types/node': 22.13.0 4021 | acorn: 8.14.0 4022 | acorn-walk: 8.3.4 4023 | arg: 4.1.3 4024 | create-require: 1.1.1 4025 | diff: 4.0.2 4026 | make-error: 1.3.6 4027 | typescript: 5.7.3 4028 | v8-compile-cache-lib: 3.0.1 4029 | yn: 3.1.1 4030 | 4031 | tsconfig-paths@4.2.0: 4032 | dependencies: 4033 | json5: 2.2.3 4034 | minimist: 1.2.8 4035 | strip-bom: 3.0.0 4036 | 4037 | tslib@1.14.1: {} 4038 | 4039 | tslib@2.6.2: {} 4040 | 4041 | tslib@2.8.1: {} 4042 | 4043 | tsup@8.3.6(typescript@5.7.3)(yaml@2.5.1): 4044 | dependencies: 4045 | bundle-require: 5.1.0(esbuild@0.24.2) 4046 | cac: 6.7.14 4047 | chokidar: 4.0.3 4048 | consola: 3.4.0 4049 | debug: 4.4.0(supports-color@5.5.0) 4050 | esbuild: 0.24.2 4051 | joycon: 3.1.1 4052 | picocolors: 1.1.1 4053 | postcss-load-config: 6.0.1(yaml@2.5.1) 4054 | resolve-from: 5.0.0 4055 | rollup: 4.32.1 4056 | source-map: 0.8.0-beta.0 4057 | sucrase: 3.35.0 4058 | tinyexec: 0.3.2 4059 | tinyglobby: 0.2.10 4060 | tree-kill: 1.2.2 4061 | optionalDependencies: 4062 | typescript: 5.7.3 4063 | transitivePeerDependencies: 4064 | - jiti 4065 | - supports-color 4066 | - tsx 4067 | - yaml 4068 | 4069 | tsutils@3.21.0(typescript@5.7.3): 4070 | dependencies: 4071 | tslib: 1.14.1 4072 | typescript: 5.7.3 4073 | 4074 | type-check@0.4.0: 4075 | dependencies: 4076 | prelude-ls: 1.2.1 4077 | 4078 | type@2.7.3: {} 4079 | 4080 | typedarray-to-buffer@3.1.5: 4081 | dependencies: 4082 | is-typedarray: 1.0.0 4083 | 4084 | typescript@5.7.3: {} 4085 | 4086 | undefsafe@2.0.5: {} 4087 | 4088 | undici-types@5.26.5: {} 4089 | 4090 | undici-types@6.20.0: {} 4091 | 4092 | uri-js@4.4.1: 4093 | dependencies: 4094 | punycode: 2.3.1 4095 | 4096 | utf-8-validate@5.0.10: 4097 | dependencies: 4098 | node-gyp-build: 4.8.4 4099 | 4100 | utif2@4.1.0: 4101 | dependencies: 4102 | pako: 1.0.11 4103 | 4104 | util-deprecate@1.0.2: {} 4105 | 4106 | v8-compile-cache-lib@3.0.1: {} 4107 | 4108 | web-streams-polyfill@4.0.0-beta.3: {} 4109 | 4110 | webidl-conversions@3.0.1: {} 4111 | 4112 | webidl-conversions@4.0.2: {} 4113 | 4114 | websocket@1.0.35: 4115 | dependencies: 4116 | bufferutil: 4.0.9 4117 | debug: 2.6.9 4118 | es5-ext: 0.10.64 4119 | typedarray-to-buffer: 3.1.5 4120 | utf-8-validate: 5.0.10 4121 | yaeti: 0.0.6 4122 | transitivePeerDependencies: 4123 | - supports-color 4124 | 4125 | whatwg-url@5.0.0: 4126 | dependencies: 4127 | tr46: 0.0.3 4128 | webidl-conversions: 3.0.1 4129 | 4130 | whatwg-url@7.1.0: 4131 | dependencies: 4132 | lodash.sortby: 4.7.0 4133 | tr46: 1.0.1 4134 | webidl-conversions: 4.0.2 4135 | 4136 | which@2.0.2: 4137 | dependencies: 4138 | isexe: 2.0.0 4139 | 4140 | winston-transport@4.9.0: 4141 | dependencies: 4142 | logform: 2.7.0 4143 | readable-stream: 3.6.2 4144 | triple-beam: 1.4.1 4145 | 4146 | winston@3.17.0: 4147 | dependencies: 4148 | '@colors/colors': 1.6.0 4149 | '@dabh/diagnostics': 2.0.3 4150 | async: 3.2.6 4151 | is-stream: 2.0.1 4152 | logform: 2.7.0 4153 | one-time: 1.0.0 4154 | readable-stream: 3.6.2 4155 | safe-stable-stringify: 2.5.0 4156 | stack-trace: 0.0.10 4157 | triple-beam: 1.4.1 4158 | winston-transport: 4.9.0 4159 | 4160 | word-wrap@1.2.5: {} 4161 | 4162 | wrap-ansi@7.0.0: 4163 | dependencies: 4164 | ansi-styles: 4.3.0 4165 | string-width: 4.2.3 4166 | strip-ansi: 6.0.1 4167 | 4168 | wrap-ansi@8.1.0: 4169 | dependencies: 4170 | ansi-styles: 6.2.1 4171 | string-width: 5.1.2 4172 | strip-ansi: 7.1.0 4173 | 4174 | write-file-atomic@1.3.4: 4175 | dependencies: 4176 | graceful-fs: 4.2.11 4177 | imurmurhash: 0.1.4 4178 | slide: 1.1.6 4179 | 4180 | xml-parse-from-string@1.0.1: {} 4181 | 4182 | xml2js@0.5.0: 4183 | dependencies: 4184 | sax: 1.4.1 4185 | xmlbuilder: 11.0.1 4186 | 4187 | xmlbuilder@11.0.1: {} 4188 | 4189 | yaeti@0.0.6: {} 4190 | 4191 | yaml@2.5.1: 4192 | optional: true 4193 | 4194 | yarn-upgrade-all@0.7.4: 4195 | dependencies: 4196 | color-loggers: 0.3.2 4197 | 4198 | yn@3.1.1: {} 4199 | 4200 | yocto-queue@0.1.0: {} 4201 | 4202 | zod@3.24.1: {} 4203 | --------------------------------------------------------------------------------