diff --git a/.bumpversion.cfg b/.bumpversion.cfg index 0943a31..a5f9e02 100644 --- a/.bumpversion.cfg +++ b/.bumpversion.cfg @@ -1,5 +1,5 @@ [bumpversion] -current_version = 1.0.4 +current_version = 1.0.4-alpha commit = true tag = true message = release: bump version: {current_version} → {new_version} diff --git a/README.md b/README.md index d4172f2..9eaa724 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# [ChatGPT | Smart Bot](https://t.me/smart_gpt_voice_bot) +# [Pied Piper | GPT](https://t.me/smart_gpt_voice_bot) [![GitHub Workflow Status (with branch)](https://img.shields.io/github/actions/workflow/status/mikita-kandratsyeu/chat-gpt-bot/ci.yml?branch=main&style=for-the-badge)](https://github.com/mikita-kandratsyeu/chat-gpt-bot/actions) [![GitHub last commit](https://img.shields.io/github/last-commit/mikita-kandratsyeu/chat-gpt-bot?style=for-the-badge)](https://github.com/mikita-kandratsyeu/chat-gpt-bot/commits/main) diff --git a/package.json b/package.json index 0595e76..a775f9d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "chat-gpt-bot", - "version": "1.0.4", + "version": "1.0.4-alpha", "repository": "git@github.com:mikita-kandratsyeu/chat-gpt-bot.git", "author": "Mikita Kandratsyeu ", "license": "Apache-2.0", @@ -32,6 +32,7 @@ "fluent-ffmpeg": "^2.1.2", "gpt-3-encoder": "^1.1.4", "grammy": "^1.16.0", + "jimp": "^0.22.8", "mongoose": "^7.1.0", "node-cache": "^5.1.2", "openai": "^3.2.1", diff --git a/src/bot.ts b/src/bot.ts index 2db0ffe..022e471 100644 --- a/src/bot.ts +++ b/src/bot.ts @@ -3,6 +3,7 @@ import { adminCommand, clearCommand, descriptionCommand, + imageCommand, moderatorCommand, profileCommand, startCommand, @@ -81,6 +82,7 @@ export const createBot = () => { moderatorCommand, profileCommand, startCommand, + imageCommand, textCommand, voiceCommand, ].forEach((handle) => handle(bot)); diff --git a/src/callbacks/user-conversations/user-conversations.callback.ts b/src/callbacks/user-conversations/user-conversations.callback.ts index 2a0de65..533cb01 100644 --- a/src/callbacks/user-conversations/user-conversations.callback.ts +++ b/src/callbacks/user-conversations/user-conversations.callback.ts @@ -18,7 +18,7 @@ export const getUserConversationMessagesCallback: DynamicUsersMenuCallbackType = ); const { filePath, filePathForReply } = await csv.createUserMessagesCsv( - { key: userSession.key, value: { username, messages } }, + { key: userSession.key, value: { username, messages, images: [] } }, true, ); diff --git a/src/commands/image/image.command.ts b/src/commands/image/image.command.ts new file mode 100644 index 0000000..c9c2a19 --- /dev/null +++ b/src/commands/image/image.command.ts @@ -0,0 +1,26 @@ +import { BotCommands } from '@bot/constants'; +import { createImageConversation } from '@bot/conversations'; +import { mongo } from '@bot/services'; +import { BotType } from '@bot/types'; + +export const imageCommand = (bot: BotType) => + bot.command(BotCommands.IMAGE, async (ctx) => { + const username = String(ctx?.from?.username); + + const usedGptImages = ctx.session.limit.amountOfGptImages; + const currentLocale = await ctx.i18n.getLocale(); + + const user = await mongo.getUser(username); + + if (user && usedGptImages >= user.limit.gptImages) { + await ctx.reply( + ctx.t('info-message-reach-gpt-images-limit', { + date: new Date(user.limit.expire).toLocaleString(currentLocale), + }), + ); + + return; + } + + await ctx.conversation.enter(createImageConversation.name); + }); diff --git a/src/commands/index.ts b/src/commands/index.ts index 1528296..fef971a 100644 --- a/src/commands/index.ts +++ b/src/commands/index.ts @@ -2,6 +2,7 @@ export * from './about/about.command'; export * from './admin/admin.command'; export * from './clear/clear.command'; export * from './description/description.command'; +export * from './image/image.command'; export * from './moderator/moderator.command'; export * from './profile/profile.command'; export * from './start/start.command'; diff --git a/src/composers/callback-query/callback-query.composer.ts b/src/composers/callback-query/callback-query.composer.ts index b3d965a..4bb9911 100644 --- a/src/composers/callback-query/callback-query.composer.ts +++ b/src/composers/callback-query/callback-query.composer.ts @@ -4,7 +4,11 @@ import { ModeratorMenuActions, UsersMenuActions, } from '@bot/constants'; -import { addMultipleUsersConversation, addUserConversation } from '@bot/conversations'; +import { + addMultipleUsersConversation, + addUserConversation, + createImageConversation, +} from '@bot/conversations'; import { adminMainMenu, moderatorMainMenu } from '@bot/menu'; import { BotContextType } from '@bot/types'; import { Composer, Middleware } from 'grammy'; @@ -41,8 +45,16 @@ composer.callbackQuery(UsersMenuActions.ADD_NEW_MULTIPLE_USERS, async (ctx) => { }); composer.callbackQuery(CommonActions.GO_TO_CHAT, async (ctx) => { + await ctx.conversation.exit(createImageConversation.name); + await ctx.deleteMessage(); await ctx.reply(ctx.t('start-message')); }); +composer.callbackQuery(CommonActions.CREATE_IMAGE, async (ctx) => { + await ctx.deleteMessage(); + + await ctx.conversation.enter(createImageConversation.name); +}); + export const callbackQueryComposer = (): Middleware => composer; diff --git a/src/composers/conversation/conversation.composer.ts b/src/composers/conversation/conversation.composer.ts index ebea0fc..6e602d6 100644 --- a/src/composers/conversation/conversation.composer.ts +++ b/src/composers/conversation/conversation.composer.ts @@ -1,4 +1,8 @@ -import { addMultipleUsersConversation, addUserConversation } from '@bot/conversations'; +import { + addMultipleUsersConversation, + addUserConversation, + createImageConversation, +} from '@bot/conversations'; import { BotContextType } from '@bot/types'; import { conversations, createConversation } from '@grammyjs/conversations'; import { Composer, Middleware } from 'grammy'; @@ -9,5 +13,6 @@ composer.use(conversations()); composer.use(createConversation(addUserConversation)); composer.use(createConversation(addMultipleUsersConversation)); +composer.use(createConversation(createImageConversation)); export const conversationComposer = (): Middleware => composer; diff --git a/src/constants/index.ts b/src/constants/index.ts index ab1a3a2..f4fe662 100644 --- a/src/constants/index.ts +++ b/src/constants/index.ts @@ -10,6 +10,8 @@ export enum MessageRolesGPT { } export const MAX_CONTEXT_GPT_TOKENS = 4096; +export const IMAGE_SIZE_DEFAULT = '512x512'; +export const MAX_IMAGES_REQUEST = 3; // Telegram API export const TELEGRAM_API = 'https://api.telegram.org'; @@ -26,32 +28,34 @@ export enum BotCommands { ADMIN = 'admin', CLEAR = 'clear', DESCRIPTION = 'description', + IMAGE = 'image', MODERATOR = 'moderator', PROFILE = 'profile', START = 'start', } -export const botName = 'ChatGPT | Smart Bot'; +export const botName = 'Pied Piper | GPT'; export const BotCommandsWithDescription = [ { command: BotCommands.PROFILE, i18nKey: 'command-profile' }, { command: BotCommands.CLEAR, i18nKey: 'command-clear' }, + { command: BotCommands.IMAGE, i18nKey: 'command-image' }, { command: BotCommands.ADMIN, i18nKey: 'command-admin' }, { command: BotCommands.MODERATOR, i18nKey: 'command-moderator' }, { command: BotCommands.DESCRIPTION, i18nKey: 'command-description' }, { command: BotCommands.ABOUT, i18nKey: 'command-about' }, ]; -export const DAY_MS = 60 * 60 * 24 * 1000; - // Per day GPT Token limits export enum GPTLimits { - BASE = '4096/10', - PREMIUM = '8192/20', - VIP = '16384/40', + BASE = '4096/5', + PREMIUM = '8192/10', + VIP = '16384/20', SUPER_VIP = '32768/50', } +export const DAY_MS = 60 * 60 * 24 * 1000; + // Node cache export const TTL_DEFAULT = process.env.NODE_ENV !== 'production' ? 60 : 600; @@ -75,6 +79,9 @@ export const addUserFormat = (userRole: UserRoles) => export const ADD_USER_CSV_FORMAT = ' | '; +// Image +export const CREATE_IMAGE_QUERY_FORMAT = `;`; + // Regexp export const REGEXP_USERNAME = /^[a-zA-Z0-9_]{5,32}$/; export const REGEXP_CSV_FILE_TYPE = /.+(\.csv)$/; @@ -166,6 +173,7 @@ export enum UsersMenu { // Menu actions export enum CommonActions { GO_TO_CHAT = 'go-to-chat-action', + CREATE_IMAGE = 'create-image-action', } export enum AdminMenuActions { diff --git a/src/conversations/index.ts b/src/conversations/index.ts index b18bf4c..f65afbf 100644 --- a/src/conversations/index.ts +++ b/src/conversations/index.ts @@ -1 +1,2 @@ +export * from './openai/create-image.conversation'; export * from './users'; diff --git a/src/conversations/openai/create-image.conversation.ts b/src/conversations/openai/create-image.conversation.ts new file mode 100644 index 0000000..d8a4853 --- /dev/null +++ b/src/conversations/openai/create-image.conversation.ts @@ -0,0 +1,64 @@ +import { CREATE_IMAGE_QUERY_FORMAT } from '@bot/constants'; +import { inlineCreateImage, inlineGoToChat } from '@bot/keyboards'; +import { logger, openAI } from '@bot/services'; +import { ConversationType } from '@bot/types'; +import { convertBase64ToFiles, removeFile } from '@bot/utils'; +import { InputFile } from 'grammy'; +import { InputMediaPhoto } from 'grammy/types'; + +export const createImageConversation: ConversationType = async (conversation, ctx) => { + try { + await ctx.reply( + ctx.t('image-generator-enter-request', { gptImageQuery: CREATE_IMAGE_QUERY_FORMAT }), + { reply_markup: inlineGoToChat(ctx) }, + ); + + const { + message: { text, message_id: messageId }, + } = await conversation.waitFor('message:text'); + + const [prompt = '', numberOfImages = 1] = text?.trim().split(';'); + + if (Number.isNaN(Number(numberOfImages))) { + return await ctx.reply(ctx.t('image-generator-incorrect-image-number'), { + reply_to_message_id: messageId, + reply_markup: inlineCreateImage(ctx), + }); + } + + const response = await conversation.external(async () => + openAI.generateImage(prompt, Number(numberOfImages)), + ); + + const base64Images = response.map((base64Image) => base64Image.b64_json ?? ''); + + conversation.session.limit.amountOfGptImages += base64Images.length; + conversation.session.custom.images.push({ + base64: base64Images, + prompt, + }); + + const imageFilesPath = await conversation.external(async () => + convertBase64ToFiles(base64Images), + ); + + const inputMediaFiles: InputMediaPhoto[] = imageFilesPath.map((imageFilePath) => ({ + type: 'photo', + media: new InputFile(imageFilePath), + })); + + await ctx.replyWithMediaGroup(inputMediaFiles, { + reply_to_message_id: messageId, + }); + + imageFilesPath.forEach((path) => removeFile(path)); + + return; + } catch (error) { + await ctx.reply(ctx.t('error-message-common')); + + logger.error(`conversations::createImageConversation::${JSON.stringify(error.message)}`); + + return; + } +}; diff --git a/src/helpers/sessions/sessions.helper.ts b/src/helpers/sessions/sessions.helper.ts index edfa6e0..8d813d1 100644 --- a/src/helpers/sessions/sessions.helper.ts +++ b/src/helpers/sessions/sessions.helper.ts @@ -2,6 +2,7 @@ import { SessionCsvIds } from '@bot/constants'; import { SessionType, UserSessionModelType } from '@bot/types'; export const createInitialCustomSessionData = (): SessionType['custom'] => ({ + images: [], messages: [], username: null, }); diff --git a/src/keyboards/index.ts b/src/keyboards/index.ts index 8dc24b6..b99ffd5 100644 --- a/src/keyboards/index.ts +++ b/src/keyboards/index.ts @@ -30,3 +30,6 @@ export const inlineAddNewMultipleUsers = (ctx: BotContextType) => export const inlineShareWithContacts = (ctx: BotContextType, query: string) => new InlineKeyboard().switchInline(ctx.t('common-button-share'), query); + +export const inlineCreateImage = (ctx: BotContextType) => + new InlineKeyboard().text(ctx.t('error-message-common-try-again'), CommonActions.CREATE_IMAGE); diff --git a/src/locales/en.ftl b/src/locales/en.ftl index 78b8251..487c299 100644 --- a/src/locales/en.ftl +++ b/src/locales/en.ftl @@ -109,11 +109,16 @@ info-message-moderator-panel-for-super-admin = Note: Please go to the Admin-pane info-message-node-cache = Note: Data caching is set to { $cache } minutes. info-message-clear-current-session = The current session for the { $username } has been cleared. info-message-reach-gpt-tokens-limit = You have used all available GPT tokens. Please try again after { $date }. +info-message-reach-gpt-images-limit = You have used all available GPT images. Please try again after { $date }. # Profile profile-user-initial-message = Hey 👋🏻, { $firstName } { $lastName }! profile-user-role = Your role: { $role } -profile-user-gpt-package = GPT limit package: { $package } +profile-user-gpt-package = GPT limit: { $package } profile-user-available-messages-amount = Available number of GPT tokens: { $amount } profile-user-available-images-amount = Available number of GPT images: { $amount } profile-user-date-register = Date of registration: { $date } + +# Image generator +image-generator-enter-request = Enter the query in the following format: { $gptImageQuery }. +image-generator-incorrect-image-number = The number of images entered is incorrect. Try again! diff --git a/src/locales/ru.ftl b/src/locales/ru.ftl index 2fed564..88c4ed1 100644 --- a/src/locales/ru.ftl +++ b/src/locales/ru.ftl @@ -109,11 +109,16 @@ info-message-moderator-panel-for-super-admin = Примечание: Пожал info-message-node-cache = Примечание: Установлено кэширование данных - { $cache } минут. info-message-clear-current-session = Текущая сессия для { $username } была очищена. info-message-reach-gpt-tokens-limit = Вы использовали все доступные GPT токены. Пожалуйста, повторите попытку после { $date }. +info-message-reach-gpt-images-limit = Вы использовали все доступные GPT изображения. Пожалуйста, повторите попытку после { $date }. # Profile profile-user-initial-message = Привет 👋🏻, { $firstName } { $lastName }! profile-user-role = Ваша роль: { $role } -profile-user-gpt-package = GPT лимит пакет: { $package } +profile-user-gpt-package = GPT лимит: { $package } profile-user-available-messages-amount = Доступное количество GPT токенов: { $amount } profile-user-available-images-amount = Доступное количество GPT картинок: { $amount } profile-user-date-register = Дата регистрации: { $date } + +# Image generator +image-generator-enter-request = Введите запрос в следующем формате: { $gptImageQuery }. +image-generator-incorrect-image-number = Введено неверное количество картинок. Попробуйте еще раз! diff --git a/src/models/user-session/user-session.model.ts b/src/models/user-session/user-session.model.ts index abb2e1c..298e0c4 100644 --- a/src/models/user-session/user-session.model.ts +++ b/src/models/user-session/user-session.model.ts @@ -6,6 +6,7 @@ const schema = new Schema({ value: { username: { type: String }, messages: [], + images: [], }, }); diff --git a/src/services/openai/openai.service.ts b/src/services/openai/openai.service.ts index 1bd3f18..6d92b3f 100644 --- a/src/services/openai/openai.service.ts +++ b/src/services/openai/openai.service.ts @@ -1,5 +1,10 @@ import { config } from '@bot/config'; -import { modelGPT, transcriptionModelGPT } from '@bot/constants'; +import { + IMAGE_SIZE_DEFAULT, + MAX_IMAGES_REQUEST, + modelGPT, + transcriptionModelGPT, +} from '@bot/constants'; import { logger } from '@bot/services'; import { removeFile } from '@bot/utils'; import { createReadStream } from 'fs'; @@ -39,10 +44,10 @@ class OpenAIService { async transcription(filepath: string) { try { - const fileStream: unknown = createReadStream(filepath); + const fileStream = createReadStream(filepath); const response = await this.openAI.createTranscription( - fileStream as File, + fileStream as unknown as File, transcriptionModelGPT, ); @@ -60,6 +65,31 @@ class OpenAIService { } } } + + async generateImage(prompt: string, numberOfImages: number) { + try { + const response = await this.openAI.createImage({ + n: Math.min(MAX_IMAGES_REQUEST, numberOfImages <= 0 ? 1 : numberOfImages), + prompt, + response_format: 'b64_json', + size: IMAGE_SIZE_DEFAULT, + }); + + return response.data.data; + } catch (error) { + if (error.response) { + logger.error( + `openAIService::generateImage::[${error.response.status}]::${JSON.stringify( + error.response.data, + )}`, + ); + } else { + logger.error(`openAIService::generateImage::${JSON.stringify(error.message)}`); + } + + return []; + } + } } export const openAI = new OpenAIService(config.OPEN_AI_TOKEN, config.OPEN_AI_ORG); diff --git a/src/types/bot/bot.type.ts b/src/types/bot/bot.type.ts index 8bcb5af..ba3e0e5 100644 --- a/src/types/bot/bot.type.ts +++ b/src/types/bot/bot.type.ts @@ -10,10 +10,16 @@ export type SessionMessageType = { timestamp: string; }; +export type SessionImageType = { + base64: string[]; + prompt: string; +}; + export type SessionType = { custom: { username: string | null; messages: SessionMessageType[]; + images: SessionImageType[]; }; limit: { amountOfGptImages: number; diff --git a/src/types/model/model.type.ts b/src/types/model/model.type.ts index 3e43a5e..0be8b27 100644 --- a/src/types/model/model.type.ts +++ b/src/types/model/model.type.ts @@ -1,5 +1,5 @@ import { UserRoles } from '@bot/constants'; -import { SessionMessageType } from '@bot/types'; +import { SessionImageType, SessionMessageType } from '@bot/types'; import { Schema } from 'mongoose'; export type UserModelType = { @@ -22,6 +22,7 @@ export type UserSessionModelType = { value: { username: string; messages: SessionMessageType[]; + images: SessionImageType[]; }; }; diff --git a/src/utils/index.ts b/src/utils/index.ts index 308c85e..deb20e7 100644 --- a/src/utils/index.ts +++ b/src/utils/index.ts @@ -1,7 +1,9 @@ import { TTL_DEFAULT } from '@bot/constants'; import { logger } from '@bot/services'; import { unlink } from 'fs/promises'; +import Jimp from 'jimp'; import NodeCache from 'node-cache'; +import { resolve as resolvePath } from 'path'; export const memoryCache = new NodeCache({ stdTTL: TTL_DEFAULT, @@ -78,3 +80,24 @@ export const applyMixins = (derivedCtor: any, constructors: any[]) => { }); }); }; + +export const convertBase64ToFiles = async (base64Images: string[]) => { + try { + const imageFiles: string[] = []; + + const promises = base64Images.map(async (base64Image, index) => { + const imagePath = resolvePath(__dirname, '../../assets', `image-${index}.png`); + const buffer = Buffer.from(base64Image, 'base64'); + + const image = await Jimp.read(buffer); + image.quality(5).write(imagePath); + imageFiles.push(imagePath); + }); + + return await Promise.all(promises).then(() => imageFiles); + } catch (error) { + logger.error(`utils::convertBase64ToFiles::${JSON.stringify(error.message)}`); + + return []; + } +}; diff --git a/yarn.lock b/yarn.lock index 122ff27..ab452df 100644 --- a/yarn.lock +++ b/yarn.lock @@ -223,6 +223,264 @@ resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== +"@jimp/bmp@^0.22.8": + version "0.22.8" + resolved "https://registry.yarnpkg.com/@jimp/bmp/-/bmp-0.22.8.tgz#19ce17bfef7f3d34a0dbe220d640f384d28178bc" + integrity sha512-JEMKgM1AEvvWfn9ZCHn62nK+QCE3Pb/ZhPdL3NF0ZgKNww6pqOmo6KqXzqY18JLB7c0epuTp4GPDPDhOh/ou1g== + dependencies: + "@jimp/utils" "^0.22.8" + bmp-js "^0.1.0" + +"@jimp/core@^0.22.8": + version "0.22.8" + resolved "https://registry.yarnpkg.com/@jimp/core/-/core-0.22.8.tgz#6851513756e81887864d64d1786f212795076065" + integrity sha512-vkN28aFikzQieA6bGxN+qe20pseCAemCyUI0YmRkJIArlb6OujtAwWAKyokv2lylV56bq8EQGIz+Y30OXUnRqg== + dependencies: + "@jimp/utils" "^0.22.8" + any-base "^1.1.0" + buffer "^5.2.0" + exif-parser "^0.1.12" + file-type "^16.5.4" + isomorphic-fetch "^3.0.0" + mkdirp "^2.1.3" + pixelmatch "^4.0.2" + tinycolor2 "^1.6.0" + +"@jimp/custom@^0.22.8": + version "0.22.8" + resolved "https://registry.yarnpkg.com/@jimp/custom/-/custom-0.22.8.tgz#098cee27bb3e460d24cdcc6774c1680f164b5e50" + integrity sha512-u6lP9x/HNeGHB0Oojv4c2mhuDvn7G0ikzYbK4IKLsH4HzHxt62faMjBzQMcFhKJhR6UiiKE/jiHrhGvBT/fMkw== + dependencies: + "@jimp/core" "^0.22.8" + +"@jimp/gif@^0.22.8": + version "0.22.8" + resolved "https://registry.yarnpkg.com/@jimp/gif/-/gif-0.22.8.tgz#6692a9117fb4b25620d92327fa305dd95cd57334" + integrity sha512-I0l6koS67IPU40RPxCJTD1NvePEd8vUIHTejx1ly0jrjGnumbqdarAlBUkDrKfPPc+Fnqp84hBbSN1w5hNPT6w== + dependencies: + "@jimp/utils" "^0.22.8" + gifwrap "^0.9.2" + omggif "^1.0.9" + +"@jimp/jpeg@^0.22.8": + version "0.22.8" + resolved "https://registry.yarnpkg.com/@jimp/jpeg/-/jpeg-0.22.8.tgz#182c41108833bdc8c88598ef4c11bf4f197228eb" + integrity sha512-hLXrQ7/0QiUhAVAF10dfGCSq3hvyqjKltlpu/87b3wqMDKe9KdvhX1AJHiUUrAbJv1fAcnOmQGTyXGuySa1D6A== + dependencies: + "@jimp/utils" "^0.22.8" + jpeg-js "^0.4.4" + +"@jimp/plugin-blit@^0.22.8": + version "0.22.8" + resolved "https://registry.yarnpkg.com/@jimp/plugin-blit/-/plugin-blit-0.22.8.tgz#b7ea7cbcbb0d7da87fb4124f0129ee539bf5ae49" + integrity sha512-rQ19txVCKIwo74HtgFodFt4//0ATPCJK+f24riqzb+nx+1JaOo1xRvpJqg4moirHwKR2fhwdDxmY7KX20kCeYA== + dependencies: + "@jimp/utils" "^0.22.8" + +"@jimp/plugin-blur@^0.22.8": + version "0.22.8" + resolved "https://registry.yarnpkg.com/@jimp/plugin-blur/-/plugin-blur-0.22.8.tgz#d561de68d7154175b7a443d12949ba7d9fe255ca" + integrity sha512-GWbNK3YW6k2EKiGJdpAFEr0jezPBtiVxj2wG/lCPuWJz7KmzSSN99hQjIy73xQxoBCRdALfJlkhe3leFNRueSQ== + dependencies: + "@jimp/utils" "^0.22.8" + +"@jimp/plugin-circle@^0.22.8": + version "0.22.8" + resolved "https://registry.yarnpkg.com/@jimp/plugin-circle/-/plugin-circle-0.22.8.tgz#2182999a77d0fab7d9eaad94815524104307015f" + integrity sha512-qPCw8XFW8opT89ciFDuvs+eB3EB1mZIJWVajD2qAlprHiE7YGr34TkM7N5MNr3qZ1pJgkYdW6+HbBrJwBaonqw== + dependencies: + "@jimp/utils" "^0.22.8" + +"@jimp/plugin-color@^0.22.8": + version "0.22.8" + resolved "https://registry.yarnpkg.com/@jimp/plugin-color/-/plugin-color-0.22.8.tgz#3f64888b28438ac986a97c672babe6abec886cb3" + integrity sha512-ogkbg6rpDVH/mMLgAQKg17z3oZE0VN7ZWxNoH12fUHchqKz1I57zpa65fxZe2I8T5Xz97HR3x+7V7oI8qQGdSA== + dependencies: + "@jimp/utils" "^0.22.8" + tinycolor2 "^1.6.0" + +"@jimp/plugin-contain@^0.22.8": + version "0.22.8" + resolved "https://registry.yarnpkg.com/@jimp/plugin-contain/-/plugin-contain-0.22.8.tgz#5afad638558ccf69abfac0c85b6354534e22c0eb" + integrity sha512-oiaPLdJt9Dk+XEEhM/OU3lFemM51mA9NgMCAdburSCjDzKacJYBGFSHjTOhXzcxOie/ZDpOYN/UzFGKy8Dgl9A== + dependencies: + "@jimp/utils" "^0.22.8" + +"@jimp/plugin-cover@^0.22.8": + version "0.22.8" + resolved "https://registry.yarnpkg.com/@jimp/plugin-cover/-/plugin-cover-0.22.8.tgz#b7e2aa869ff3d68c6b3d68e46f9ddb309bf5fa8a" + integrity sha512-mO68w1m/LhfuHU8LKHY05a4/hhWnY4t+T+8JCw9t+5yfzA4+LofBZZKtFtWgwf/QGe1y3X2rtUU/avAzDUKyyA== + dependencies: + "@jimp/utils" "^0.22.8" + +"@jimp/plugin-crop@^0.22.8": + version "0.22.8" + resolved "https://registry.yarnpkg.com/@jimp/plugin-crop/-/plugin-crop-0.22.8.tgz#2683de20d34eac0d457a5d231a0e3885023a2192" + integrity sha512-ns4oH0h0gezYsbuH8RThcMLY5uTLk/vnqOVjWCehMHEzxi0DHMWCmpcb6bC//vJ+XFNhtVGn1ALN7+ROmPrj+A== + dependencies: + "@jimp/utils" "^0.22.8" + +"@jimp/plugin-displace@^0.22.8": + version "0.22.8" + resolved "https://registry.yarnpkg.com/@jimp/plugin-displace/-/plugin-displace-0.22.8.tgz#d29992956fcdb01ab860bb00dd923964e88540f0" + integrity sha512-Cj8nHYgsdFynOIx3dbbiVwRuZn3xO+RVfwkTRy0JBye+K2AU8SQJS+hSFNMQFTZt5djivh6kh0TzvR/6LkOd1w== + dependencies: + "@jimp/utils" "^0.22.8" + +"@jimp/plugin-dither@^0.22.8": + version "0.22.8" + resolved "https://registry.yarnpkg.com/@jimp/plugin-dither/-/plugin-dither-0.22.8.tgz#75d31db459852bd6c2caf10ff74bc7340c9d3bf5" + integrity sha512-oE0Us/6bEgrgEg56plU3jSBzvB9iGhweKUHmxYMWnQbFCHP4mNCtPAs8+Fmq6c+m98ZgBgRcrJTnC7lphHkGyw== + dependencies: + "@jimp/utils" "^0.22.8" + +"@jimp/plugin-fisheye@^0.22.8": + version "0.22.8" + resolved "https://registry.yarnpkg.com/@jimp/plugin-fisheye/-/plugin-fisheye-0.22.8.tgz#980bd252ae9ebe903256fc238f224d7deb067813" + integrity sha512-bWvYY/nfMcKclWEaRyAir+YsT6C5St823HUQAsewZowTrJmme+w4U2a6InsryTHUL01BBcV5BLH0aDHuV3StvA== + dependencies: + "@jimp/utils" "^0.22.8" + +"@jimp/plugin-flip@^0.22.8": + version "0.22.8" + resolved "https://registry.yarnpkg.com/@jimp/plugin-flip/-/plugin-flip-0.22.8.tgz#c359436260455af0ec4156d9823a55b75b776d94" + integrity sha512-0NFTNzjsdmOQkaIkNjZqO3/yU4SQb9nnWQXsLS1fFo+9QrIL5v8vVkXpk/rhiND6PyTj2mMTNjOa76GuZcC+iQ== + dependencies: + "@jimp/utils" "^0.22.8" + +"@jimp/plugin-gaussian@^0.22.8": + version "0.22.8" + resolved "https://registry.yarnpkg.com/@jimp/plugin-gaussian/-/plugin-gaussian-0.22.8.tgz#bd52b0944055afa9344496af9a1f05c8d7127ded" + integrity sha512-E/f14aLzCS50QAM7K+InI9V61KVy/Zx52vy7Jjfo1h7qKhQHss3PYaydaH0N6qlXRNeXgh+4/32P9JfieLMcdw== + dependencies: + "@jimp/utils" "^0.22.8" + +"@jimp/plugin-invert@^0.22.8": + version "0.22.8" + resolved "https://registry.yarnpkg.com/@jimp/plugin-invert/-/plugin-invert-0.22.8.tgz#d52c4c735720359d942a600827693b2e097c61a7" + integrity sha512-UauP39FF2cwbA5VU+Tz9VlNa9rtULPSHZb0Huwcjqjm9/G/xVN69VJ8+RKiFC4zM1/kYAUp/6IRwPa6qdKJpSw== + dependencies: + "@jimp/utils" "^0.22.8" + +"@jimp/plugin-mask@^0.22.8": + version "0.22.8" + resolved "https://registry.yarnpkg.com/@jimp/plugin-mask/-/plugin-mask-0.22.8.tgz#80adff958c1cec3d4727a21018f4f7062a697394" + integrity sha512-bhg5+3i8x1CmYj6cjvPBQZLwZEI3iK3gJWF25ZHF+12d3cqDuJngtr8oRQOQLlAgvKmrj9FXIiEPDczUI9cnWQ== + dependencies: + "@jimp/utils" "^0.22.8" + +"@jimp/plugin-normalize@^0.22.8": + version "0.22.8" + resolved "https://registry.yarnpkg.com/@jimp/plugin-normalize/-/plugin-normalize-0.22.8.tgz#e60e864c7b0270920517e6276d847c4604154051" + integrity sha512-Yg5nreAR1JYuSObu3ExlgaLxVeW6VvjVL5qFwiPFxSNlG8JIwL1Ir3K3ChSnnvymyZvJMHb6YKTYNfXKw5Da6g== + dependencies: + "@jimp/utils" "^0.22.8" + +"@jimp/plugin-print@^0.22.8": + version "0.22.8" + resolved "https://registry.yarnpkg.com/@jimp/plugin-print/-/plugin-print-0.22.8.tgz#fa1e6659a1cc34dddceee33e887cbf6fc0d99038" + integrity sha512-86O5ejCDi543IYl0TykSmNWErzAjEYhiAxNQb2F7rFRT38WJYNVsvJ6QhxhDQHKxSmF5iwmqbk0jYk5Wp2Z1kw== + dependencies: + "@jimp/utils" "^0.22.8" + load-bmfont "^1.4.1" + +"@jimp/plugin-resize@^0.22.8": + version "0.22.8" + resolved "https://registry.yarnpkg.com/@jimp/plugin-resize/-/plugin-resize-0.22.8.tgz#d111c164512fb54c096da55dcabf681a5b57d458" + integrity sha512-kg8ArQRPqv/iU3DWNXCa8kcVIhoq64Ze0aGCAeFLKlAq/59f5pzAci6m6vV4L/uOVdYmUa9/kYwIFY6RWKpfzQ== + dependencies: + "@jimp/utils" "^0.22.8" + +"@jimp/plugin-rotate@^0.22.8": + version "0.22.8" + resolved "https://registry.yarnpkg.com/@jimp/plugin-rotate/-/plugin-rotate-0.22.8.tgz#3b61655a1a38600e01c73210c201c690041c3bcb" + integrity sha512-9a+VPZWMN/Cks76wf8LjM5RVA3ntP9+NAdsS1SZhhXel7U3Re/dWMouIEbo3QTt6K+igRo4txUCdZiw4ZucvkQ== + dependencies: + "@jimp/utils" "^0.22.8" + +"@jimp/plugin-scale@^0.22.8": + version "0.22.8" + resolved "https://registry.yarnpkg.com/@jimp/plugin-scale/-/plugin-scale-0.22.8.tgz#b5a4f798aebefa914e942a0feae6dc179230d974" + integrity sha512-dQS4pG6DX6endu8zUpvBBOEtGC+ljDDDNw0scSXY71TxyQdNo5Ro0apfsppjmuAr8rNotRkfyxbITKkXQDRUDQ== + dependencies: + "@jimp/utils" "^0.22.8" + +"@jimp/plugin-shadow@^0.22.8": + version "0.22.8" + resolved "https://registry.yarnpkg.com/@jimp/plugin-shadow/-/plugin-shadow-0.22.8.tgz#ba6c14074aafbc47c550878044e7c18498c91907" + integrity sha512-HyAhr7OblTQh+BoKHQg4qbS9MweNlH77yfpBqUEyDtfyjI5r06+5chf1ZdLRIPEWv/BdCfdI/g81Wv69muCMwA== + dependencies: + "@jimp/utils" "^0.22.8" + +"@jimp/plugin-threshold@^0.22.8": + version "0.22.8" + resolved "https://registry.yarnpkg.com/@jimp/plugin-threshold/-/plugin-threshold-0.22.8.tgz#63b96ce4f82250ef993bfb7e88f12dae94e17a04" + integrity sha512-ZmkfH0PtjvF1UcKsjw0H7V6r+LC0yKzEfg76Jhs2nIqIgsxsSOVfHwS7z0/1IWnyXxSw36m+NjCAotNHRILGmA== + dependencies: + "@jimp/utils" "^0.22.8" + +"@jimp/plugins@^0.22.8": + version "0.22.8" + resolved "https://registry.yarnpkg.com/@jimp/plugins/-/plugins-0.22.8.tgz#07683e350d3578b319580bf445650df88fb7eccd" + integrity sha512-ieI2+kCpmIfjwVlT7B67ULCzxMizfj7LspJh9HnIZCDXQB9GBOZ9KImLYc75Krae0dP/3FR7FglLiSI7fkOHbw== + dependencies: + "@jimp/plugin-blit" "^0.22.8" + "@jimp/plugin-blur" "^0.22.8" + "@jimp/plugin-circle" "^0.22.8" + "@jimp/plugin-color" "^0.22.8" + "@jimp/plugin-contain" "^0.22.8" + "@jimp/plugin-cover" "^0.22.8" + "@jimp/plugin-crop" "^0.22.8" + "@jimp/plugin-displace" "^0.22.8" + "@jimp/plugin-dither" "^0.22.8" + "@jimp/plugin-fisheye" "^0.22.8" + "@jimp/plugin-flip" "^0.22.8" + "@jimp/plugin-gaussian" "^0.22.8" + "@jimp/plugin-invert" "^0.22.8" + "@jimp/plugin-mask" "^0.22.8" + "@jimp/plugin-normalize" "^0.22.8" + "@jimp/plugin-print" "^0.22.8" + "@jimp/plugin-resize" "^0.22.8" + "@jimp/plugin-rotate" "^0.22.8" + "@jimp/plugin-scale" "^0.22.8" + "@jimp/plugin-shadow" "^0.22.8" + "@jimp/plugin-threshold" "^0.22.8" + timm "^1.6.1" + +"@jimp/png@^0.22.8": + version "0.22.8" + resolved "https://registry.yarnpkg.com/@jimp/png/-/png-0.22.8.tgz#3fd5e546087aede4011ceb1f75e912dbc8ff696e" + integrity sha512-XOj11kcCr8zKg24QSwlRfH9k4hbV6rkMGUVxMS3puRzzB0FBSQy42NBYEfYf2XlY2QJSAByPl4AYerOtKb805w== + dependencies: + "@jimp/utils" "^0.22.8" + pngjs "^6.0.0" + +"@jimp/tiff@^0.22.8": + version "0.22.8" + resolved "https://registry.yarnpkg.com/@jimp/tiff/-/tiff-0.22.8.tgz#e584e087633cbfad90fcca82439fabcba4b6786e" + integrity sha512-K0hYUVW5MLgwq3jiHVHa6LvP05J1rXOlRCC+5dMTUnAXVwi45+MKsqA/8lzzwhHYJ65CNhZwy6D3+ZNzM9SIBQ== + dependencies: + utif2 "^4.0.1" + +"@jimp/types@^0.22.8": + version "0.22.8" + resolved "https://registry.yarnpkg.com/@jimp/types/-/types-0.22.8.tgz#4dedda51186a1d950108ed9856f5d17a9f003597" + integrity sha512-9+xc+mzuYwu0i+6dsnhXiUgfcS+Ktqn5q2jczoKyyBT0cOKgsk+57EIeFLgpTfVGRKRR0y/UIdHByeCzGguF3A== + dependencies: + "@jimp/bmp" "^0.22.8" + "@jimp/gif" "^0.22.8" + "@jimp/jpeg" "^0.22.8" + "@jimp/png" "^0.22.8" + "@jimp/tiff" "^0.22.8" + timm "^1.6.1" + +"@jimp/utils@^0.22.8": + version "0.22.8" + resolved "https://registry.yarnpkg.com/@jimp/utils/-/utils-0.22.8.tgz#04039431a00f62e0c630b376aab848f8718fb9a1" + integrity sha512-AaqjfqDeLzSFzrbGRKHMXg/ntiWKvoG9tpVgWzgOx5/gPWj/IyGfztojLTTvY8HqZCr25z8z91u2lAQD2v46Jw== + dependencies: + regenerator-runtime "^0.13.3" + "@jridgewell/resolve-uri@^3.0.3": version "3.1.1" resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721" @@ -262,6 +520,11 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" +"@tokenizer/token@^0.3.0": + version "0.3.0" + resolved "https://registry.yarnpkg.com/@tokenizer/token/-/token-0.3.0.tgz#fe98a93fe789247e998c75e74e9c7c63217aa276" + integrity sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A== + "@tsconfig/node10@^1.0.7": version "1.0.9" resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.9.tgz#df4907fc07a886922637b15e02d4cebc4c0021b2" @@ -349,6 +612,11 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-18.16.0.tgz#4668bc392bb6938637b47e98b1f2ed5426f33316" integrity sha512-BsAaKhB+7X+H4GnSjGhJG9Qi8Tw+inU9nJDwmD5CgOmBLEI6ArdhikpLX7DjbjDRDTbqZzU2LSQNZg8WGPiSZQ== +"@types/node@16.9.1": + version "16.9.1" + resolved "https://registry.yarnpkg.com/@types/node/-/node-16.9.1.tgz#0611b37db4246c937feef529ddcc018cf8e35708" + integrity sha512-QpLcX9ZSsq3YYUUnD3nFDY8H7wctAhQj/TFKL8Ya8v5fMm3CFXxo8zStsLAl780ltoYoo1WvKUVGBQK+1ifr7g== + "@types/qs@*": version "6.9.7" resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.7.tgz#63bb7d067db107cc1e457c303bc25d511febf6cb" @@ -539,6 +807,11 @@ ansi-styles@^4.0.0, ansi-styles@^4.1.0: dependencies: color-convert "^2.0.1" +any-base@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/any-base/-/any-base-1.1.0.tgz#ae101a62bc08a597b4c9ab5b7089d456630549fe" + integrity sha512-uMgjozySS8adZZYePpaWs8cxB9/kdzmpX6SgJZ+wbz1K5eYk5QMYDVJaZKhxyIHUdnnJkfR7SVgStgH7LkGUyg== + anymatch@~3.1.2: version "3.1.3" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" @@ -669,6 +942,11 @@ bl@^4.1.0: inherits "^2.0.4" readable-stream "^3.4.0" +bmp-js@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/bmp-js/-/bmp-js-0.1.0.tgz#e05a63f796a6c1ff25f4771ec7adadc148c07233" + integrity sha512-vHdS19CnY3hwiNdkaqk93DvjVLfbEcI8mys4UjuWrlX1haDmroo8o4xCzh4wD6DGV6HxRCyauwhHRqMTfERtjw== + body-parser@1.20.1: version "1.20.1" resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.1.tgz#b1812a8912c195cd371a3ee5e66faa2338a5c668" @@ -717,7 +995,12 @@ bson@^5.2.0: resolved "https://registry.yarnpkg.com/bson/-/bson-5.2.0.tgz#c81d35dd30e2798203e5422a639780ea98dd25ba" integrity sha512-HevkSpDbpUfsrHWmWiAsNavANKYIErV2ePXllp1bwq5CDreAaFVj6RVlZpJnxK4WWDCJ/5jMUpaY6G526q3Hjg== -buffer@^5.5.0: +buffer-equal@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/buffer-equal/-/buffer-equal-0.0.1.tgz#91bc74b11ea405bc916bc6aa908faafa5b4aac4b" + integrity sha512-RgSV6InVQ9ODPdLWJ5UAqBqJBOg370Nz6ZQtRzpt6nUjc8v0St97uJ4PYC6NztqIScrAXafKM3mZPMygSe1ggA== + +buffer@^5.2.0, buffer@^5.5.0: version "5.7.1" resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== @@ -1027,6 +1310,11 @@ doctrine@^3.0.0: dependencies: esutils "^2.0.2" +dom-walk@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.2.tgz#0c548bef048f4d1f2a97249002236060daa3fd84" + integrity sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w== + dotenv@^16.0.3: version "16.0.3" resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.0.3.tgz#115aec42bac5053db3c456db30cc243a5a836a07" @@ -1326,6 +1614,11 @@ event-target-shim@^5.0.0: resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== +exif-parser@^0.1.12: + version "0.1.12" + resolved "https://registry.yarnpkg.com/exif-parser/-/exif-parser-0.1.12.tgz#58a9d2d72c02c1f6f02a0ef4a9166272b7760922" + integrity sha512-c2bQfLNbMzLPmzQuOr8fy0csy84WmwnER81W88DzTp9CYNPJ6yzOj2EZAh9pywYpqHnshVLHQJ8WzldAyfY+Iw== + express@^4.18.2: version "4.18.2" resolved "https://registry.yarnpkg.com/express/-/express-4.18.2.tgz#3fabe08296e930c796c19e3c516979386ba9fd59" @@ -1413,6 +1706,15 @@ file-entry-cache@^6.0.1: dependencies: flat-cache "^3.0.4" +file-type@^16.5.4: + version "16.5.4" + resolved "https://registry.yarnpkg.com/file-type/-/file-type-16.5.4.tgz#474fb4f704bee427681f98dd390058a172a6c2fd" + integrity sha512-/yFHK0aGjFEgDJjEKP0pWCplsPFPhwyfwevf/pVxiN0tmE4L9LmwWxWukdJSHdoCli4VgQLehjJtwQBnqmsKcw== + dependencies: + readable-web-to-node-stream "^3.0.0" + strtok3 "^6.2.4" + token-types "^4.1.1" + fill-range@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" @@ -1550,6 +1852,14 @@ get-symbol-description@^1.0.0: call-bind "^1.0.2" get-intrinsic "^1.1.1" +gifwrap@^0.9.2: + version "0.9.4" + resolved "https://registry.yarnpkg.com/gifwrap/-/gifwrap-0.9.4.tgz#f4eb6169ba027d61df64aafbdcb1f8ae58ccc0c5" + integrity sha512-MDMwbhASQuVeD4JKd1fKgNgCRL3fGqMM4WaqpNhWO0JiMOAjbQdumbs4BbBZEy9/M00EHEjKN3HieVhCUlwjeQ== + dependencies: + image-q "^4.0.0" + omggif "^1.0.10" + glob-parent@^5.1.2, glob-parent@~5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" @@ -1576,6 +1886,14 @@ glob@^7.0.5, glob@^7.1.3: once "^1.3.0" path-is-absolute "^1.0.0" +global@~4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/global/-/global-4.4.0.tgz#3e7b105179006a323ed71aafca3e9c57a5cc6406" + integrity sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w== + dependencies: + min-document "^2.19.0" + process "^0.11.10" + globals@^13.19.0: version "13.20.0" resolved "https://registry.yarnpkg.com/globals/-/globals-13.20.0.tgz#ea276a1e508ffd4f1612888f9d1bad1e2717bf82" @@ -1693,7 +2011,7 @@ iconv-lite@0.4.24: dependencies: safer-buffer ">= 2.1.2 < 3" -ieee754@^1.1.13: +ieee754@^1.1.13, ieee754@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== @@ -1708,6 +2026,13 @@ ignore@^5.2.0: resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== +image-q@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/image-q/-/image-q-4.0.0.tgz#31e075be7bae3c1f42a85c469b4732c358981776" + integrity sha512-PfJGVgIfKQJuq3s0tTDOKtztksibuUEbJQIYT3by6wctQo+Rdlh7ef4evJ5NCdxY4CfMbvFkocEwbl4BF8RlJw== + dependencies: + "@types/node" "16.9.1" + import-fresh@^3.0.0, import-fresh@^3.2.1: version "3.3.0" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" @@ -1818,6 +2143,11 @@ is-fullwidth-code-point@^3.0.0: resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== +is-function@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-function/-/is-function-1.0.2.tgz#4f097f30abf6efadac9833b17ca5dc03f8144e08" + integrity sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ== + is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: version "4.0.3" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" @@ -1924,6 +2254,29 @@ isexe@^2.0.0: resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== +isomorphic-fetch@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-3.0.0.tgz#0267b005049046d2421207215d45d6a262b8b8b4" + integrity sha512-qvUtwJ3j6qwsF3jLxkZ72qCgjMysPzDfeV240JHiGZsANBYd+EEuu35v7dfrJ9Up0Ak07D7GGSkGhCHTqg/5wA== + dependencies: + node-fetch "^2.6.1" + whatwg-fetch "^3.4.1" + +jimp@^0.22.8: + version "0.22.8" + resolved "https://registry.yarnpkg.com/jimp/-/jimp-0.22.8.tgz#85db9a2de69370c36d8b5ae070381af83dbbb40f" + integrity sha512-pBbrooJMX7795sDcxx1XpwNZC8B/ITyDV+JK2/1qNbQl/1UWqWeh5Dq7qQpMZl5jLdcFDv5IVTM+OhpafSqSFA== + dependencies: + "@jimp/custom" "^0.22.8" + "@jimp/plugins" "^0.22.8" + "@jimp/types" "^0.22.8" + regenerator-runtime "^0.13.3" + +jpeg-js@^0.4.4: + version "0.4.4" + resolved "https://registry.yarnpkg.com/jpeg-js/-/jpeg-js-0.4.4.tgz#a9f1c6f1f9f0fa80cdb3484ed9635054d28936aa" + integrity sha512-WZzeDOEtTOBK4Mdsar0IqEU5sMr3vSV2RqkAIzUEV2BHnUfKGyswWFPFwK5EeDo93K3FohSHbLAjj0s1Wzd+dg== + js-sdsl@^4.1.4: version "4.4.0" resolved "https://registry.yarnpkg.com/js-sdsl/-/js-sdsl-4.4.0.tgz#8b437dbe642daa95760400b602378ed8ffea8430" @@ -1976,6 +2329,20 @@ levn@^0.4.1: prelude-ls "^1.2.1" type-check "~0.4.0" +load-bmfont@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/load-bmfont/-/load-bmfont-1.4.1.tgz#c0f5f4711a1e2ccff725a7b6078087ccfcddd3e9" + integrity sha512-8UyQoYmdRDy81Brz6aLAUhfZLwr5zV0L3taTQ4hju7m6biuwiWiJXjPhBJxbUQJA8PrkvJ/7Enqmwk2sM14soA== + dependencies: + buffer-equal "0.0.1" + mime "^1.3.4" + parse-bmfont-ascii "^1.0.3" + parse-bmfont-binary "^1.0.5" + parse-bmfont-xml "^1.1.4" + phin "^2.9.1" + xhr "^2.0.1" + xtend "^4.0.0" + locate-path@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" @@ -2065,7 +2432,7 @@ mime-types@^2.1.12, mime-types@~2.1.24, mime-types@~2.1.34: dependencies: mime-db "1.52.0" -mime@1.6.0: +mime@1.6.0, mime@^1.3.4: version "1.6.0" resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== @@ -2075,6 +2442,13 @@ mimic-fn@^2.1.0: resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== +min-document@^2.19.0: + version "2.19.0" + resolved "https://registry.yarnpkg.com/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685" + integrity sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ== + dependencies: + dom-walk "^0.1.0" + minimatch@^3.0.3, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" @@ -2092,6 +2466,11 @@ mkdirp@^1.0.4: resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== +mkdirp@^2.1.3: + version "2.1.6" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-2.1.6.tgz#964fbcb12b2d8c5d6fbc62a963ac95a273e2cc19" + integrity sha512-+hEnITedc8LAtIP9u3HJDFIdcLV2vXP33sqLLIzkv1Db1zO/1OxbvYf0Y1OC/S/Qo5dxHXepofhmxL02PsKe+A== + mongodb-connection-string-url@^2.6.0: version "2.6.0" resolved "https://registry.yarnpkg.com/mongodb-connection-string-url/-/mongodb-connection-string-url-2.6.0.tgz#57901bf352372abdde812c81be47b75c6b2ec5cf" @@ -2191,7 +2570,7 @@ node-cache@^5.1.2: dependencies: clone "2.x" -node-fetch@^2.6.6: +node-fetch@^2.6.1, node-fetch@^2.6.6: version "2.6.11" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.11.tgz#cde7fc71deef3131ef80a738919f999e6edfff25" integrity sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w== @@ -2286,6 +2665,11 @@ object.values@^1.1.6: define-properties "^1.1.4" es-abstract "^1.20.4" +omggif@^1.0.10, omggif@^1.0.9: + version "1.0.10" + resolved "https://registry.yarnpkg.com/omggif/-/omggif-1.0.10.tgz#ddaaf90d4a42f532e9e7cb3a95ecdd47f17c7b19" + integrity sha512-LMJTtvgc/nugXj0Vcrrs68Mn2D1r0zf630VNtqtpI1FEO7e+O9FP4gqs9AcnBaSEeoHIPm28u6qgPR0oyEpGSw== + on-finished@2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" @@ -2370,6 +2754,11 @@ p-locate@^5.0.0: dependencies: p-limit "^3.0.2" +pako@^1.0.11: + version "1.0.11" + resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" + integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== + parent-module@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" @@ -2377,6 +2766,29 @@ parent-module@^1.0.0: dependencies: callsites "^3.0.0" +parse-bmfont-ascii@^1.0.3: + version "1.0.6" + resolved "https://registry.yarnpkg.com/parse-bmfont-ascii/-/parse-bmfont-ascii-1.0.6.tgz#11ac3c3ff58f7c2020ab22769079108d4dfa0285" + integrity sha512-U4RrVsUFCleIOBsIGYOMKjn9PavsGOXxbvYGtMOEfnId0SVNsgehXh1DxUdVPLoxd5mvcEtvmKs2Mmf0Mpa1ZA== + +parse-bmfont-binary@^1.0.5: + version "1.0.6" + resolved "https://registry.yarnpkg.com/parse-bmfont-binary/-/parse-bmfont-binary-1.0.6.tgz#d038b476d3e9dd9db1e11a0b0e53a22792b69006" + integrity sha512-GxmsRea0wdGdYthjuUeWTMWPqm2+FAd4GI8vCvhgJsFnoGhTrLhXDDupwTo7rXVAgaLIGoVHDZS9p/5XbSqeWA== + +parse-bmfont-xml@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/parse-bmfont-xml/-/parse-bmfont-xml-1.1.4.tgz#015319797e3e12f9e739c4d513872cd2fa35f389" + integrity sha512-bjnliEOmGv3y1aMEfREMBJ9tfL3WR0i0CKPj61DnSLaoxWR3nLrsQrEbCId/8rF4NyRF0cCqisSVXyQYWM+mCQ== + dependencies: + xml-parse-from-string "^1.0.0" + xml2js "^0.4.5" + +parse-headers@^2.0.0: + version "2.0.5" + resolved "https://registry.yarnpkg.com/parse-headers/-/parse-headers-2.0.5.tgz#069793f9356a54008571eb7f9761153e6c770da9" + integrity sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA== + parseurl@~1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" @@ -2412,11 +2824,28 @@ path-type@^4.0.0: resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== +peek-readable@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/peek-readable/-/peek-readable-4.1.0.tgz#4ece1111bf5c2ad8867c314c81356847e8a62e72" + integrity sha512-ZI3LnwUv5nOGbQzD9c2iDG6toheuXSZP5esSHBjopsXH4dg19soufvpUGA3uohi5anFtGb2lhAVdHzH6R/Evvg== + +phin@^2.9.1: + version "2.9.3" + resolved "https://registry.yarnpkg.com/phin/-/phin-2.9.3.tgz#f9b6ac10a035636fb65dfc576aaaa17b8743125c" + integrity sha512-CzFr90qM24ju5f88quFC/6qohjC144rehe5n6DH900lgXmUe86+xCKc10ev56gRKC4/BkHUoG4uSiQgBiIXwDA== + picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== +pixelmatch@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/pixelmatch/-/pixelmatch-4.0.2.tgz#8f47dcec5011b477b67db03c243bc1f3085e8854" + integrity sha512-J8B6xqiO37sU/gkcMglv6h5Jbd9xNER7aHzpfRdNmV4IbQBzBpe4l9XmbG+xPF/znacgu2jfEw+wHffaq/YkXA== + dependencies: + pngjs "^3.0.0" + plimit-lit@^1.2.6: version "1.5.0" resolved "https://registry.yarnpkg.com/plimit-lit/-/plimit-lit-1.5.0.tgz#f66df8a7041de1e965c4f1c0697ab486968a92a5" @@ -2424,6 +2853,16 @@ plimit-lit@^1.2.6: dependencies: queue-lit "^1.5.0" +pngjs@^3.0.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/pngjs/-/pngjs-3.4.0.tgz#99ca7d725965fb655814eaf65f38f12bbdbf555f" + integrity sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w== + +pngjs@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/pngjs/-/pngjs-6.0.0.tgz#ca9e5d2aa48db0228a52c419c3308e87720da821" + integrity sha512-TRzzuFRRmEoSW/p1KVAmiOgPco2Irlah+bGFCeNfJXxxYGwSw7YwAOAcd7X28K/m5bjBWKsC29KyoMfHbypayg== + prelude-ls@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" @@ -2446,6 +2885,11 @@ process-nextick-args@~2.0.0: resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== +process@^0.11.10: + version "0.11.10" + resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" + integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== + proxy-addr@~2.0.7: version "2.0.7" resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" @@ -2533,6 +2977,13 @@ readable-stream@~1.0.31: isarray "0.0.1" string_decoder "~0.10.x" +readable-web-to-node-stream@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.2.tgz#5d52bb5df7b54861fd48d015e93a2cb87b3ee0bb" + integrity sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw== + dependencies: + readable-stream "^3.6.0" + readdirp@~3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" @@ -2540,6 +2991,11 @@ readdirp@~3.6.0: dependencies: picomatch "^2.2.1" +regenerator-runtime@^0.13.3: + version "0.13.11" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9" + integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== + regexp.prototype.flags@^1.4.3: version "1.5.0" resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz#fe7ce25e7e4cca8db37b6634c8a2c7009199b9cb" @@ -2636,6 +3092,11 @@ saslprep@^1.0.0, saslprep@^1.0.3: dependencies: sparse-bitfield "^3.0.3" +sax@>=0.6.0: + version "1.2.4" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" + integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== + semver@^5.7.1: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" @@ -2844,6 +3305,14 @@ strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== +strtok3@^6.2.4: + version "6.3.0" + resolved "https://registry.yarnpkg.com/strtok3/-/strtok3-6.3.0.tgz#358b80ffe6d5d5620e19a073aa78ce947a90f9a0" + integrity sha512-fZtbhtvI9I48xDSywd/somNqgUHl2L2cstmXCCif0itOf96jeW18MBSyrLuNicYQVkvpOxkZtkzujiTJ9LW5Jw== + dependencies: + "@tokenizer/token" "^0.3.0" + peek-readable "^4.1.0" + supports-color@^5.5.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" @@ -2881,6 +3350,16 @@ through2@^2.0.1: readable-stream "~2.3.6" xtend "~4.0.1" +timm@^1.6.1: + version "1.7.1" + resolved "https://registry.yarnpkg.com/timm/-/timm-1.7.1.tgz#96bab60c7d45b5a10a8a4d0f0117c6b7e5aff76f" + integrity sha512-IjZc9KIotudix8bMaBW6QvMuq64BrJWFs1+4V0lXwWGQZwH+LnX87doAYhem4caOEusRP9/g6jVDQmZ8XOk1nw== + +tinycolor2@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/tinycolor2/-/tinycolor2-1.6.0.tgz#f98007460169b0263b97072c5ae92484ce02d09e" + integrity sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw== + to-regex-range@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" @@ -2893,6 +3372,14 @@ toidentifier@1.0.1: resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== +token-types@^4.1.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/token-types/-/token-types-4.2.1.tgz#0f897f03665846982806e138977dbe72d44df753" + integrity sha512-6udB24Q737UD/SDsKAHI9FCRP7Bqc9D/MQUV02ORQg5iskjtLJlZJNdN4kKtcdtwCeWIwIHDGaUsTsCCAa8sFQ== + dependencies: + "@tokenizer/token" "^0.3.0" + ieee754 "^1.2.1" + touch@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/touch/-/touch-3.1.0.tgz#fe365f5f75ec9ed4e56825e0bb76d24ab74af83b" @@ -3045,6 +3532,13 @@ uri-js@^4.2.2: dependencies: punycode "^2.1.0" +utif2@^4.0.1: + version "4.1.0" + resolved "https://registry.yarnpkg.com/utif2/-/utif2-4.1.0.tgz#e768d37bd619b995d56d9780b5d2b4611a3d932b" + integrity sha512-+oknB9FHrJ7oW7A2WZYajOcv4FcDR4CfoGB0dPNfxbi4GO05RRnFmt5oa23+9w32EanrYcSJWspUiJkLMs+37w== + dependencies: + pako "^1.0.11" + util-deprecate@^1.0.1, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" @@ -3082,6 +3576,11 @@ webidl-conversions@^7.0.0: resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-7.0.0.tgz#256b4e1882be7debbf01d05f0aa2039778ea080a" integrity sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g== +whatwg-fetch@^3.4.1: + version "3.6.2" + resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz#dced24f37f2624ed0281725d51d0e2e3fe677f8c" + integrity sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA== + whatwg-url@^11.0.0: version "11.0.0" resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-11.0.0.tgz#0a849eebb5faf2119b901bb76fd795c2848d4018" @@ -3188,7 +3687,35 @@ wrappy@1: resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== -xtend@~4.0.1: +xhr@^2.0.1: + version "2.6.0" + resolved "https://registry.yarnpkg.com/xhr/-/xhr-2.6.0.tgz#b69d4395e792b4173d6b7df077f0fc5e4e2b249d" + integrity sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA== + dependencies: + global "~4.4.0" + is-function "^1.0.1" + parse-headers "^2.0.0" + xtend "^4.0.0" + +xml-parse-from-string@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/xml-parse-from-string/-/xml-parse-from-string-1.0.1.tgz#a9029e929d3dbcded169f3c6e28238d95a5d5a28" + integrity sha512-ErcKwJTF54uRzzNMXq2X5sMIy88zJvfN2DmdoQvy7PAFJ+tPRU6ydWuOKNMyfmOjdyBQTFREi60s0Y0SyI0G0g== + +xml2js@^0.4.5: + version "0.4.23" + resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.23.tgz#a0c69516752421eb2ac758ee4d4ccf58843eac66" + integrity sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug== + dependencies: + sax ">=0.6.0" + xmlbuilder "~11.0.0" + +xmlbuilder@~11.0.0: + version "11.0.1" + resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-11.0.1.tgz#be9bae1c8a046e76b31127726347d0ad7002beb3" + integrity sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA== + +xtend@^4.0.0, xtend@~4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==