From 7e0cb7a138695a362acc3a1899dea01ac9f9ab8f Mon Sep 17 00:00:00 2001 From: jerrycool123 Date: Sat, 24 Feb 2024 05:06:11 +0800 Subject: [PATCH] feat: universal logger, declarationMap --- .eslintignore | 2 + .github/workflows/ci.yml | 34 + .../workflows/deploy-sls-check-membership.yml | 15 +- .github/workflows/deploy-sls-ocr.yml | 12 +- .gitignore | 6 +- .vscode/settings.json | 2 +- apps/server/.env.example | 1 + apps/server/package.json | 1 + apps/server/src/commands/add-member.ts | 3 +- apps/server/src/commands/delete-member.ts | 3 +- apps/server/src/commands/delete-role.ts | 3 +- apps/server/src/commands/verify.ts | 35 +- .../interaction-handlers/membership-accept.ts | 3 +- .../interaction-handlers/membership-reject.ts | 3 +- apps/server/src/services/ocr/constants.ts | 44 - apps/server/src/services/ocr/index.ts | 91 - .../src/services/ocr/parsers/chi_sim.ts | 16 - .../src/services/ocr/parsers/chi_tra.ts | 16 - apps/server/src/services/ocr/parsers/jpn.ts | 16 - apps/server/src/services/ocr/types.ts | 15 - apps/server/src/utils/env.ts | 1 + apps/server/src/utils/logger.ts | 5 + apps/sls-check-membership/.env.example | 3 +- apps/sls-check-membership/package.json | 6 +- apps/sls-check-membership/serverless.yml | 7 + .../src/api/check-auth-membership.ts | 45 +- .../src/api/check-screenshot-membership.ts | 31 +- apps/sls-check-membership/src/utils/env.ts | 25 +- apps/sls-check-membership/src/utils/logger.ts | 32 +- .../src/utils/mongoose.ts | 5 +- apps/sls-check-membership/src/utils/sleep.ts | 1 + apps/sls-ocr/.env.example | 1 + apps/sls-ocr/.gitignore | 3 +- apps/sls-ocr/package.json | 12 +- apps/sls-ocr/serverless.yml | 17 +- apps/sls-ocr/src/index.ts | 35 +- apps/sls-ocr/src/middleware.ts | 11 - apps/sls-ocr/src/utils/auth.ts | 7 + apps/sls-ocr/src/utils/env.ts | 13 +- apps/sls-ocr/src/utils/logger.ts | 9 + apps/sls-ocr/src/utils/schemas.ts | 19 +- apps/web/.env.example | 1 + apps/web/app/api/heartbeat/route.ts | 5 + apps/web/app/layout.tsx | 2 + apps/web/components/Modals/ApplyModal.tsx | 41 +- apps/web/contexts/MainContext.tsx | 5 +- .../libs/server/actions/connect-youtube.ts | 11 +- .../web/libs/server/actions/delete-account.ts | 8 +- .../web/libs/server/actions/revoke-youtube.ts | 8 +- .../server/actions/verify-auth-membership.ts | 33 +- apps/web/libs/server/logger.ts | 6 + apps/web/libs/server/private-env.ts | 2 + apps/web/package.json | 14 +- package.json | 8 +- packages/common/package.json | 8 +- packages/common/src/components/embeds.ts | 2 +- packages/common/src/services/app-event-log.ts | 6 +- packages/common/src/services/index.ts | 1 + packages/common/src/services/membership.ts | 16 +- packages/common/src/services/system-log.ts | 106 + .../common/src/services/youtube-oauth-api.ts | 16 +- packages/common/src/types/common.ts | 6 - packages/common/src/utils/crypto.ts | 21 +- packages/common/src/utils/queue.ts | 12 +- packages/common/tsc-tsconfig.json | 10 + packages/common/tsconfig.json | 2 +- packages/common/tsup.config.ts | 7 + packages/ocr-service/.eslintignore | 1 + packages/ocr-service/.eslintrc.json | 11 + packages/ocr-service/.prettierrc | 1 + packages/ocr-service/jest.config.mjs | 17 + packages/ocr-service/package.json | 32 + packages/ocr-service/src/definitions.ts | 13 + packages/ocr-service/src/index.ts | 114 + packages/ocr-service/src/parsers.ts | 43 + packages/ocr-service/src/parsers/chi_sim.ts | 17 + packages/ocr-service/src/parsers/chi_tra.ts | 17 + .../ocr-service/src}/parsers/deu.ts | 11 +- .../ocr-service/src}/parsers/eng.ts | 11 +- .../ocr-service/src}/parsers/fil.ts | 11 +- .../ocr-service/src}/parsers/ind.ts | 11 +- packages/ocr-service/src/parsers/index.ts | 11 + packages/ocr-service/src/parsers/jpn.ts | 17 + .../ocr-service/src}/parsers/kor.ts | 11 +- .../ocr-service/src}/parsers/msa.ts | 11 +- .../ocr-service/src}/parsers/tha.ts | 11 +- .../ocr-service/src}/parsers/vie.ts | 11 +- packages/ocr-service/tests/ocr.test.ts | 170 + packages/ocr-service/tsc-tsconfig.json | 10 + packages/ocr-service/tsconfig.json | 4 + packages/ocr-service/tsup.config.ts | 7 + .../.eslintignore | 2 + .../.eslintrc.json | 3 + .../.prettierrc | 1 + .../index.d.ts | 38 + .../index.mjs | 124 + .../package.json | 20 + pnpm-lock.yaml | 3485 ++++++++++++----- turbo.json | 15 +- 99 files changed, 3681 insertions(+), 1546 deletions(-) create mode 100644 .github/workflows/ci.yml delete mode 100644 apps/server/src/services/ocr/constants.ts delete mode 100644 apps/server/src/services/ocr/index.ts delete mode 100644 apps/server/src/services/ocr/parsers/chi_sim.ts delete mode 100644 apps/server/src/services/ocr/parsers/chi_tra.ts delete mode 100644 apps/server/src/services/ocr/parsers/jpn.ts delete mode 100644 apps/server/src/services/ocr/types.ts create mode 100644 apps/server/src/utils/logger.ts create mode 100644 apps/sls-check-membership/src/utils/sleep.ts delete mode 100644 apps/sls-ocr/src/middleware.ts create mode 100644 apps/sls-ocr/src/utils/auth.ts create mode 100644 apps/sls-ocr/src/utils/logger.ts create mode 100644 apps/web/app/api/heartbeat/route.ts create mode 100644 apps/web/libs/server/logger.ts create mode 100644 packages/common/src/services/system-log.ts create mode 100644 packages/common/tsc-tsconfig.json create mode 100644 packages/common/tsup.config.ts create mode 100644 packages/ocr-service/.eslintignore create mode 100644 packages/ocr-service/.eslintrc.json create mode 100644 packages/ocr-service/.prettierrc create mode 100644 packages/ocr-service/jest.config.mjs create mode 100644 packages/ocr-service/package.json create mode 100644 packages/ocr-service/src/definitions.ts create mode 100644 packages/ocr-service/src/index.ts create mode 100644 packages/ocr-service/src/parsers.ts create mode 100644 packages/ocr-service/src/parsers/chi_sim.ts create mode 100644 packages/ocr-service/src/parsers/chi_tra.ts rename {apps/server/src/services/ocr => packages/ocr-service/src}/parsers/deu.ts (50%) rename {apps/server/src/services/ocr => packages/ocr-service/src}/parsers/eng.ts (70%) rename {apps/server/src/services/ocr => packages/ocr-service/src}/parsers/fil.ts (70%) rename {apps/server/src/services/ocr => packages/ocr-service/src}/parsers/ind.ts (70%) create mode 100644 packages/ocr-service/src/parsers/index.ts create mode 100644 packages/ocr-service/src/parsers/jpn.ts rename {apps/server/src/services/ocr => packages/ocr-service/src}/parsers/kor.ts (50%) rename {apps/server/src/services/ocr => packages/ocr-service/src}/parsers/msa.ts (70%) rename {apps/server/src/services/ocr => packages/ocr-service/src}/parsers/tha.ts (75%) rename {apps/server/src/services/ocr => packages/ocr-service/src}/parsers/vie.ts (50%) create mode 100644 packages/ocr-service/tests/ocr.test.ts create mode 100644 packages/ocr-service/tsc-tsconfig.json create mode 100644 packages/ocr-service/tsconfig.json create mode 100644 packages/ocr-service/tsup.config.ts create mode 100644 packages/serverless-offline-lambda-function-urls/.eslintignore create mode 100644 packages/serverless-offline-lambda-function-urls/.eslintrc.json create mode 100644 packages/serverless-offline-lambda-function-urls/.prettierrc create mode 100644 packages/serverless-offline-lambda-function-urls/index.d.ts create mode 100644 packages/serverless-offline-lambda-function-urls/index.mjs create mode 100644 packages/serverless-offline-lambda-function-urls/package.json diff --git a/.eslintignore b/.eslintignore index 7773828..cce89bb 100644 --- a/.eslintignore +++ b/.eslintignore @@ -1 +1,3 @@ +*.js +*.mjs dist/ \ No newline at end of file diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..203fc91 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,34 @@ +name: Run tests + +on: + push: + branches: + - main + +jobs: + deploy: + runs-on: ubuntu-latest + env: + TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }} + TURBO_TEAM: ${{ vars.TURBO_TEAM }} + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Set up Node.js + uses: actions/setup-node@v4 + with: + node-version: '20' + + - uses: pnpm/action-setup@v2 + with: + version: 8 + + - name: Install dependencies + run: pnpm install + + - name: Load test environment variables + run: echo "${{ secrets.OCR_SERVICE_TEST_ENV }}" | base64 --decode >> ./packages/ocr-service/.env.test + + - name: Run tests + run: pnpm run test diff --git a/.github/workflows/deploy-sls-check-membership.yml b/.github/workflows/deploy-sls-check-membership.yml index 7d1d110..5d7cc8e 100644 --- a/.github/workflows/deploy-sls-check-membership.yml +++ b/.github/workflows/deploy-sls-check-membership.yml @@ -1,13 +1,17 @@ name: Deploy sls-check-membership to AWS Lambda on: - push: - branches: - - main + workflow_run: + workflows: ['Run tests'] + types: + - completed jobs: deploy: runs-on: ubuntu-latest + env: + TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }} + TURBO_TEAM: ${{ vars.TURBO_TEAM }} steps: - name: Checkout repository uses: actions/checkout@v4 @@ -24,9 +28,6 @@ jobs: - name: Install dependencies run: pnpm install - - name: Build @divine-bridge/common - run: pnpm -F @divine-bridge/common run build - - name: Load environment variables run: echo "${{ secrets.SLS_CHECK_MEMBERSHIP_ENV }}" | base64 --decode >> ./apps/sls-check-membership/.env.production.local @@ -35,4 +36,4 @@ jobs: AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} AWS_REGION: 'us-east-1' - run: pnpm -F sls-check-membership run deploy + run: pnpm run deploy:sls-check-membership diff --git a/.github/workflows/deploy-sls-ocr.yml b/.github/workflows/deploy-sls-ocr.yml index 548168e..2a63e8f 100644 --- a/.github/workflows/deploy-sls-ocr.yml +++ b/.github/workflows/deploy-sls-ocr.yml @@ -1,13 +1,17 @@ name: Deploy sls-ocr to AWS Lambda on: - push: - branches: - - main + workflow_run: + workflows: ['Run tests'] + types: + - completed jobs: deploy: runs-on: ubuntu-latest + env: + TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }} + TURBO_TEAM: ${{ vars.TURBO_TEAM }} steps: - name: Checkout repository uses: actions/checkout@v4 @@ -32,4 +36,4 @@ jobs: AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} AWS_REGION: 'us-east-1' - run: pnpm -F sls-ocr run deploy + run: pnpm run deploy:sls-ocr diff --git a/.gitignore b/.gitignore index d6ce625..e194d14 100644 --- a/.gitignore +++ b/.gitignore @@ -8,6 +8,10 @@ node_modules/ .env.production .env.bak .env.*.local +.env.test .serverless/ .aws.env -.DS_Store \ No newline at end of file +.DS_Store + +# vercel +.vercel \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json index 90436e6..fa9f0f8 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,6 +1,6 @@ { "files.exclude": { - "**/node_modules": true, + // "**/node_modules": true, "**/.turbo": true, "**/.next": true }, diff --git a/apps/server/.env.example b/apps/server/.env.example index af629de..21a85e9 100644 --- a/apps/server/.env.example +++ b/apps/server/.env.example @@ -8,3 +8,4 @@ GOOGLE_API_KEY= OCR_API_ENDPOINT= OCR_API_KEY= DATA_ENCRYPTION_KEY= +LOGGER_URI= \ No newline at end of file diff --git a/apps/server/package.json b/apps/server/package.json index f41bbe3..99baf60 100644 --- a/apps/server/package.json +++ b/apps/server/package.json @@ -6,6 +6,7 @@ "@discordjs/core": "^1.1.1", "@discordjs/rest": "^2.2.0", "@divine-bridge/common": "workspace:^", + "@divine-bridge/ocr-service": "workspace:^", "@panva/hkdf": "^1.1.1", "@sapphire/framework": "^5.0.7", "@sapphire/plugin-api": "^6.1.1", diff --git a/apps/server/src/commands/add-member.ts b/apps/server/src/commands/add-member.ts index adfa402..30ea0ae 100644 --- a/apps/server/src/commands/add-member.ts +++ b/apps/server/src/commands/add-member.ts @@ -8,6 +8,7 @@ import { PermissionFlagsBits, RepliableInteraction } from 'discord.js'; import { discordBotApi } from '../utils/discord.js'; import { Utils } from '../utils/index.js'; +import { logger } from '../utils/logger.js'; import { Validators } from '../utils/validators.js'; dayjs.extend(utc); @@ -150,7 +151,7 @@ export class AddMemberCommand extends Command { await confirmedInteraction.deferReply({ ephemeral: true }); // Initialize log service and membership service - const appEventLogService = await new AppEventLogService(discordBotApi, guild.id).init(); + const appEventLogService = await new AppEventLogService(logger, discordBotApi, guild.id).init(); const membershipService = new MembershipService(discordBotApi, appEventLogService); // Add membership to user diff --git a/apps/server/src/commands/delete-member.ts b/apps/server/src/commands/delete-member.ts index 32f9662..bf56f5c 100644 --- a/apps/server/src/commands/delete-member.ts +++ b/apps/server/src/commands/delete-member.ts @@ -7,6 +7,7 @@ import { PermissionFlagsBits } from 'discord.js'; import { discordBotApi } from '../utils/discord.js'; import { Utils } from '../utils/index.js'; +import { logger } from '../utils/logger.js'; import { Validators } from '../utils/validators.js'; dayjs.extend(utc); @@ -94,7 +95,7 @@ export class DeleteMemberCommand extends Command { await confirmedInteraction.deferReply({ ephemeral: true }); // Initialize log service and membership service - const appEventLogService = await new AppEventLogService(discordBotApi, guild.id).init(); + const appEventLogService = await new AppEventLogService(logger, discordBotApi, guild.id).init(); const membershipService = new MembershipService(discordBotApi, appEventLogService); // Remove membership from user diff --git a/apps/server/src/commands/delete-role.ts b/apps/server/src/commands/delete-role.ts index a77d183..d65dc52 100644 --- a/apps/server/src/commands/delete-role.ts +++ b/apps/server/src/commands/delete-role.ts @@ -4,6 +4,7 @@ import { PermissionFlagsBits } from 'discord.js'; import { discordBotApi } from '../utils/discord.js'; import { Utils } from '../utils/index.js'; +import { logger } from '../utils/logger.js'; import { Validators } from '../utils/validators.js'; export class DeleteRoleCommand extends Command { @@ -87,7 +88,7 @@ export class DeleteRoleCommand extends Command { } // Initialize log service and membership service - const appEventLogService = await new AppEventLogService(discordBotApi, guild.id).init(); + const appEventLogService = await new AppEventLogService(logger, discordBotApi, guild.id).init(); const membershipService = new MembershipService(discordBotApi, appEventLogService); // Remove membership role from DB diff --git a/apps/server/src/commands/verify.ts b/apps/server/src/commands/verify.ts index dc4166e..d469361 100644 --- a/apps/server/src/commands/verify.ts +++ b/apps/server/src/commands/verify.ts @@ -8,11 +8,11 @@ import { MembershipRoleDoc, YouTubeChannelDoc, } from '@divine-bridge/common'; +import { OCRService, supportedOCRLanguages } from '@divine-bridge/ocr-service'; import { Command } from '@sapphire/framework'; import { Attachment, Guild, RepliableInteraction } from 'discord.js'; -import { OCRConstants } from '../services/ocr/constants.js'; -import { OCRService } from '../services/ocr/index.js'; +import { Env } from '../utils/env.js'; import { Utils } from '../utils/index.js'; import { Validators } from '../utils/validators.js'; @@ -38,8 +38,8 @@ export class VerifyCommand extends Command { .setName('language') .setDescription('The language of the text in your picture') .addChoices( - ...OCRConstants.supportedLanguages.map(({ name, code }) => ({ - name, + ...supportedOCRLanguages.map(({ language, code }) => ({ + name: language, value: code, })), ) @@ -70,8 +70,8 @@ export class VerifyCommand extends Command { .setName('language') .setDescription('The language of the text in your picture') .addChoices( - ...OCRConstants.supportedLanguages.map(({ name, code }) => ({ - name, + ...supportedOCRLanguages.map(({ language, code }) => ({ + name: language, value: code, })), ) @@ -199,14 +199,14 @@ export class VerifyCommand extends Command { const logChannel = logChannelResult.data; // Get language - let selectedLanguage: (typeof OCRConstants.supportedLanguages)[number]; + let selectedLanguage: (typeof supportedOCRLanguages)[number]; if (langCode === null) { - selectedLanguage = OCRConstants.supportedLanguages.find( + selectedLanguage = supportedOCRLanguages.find( ({ code }) => code === userDoc.preference.language, - ) ?? { name: 'English', code: 'eng' }; + ) ?? { language: 'English', code: 'eng' }; } else { - selectedLanguage = OCRConstants.supportedLanguages.find(({ code }) => code === langCode) ?? { - name: 'English', + selectedLanguage = supportedOCRLanguages.find(({ code }) => code === langCode) ?? { + language: 'English', code: 'eng', }; } @@ -243,7 +243,7 @@ export class VerifyCommand extends Command { const screenshotSubmission = Embeds.screenshotSubmission( Utils.convertUser(user), membershipRoleDoc, - selectedLanguage.name, + selectedLanguage.language, guild.name, picture.url, ); @@ -254,17 +254,24 @@ export class VerifyCommand extends Command { // Send picture to membership service for OCR // ? Do not send error to user if OCR failed due to errors that are not related to the user try { - const recognizedDate = await OCRService.recognizeBillingDate( + const ocrService = new OCRService(Env.OCR_API_ENDPOINT, Env.OCR_API_KEY); + const recognizedResult = await ocrService.recognizeBillingDate( picture.url, selectedLanguage.code, ); + if (!recognizedResult.success) { + this.container.logger.error(recognizedResult.error); + } + const recognizedDate = recognizedResult.success + ? recognizedResult.date + : { year: null, month: null, day: null }; const adminActionRow = ActionRows.adminVerificationButton(); const membershipVerificationRequestEmbed = Embeds.membershipVerificationRequest( Utils.convertUser(user), recognizedDate, membershipRoleDoc._id, - selectedLanguage.name, + selectedLanguage.language, picture.url, ); diff --git a/apps/server/src/interaction-handlers/membership-accept.ts b/apps/server/src/interaction-handlers/membership-accept.ts index 7d00f62..ecd0725 100644 --- a/apps/server/src/interaction-handlers/membership-accept.ts +++ b/apps/server/src/interaction-handlers/membership-accept.ts @@ -10,6 +10,7 @@ import { type ButtonInteraction, EmbedBuilder } from 'discord.js'; import { Constants } from '../constants.js'; import { discordBotApi } from '../utils/discord.js'; import { Utils } from '../utils/index.js'; +import { logger } from '../utils/logger.js'; import { Validators } from '../utils/validators.js'; export class MembershipAcceptButtonHandler extends InteractionHandler { @@ -101,7 +102,7 @@ export class MembershipAcceptButtonHandler extends InteractionHandler { } = memberResult; // Initialize log service and membership service - const appEventLogService = await new AppEventLogService(discordBotApi, guild.id).init(); + const appEventLogService = await new AppEventLogService(logger, discordBotApi, guild.id).init(); const membershipService = new MembershipService(discordBotApi, appEventLogService); // Add membership to user diff --git a/apps/server/src/interaction-handlers/membership-reject.ts b/apps/server/src/interaction-handlers/membership-reject.ts index 7eb5926..a64f352 100644 --- a/apps/server/src/interaction-handlers/membership-reject.ts +++ b/apps/server/src/interaction-handlers/membership-reject.ts @@ -5,6 +5,7 @@ import { type ButtonInteraction, EmbedBuilder, ModalSubmitInteraction } from 'di import { Constants } from '../constants.js'; import { discordBotApi } from '../utils/discord.js'; import { Utils } from '../utils/index.js'; +import { logger } from '../utils/logger.js'; import { Validators } from '../utils/validators.js'; export class MembershipRejectButtonHandler extends InteractionHandler { @@ -90,7 +91,7 @@ export class MembershipRejectButtonHandler extends InteractionHandler { const reason = modalSubmitInteraction.fields.getTextInputValue(modalInputCustomId); // Initialize log service and membership service - const appEventLogService = await new AppEventLogService(discordBotApi, guild.id).init(); + const appEventLogService = await new AppEventLogService(logger, discordBotApi, guild.id).init(); const membershipService = new MembershipService(discordBotApi, appEventLogService); // Reject membership to user diff --git a/apps/server/src/services/ocr/constants.ts b/apps/server/src/services/ocr/constants.ts deleted file mode 100644 index bca12b4..0000000 --- a/apps/server/src/services/ocr/constants.ts +++ /dev/null @@ -1,44 +0,0 @@ -import { ChiSimBillingDateParser } from './parsers/chi_sim.js'; -import { ChiTraBillingDateParser } from './parsers/chi_tra.js'; -import { DeuBillingDateParser } from './parsers/deu.js'; -import { EngBillingDateParser } from './parsers/eng.js'; -import { FilBillingDateParser } from './parsers/fil.js'; -import { IndBillingDateParser } from './parsers/ind.js'; -import { JpnBillingDateParser } from './parsers/jpn.js'; -import { KorBillingDateParser } from './parsers/kor.js'; -import { MsaBillingDateParser } from './parsers/msa.js'; -import { ThaBillingDateParser } from './parsers/tha.js'; -import { VieBillingDateParser } from './parsers/vie.js'; -import { OCRTypes } from './types.js'; - -export namespace OCRConstants { - export const supportedLanguages = [ - { name: 'English', code: 'eng' }, - { name: 'Chinese - Traditional', code: 'chi_tra' }, - { name: 'Chinese - Simplified', code: 'chi_sim' }, - { name: 'German', code: 'deu' }, - { name: 'Filipino', code: 'fil' }, - { name: 'Indonesian', code: 'ind' }, - { name: 'Japanese', code: 'jpn' }, - { name: 'Korean', code: 'kor' }, - { name: 'Malay', code: 'msa' }, - { name: 'Thai', code: 'tha' }, - { name: 'Vietnamese', code: 'vie' }, - ] as const; - - export type TSupportedLangCode = (typeof supportedLanguages)[number]['code']; - - export const billingDateParsers: OCRTypes.BillingDateParser[] = [ - new EngBillingDateParser('eng'), - new ChiTraBillingDateParser('chi_tra'), - new ChiSimBillingDateParser('chi_sim'), - new DeuBillingDateParser('deu'), - new FilBillingDateParser('fil'), - new IndBillingDateParser('ind'), - new JpnBillingDateParser('jpn'), - new KorBillingDateParser('kor'), - new MsaBillingDateParser('msa'), - new ThaBillingDateParser('tha'), - new VieBillingDateParser('vie'), - ]; -} diff --git a/apps/server/src/services/ocr/index.ts b/apps/server/src/services/ocr/index.ts deleted file mode 100644 index 28f2615..0000000 --- a/apps/server/src/services/ocr/index.ts +++ /dev/null @@ -1,91 +0,0 @@ -import { container } from '@sapphire/framework'; -import axios from 'axios'; -import { z } from 'zod'; - -import { Env } from '../../utils/env.js'; -import { OCRConstants } from './constants.js'; -import { OCRTypes } from './types.js'; - -export namespace OCRService { - export const recognizeBillingDate = async ( - imageUrl: string, - langCode: OCRConstants.TSupportedLangCode, - ): Promise => { - const apiSchema = z.object({ - message: z.string(), - }); - try { - const { data } = await axios.post>( - `${Env.OCR_API_ENDPOINT}/api/ocr`, - { - image: imageUrl, - language: langCode, - }, - { - headers: { - Authorization: `Bearer ${Env.OCR_API_KEY}`, - }, - }, - ); - const parsedData = apiSchema.safeParse(data); - if (!parsedData.success) { - return OCRTypes.BillingDateParser.emptyDate; - } - const rawText = parsedData.data.message; - const parsedDateResult = parseDate(rawText, langCode); - if (parsedDateResult.success) { - return parsedDateResult.date; - } - } catch (error) { - container.logger.error(error); - } - return OCRTypes.BillingDateParser.emptyDate; - }; - - export const parseDate = ( - rawText: string, - langCode: OCRConstants.TSupportedLangCode, - ): - | { - success: false; - error: string; - } - | { - success: true; - date: OCRTypes.RecognizedDate; - } => { - let text = rawText; - - /** - * post-process raw text - */ - - // replace full-width characters with half-width characters - text = text.replace(/[\uff01-\uff5e]/g, (c) => String.fromCharCode(c.charCodeAt(0) - 0xfee0)); - // replace small form variant colon - text = text.replace(/\ufe55/g, ':'); - // replace enclosed alphanumeric characters with their corresponding numbers - text = text.replace(/[\u2460-\u2468]/g, (c) => String.fromCharCode(c.charCodeAt(0) - 0x245f)); - text = text.replace(/[\u2469-\u2473]/g, (c) => (c.charCodeAt(0) - 0x245f).toString()); - // replace spaces with empty string - const lines = text.split('\n').map((line) => line.replace(/\s/g, '')); - - /** - * i18n date parser - */ - - const parser = OCRConstants.billingDateParsers.find((p) => p.language === langCode); - if (parser === undefined) { - return { - success: false, - error: 'Unsupported language', - }; - } - const date = parser.parse(lines); - - return { - success: true, - date, - }; - }; -} diff --git a/apps/server/src/services/ocr/parsers/chi_sim.ts b/apps/server/src/services/ocr/parsers/chi_sim.ts deleted file mode 100644 index 2e3ffd1..0000000 --- a/apps/server/src/services/ocr/parsers/chi_sim.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { OCRTypes } from '../types.js'; - -export class ChiSimBillingDateParser implements OCRTypes.BillingDateParser { - constructor(public readonly language: 'chi_sim') {} - parse(lines: string[]): OCRTypes.RecognizedDate { - const regex = /结算日期:(\d{4})年(\d{1,2})月(\d{1,2})日/; - for (const line of lines) { - const match = line.match(regex); - if (match !== null) { - const [year, month, day] = match.slice(1, 4).map((s) => parseInt(s, 10)); - return { year, month, day }; - } - } - return OCRTypes.BillingDateParser.emptyDate; - } -} diff --git a/apps/server/src/services/ocr/parsers/chi_tra.ts b/apps/server/src/services/ocr/parsers/chi_tra.ts deleted file mode 100644 index 5a27f79..0000000 --- a/apps/server/src/services/ocr/parsers/chi_tra.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { OCRTypes } from '../types.js'; - -export class ChiTraBillingDateParser implements OCRTypes.BillingDateParser { - constructor(public readonly language: 'chi_tra') {} - parse(lines: string[]): OCRTypes.RecognizedDate { - const regex = /帳單日期:(\d{4})年(\d{1,2})月(\d{1,2})日/; - for (const line of lines) { - const match = line.match(regex); - if (match !== null) { - const [year, month, day] = match.slice(1, 4).map((s) => parseInt(s, 10)); - return { year, month, day }; - } - } - return OCRTypes.BillingDateParser.emptyDate; - } -} diff --git a/apps/server/src/services/ocr/parsers/jpn.ts b/apps/server/src/services/ocr/parsers/jpn.ts deleted file mode 100644 index 5281d50..0000000 --- a/apps/server/src/services/ocr/parsers/jpn.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { OCRTypes } from '../types.js'; - -export class JpnBillingDateParser implements OCRTypes.BillingDateParser { - constructor(public readonly language: 'jpn') {} - parse(lines: string[]): OCRTypes.RecognizedDate { - const regex = /次回請求日:(\d{4})\/(\d{2})\/(\d{2})/; - for (const line of lines) { - const match = line.match(regex); - if (match !== null) { - const [year, month, day] = match.slice(1, 4).map((s) => parseInt(s, 10)); - return { year, month, day }; - } - } - return OCRTypes.BillingDateParser.emptyDate; - } -} diff --git a/apps/server/src/services/ocr/types.ts b/apps/server/src/services/ocr/types.ts deleted file mode 100644 index 63bac97..0000000 --- a/apps/server/src/services/ocr/types.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { OCRConstants } from './constants.js'; - -export namespace OCRTypes { - export interface RecognizedDate { - year: number | null; - month: number | null; - day: number | null; - } - - export abstract class BillingDateParser { - constructor(public readonly language: OCRConstants.TSupportedLangCode) {} - public static readonly emptyDate: RecognizedDate = { year: null, month: null, day: null }; - public abstract parse(lines: string[]): RecognizedDate; - } -} diff --git a/apps/server/src/utils/env.ts b/apps/server/src/utils/env.ts index 279023a..f5f6de3 100644 --- a/apps/server/src/utils/env.ts +++ b/apps/server/src/utils/env.ts @@ -13,5 +13,6 @@ export const Env = z OCR_API_ENDPOINT: z.string(), OCR_API_KEY: z.string(), DATA_ENCRYPTION_KEY: z.string(), + LOGGER_URI: z.string(), }) .parse(process.env); diff --git a/apps/server/src/utils/logger.ts b/apps/server/src/utils/logger.ts new file mode 100644 index 0000000..c6e9fb2 --- /dev/null +++ b/apps/server/src/utils/logger.ts @@ -0,0 +1,5 @@ +import { SystemLogService } from '@divine-bridge/common'; + +import { Env } from './env.js'; + +export const logger = new SystemLogService(Env.LOGGER_URI, 'server').instance; diff --git a/apps/sls-check-membership/.env.example b/apps/sls-check-membership/.env.example index 7df8ef2..392e845 100644 --- a/apps/sls-check-membership/.env.example +++ b/apps/sls-check-membership/.env.example @@ -5,4 +5,5 @@ DISCORD_BOT_TOKEN= DISCORD_LOG_WEBHOOK_URL= DATA_ENCRYPTION_KEY= GOOGLE_CLIENT_ID= -GOOGLE_CLIENT_SECRET= \ No newline at end of file +GOOGLE_CLIENT_SECRET= +LOGGER_URI= diff --git a/apps/sls-check-membership/package.json b/apps/sls-check-membership/package.json index f87b382..0856522 100644 --- a/apps/sls-check-membership/package.json +++ b/apps/sls-check-membership/package.json @@ -4,11 +4,13 @@ "dependencies": { "@discordjs/rest": "^2.2.0", "@divine-bridge/common": "workspace:^", + "@divine-bridge/serverless-offline-lambda-function-urls": "workspace:^", "dayjs": "^1.11.10", "discord-api-types": "^0.37.69", "discord.js": "^14.14.1", "esbuild": "^0.20.0", "mongoose": "^8.1.1", + "serverless-offline": "^13.3.3", "zod": "^3.22.4" }, "devDependencies": { @@ -25,9 +27,9 @@ }, "main": "index.js", "scripts": { + "build": "#noop", "deploy": "serverless deploy --stage production", - "dev:auth": "serverless invoke local --function check-auth-membership --path invoke-local.json", - "dev:screenshot": "serverless invoke local --function check-screenshot-membership --path invoke-local.json", + "dev": "serverless offline start --verbose", "package": "serverless package --stage production" }, "type": "module" diff --git a/apps/sls-check-membership/serverless.yml b/apps/sls-check-membership/serverless.yml index c1f6a25..316a524 100644 --- a/apps/sls-check-membership/serverless.yml +++ b/apps/sls-check-membership/serverless.yml @@ -17,6 +17,8 @@ functions: plugins: - serverless-esbuild - serverless-dotenv-plugin + - '@divine-bridge/serverless-offline-lambda-function-urls' + - serverless-offline custom: esbuild: @@ -24,3 +26,8 @@ custom: minify: false format: cjs outputFileExtension: .cjs + serverless-offline: + lambdaPort: 3011 + urlLambdaFunctionsHttpPort: 5011 + urlLambdaFunctionsHttpVerbs: + - POST diff --git a/apps/sls-check-membership/src/api/check-auth-membership.ts b/apps/sls-check-membership/src/api/check-auth-membership.ts index 9071099..caa8fb1 100644 --- a/apps/sls-check-membership/src/api/check-auth-membership.ts +++ b/apps/sls-check-membership/src/api/check-auth-membership.ts @@ -19,8 +19,9 @@ import utc from 'dayjs/plugin/utc.js'; import { checkAuth } from '../utils/auth.js'; import { discordBotApi } from '../utils/discord.js'; import { Env } from '../utils/env.js'; -import { Logger } from '../utils/logger.js'; +import { checkAuthMembershipLogger as logger } from '../utils/logger.js'; import { dbConnect } from '../utils/mongoose.js'; +import { sleep } from '../utils/sleep.js'; dayjs.extend(utc); @@ -29,13 +30,13 @@ const cryptoUtils = new CryptoUtils(Env.DATA_ENCRYPTION_KEY); export const checkAuthMembership = async ( event: APIGatewayProxyEventV2, ): Promise => { - Logger.awsEventLog(event); + logger.debug(event); if (!checkAuth(event)) { return { statusCode: 403 }; } - await Logger.sysLog(`Start checking auth membership.`, 'check-auth-membership'); - await dbConnect(); + logger.info(`Start checking auth membership.`); + await dbConnect(logger); let removalCount = 0, removalFailCount = 0; @@ -66,15 +67,12 @@ export const checkAuthMembership = async ( for (const [membershipRoleId, membershipDocGroup] of Object.entries(membershipDocRecord)) { if (membershipDocGroup.length === 0) continue; - console.log(`Checking membership role <@&${membershipRoleId}>...`); + logger.debug(`Checking membership role <@&${membershipRoleId}>...`); // Get membership role from DB const membershipRoleDoc = await MembershipRoleCollection.findById(membershipRoleId); if (membershipRoleDoc === null) { - await Logger.sysLog( - `Failed to find membership role <@&${membershipRoleId}> in the database.`, - 'check-auth-membership', - ); + logger.error(`Failed to find membership role <@&${membershipRoleId}> in the database.`); continue; } @@ -82,9 +80,8 @@ export const checkAuthMembership = async ( const guildId = membershipRoleDoc.guild; const guildDoc = await GuildCollection.findById(guildId); if (guildDoc === null) { - await Logger.sysLog( + logger.error( `Failed to find the server ${guildId} which the role <@&${membershipRoleId}> belongs to in the database.`, - 'check-auth-membership', ); continue; } @@ -93,15 +90,14 @@ export const checkAuthMembership = async ( const youtubeChannelId = membershipRoleDoc.youtube; const youtubeChannelDoc = await YouTubeChannelCollection.findById(youtubeChannelId); if (youtubeChannelDoc === null) { - await Logger.sysLog( + logger.error( `Failed to find the YouTube channel \`${youtubeChannelId}\` which the role <@&${membershipRoleId}> belongs to in the database.`, - 'check-auth-membership', ); continue; } // Initialize log service and membership service - const appEventLogService = await new AppEventLogService(discordBotApi, guildId).init(); + const appEventLogService = await new AppEventLogService(logger, discordBotApi, guildId).init(); const membershipService = new MembershipService(discordBotApi, appEventLogService); // Check membership @@ -111,13 +107,14 @@ export const checkAuthMembership = async ( const userDoc = userId in userDocRecord ? userDocRecord[userId] : null; // Verify the user's membership via Google API - const refreshToken = + const decryptResult = userDoc !== null && userDoc.youtube !== null ? cryptoUtils.decrypt(userDoc.youtube.refreshToken) : null; let verifySuccess = false; - if (refreshToken !== null) { + if (decryptResult !== null && decryptResult.success === true) { + const { plain: refreshToken } = decryptResult; let retry: number; for (retry = 0; retry < 3 && !verifySuccess; retry++) { const randomVideoId = @@ -125,9 +122,9 @@ export const checkAuthMembership = async ( Math.floor(Math.random() * youtubeChannelDoc.memberOnlyVideoIds.length) ]; const googleOAuth = new GoogleOAuth(Env.GOOGLE_CLIENT_ID, Env.GOOGLE_CLIENT_SECRET); - const youtubeOAuthApi = new YouTubeOAuthAPI(googleOAuth, refreshToken); + const youtubeOAuthApi = new YouTubeOAuthAPI(logger, googleOAuth, refreshToken); const result = await youtubeOAuthApi.verifyMembership(randomVideoId); - console.log(randomVideoId, result.success ? 'success' : result.error); + logger.debug(randomVideoId, result.success ? 'success' : result.error); if (result.success) { verifySuccess = true; } else if ( @@ -142,17 +139,15 @@ export const checkAuthMembership = async ( } else { // ! Unknown error, currently we let it pass verifySuccess = true; - await Logger.sysLog( + logger.error( `An unknown error occurred while verifying the user's membership for the YouTube channel \`${youtubeChannelDoc.profile.title}\` via Google API.`, - 'check-auth-membership', ); } } if (retry === 3) { // ! Failed more than 3 times, currently we let it pass - await Logger.sysLog( + logger.error( `Failed to verify the user's membership for the YouTube channel \`${youtubeChannelDoc.profile.title}\` via Google API after retry 3 times.`, - 'check-auth-membership', ); continue; } @@ -199,11 +194,13 @@ export const checkAuthMembership = async ( } } - await Logger.sysLog( + logger.info( `Finished checking auth membership.\n` + `Removed ${removalCount} memberships (${removalFailCount} failed).`, - 'check-auth-membership', ); + + // ? Wait for 1 second to ensure the log is sent + await sleep(1); return { statusCode: 200, body: JSON.stringify({ removalCount, removalFailCount }), diff --git a/apps/sls-check-membership/src/api/check-screenshot-membership.ts b/apps/sls-check-membership/src/api/check-screenshot-membership.ts index dc08618..e9e5219 100644 --- a/apps/sls-check-membership/src/api/check-screenshot-membership.ts +++ b/apps/sls-check-membership/src/api/check-screenshot-membership.ts @@ -12,21 +12,22 @@ import utc from 'dayjs/plugin/utc.js'; import { checkAuth } from '../utils/auth.js'; import { discordBotApi } from '../utils/discord.js'; -import { Logger } from '../utils/logger.js'; +import { checkScreenshotMembershipLogger as logger } from '../utils/logger.js'; import { dbConnect } from '../utils/mongoose.js'; +import { sleep } from '../utils/sleep.js'; dayjs.extend(utc); export const checkScreenshotMembership = async ( event: APIGatewayProxyEventV2, ): Promise => { - Logger.awsEventLog(event); + logger.debug(event); if (!checkAuth(event)) { return { statusCode: 403 }; } - await Logger.sysLog(`Start checking screenshot membership.`, 'check-screenshot-membership'); - await dbConnect(); + logger.info(`Start checking screenshot membership.`); + await dbConnect(logger); let removalCount = 0, removalFailCount = 0; @@ -50,15 +51,12 @@ export const checkScreenshotMembership = async ( for (const [membershipRoleId, membershipDocGroup] of Object.entries(membershipDocRecord)) { if (membershipDocGroup.length === 0) continue; - console.log(`Checking membership role <@&${membershipRoleId}>...`); + logger.debug(`Checking membership role <@&${membershipRoleId}>...`); // Get membership role from DB const membershipRoleDoc = await MembershipRoleCollection.findById(membershipRoleId); if (membershipRoleDoc === null) { - await Logger.sysLog( - `Failed to find membership role <@&${membershipRoleId}> in the database.`, - 'check-screenshot-membership', - ); + logger.error(`Failed to find membership role <@&${membershipRoleId}> in the database.`); continue; } const membershipRoleName = membershipRoleDoc.profile.name; @@ -67,16 +65,15 @@ export const checkScreenshotMembership = async ( const guildId = membershipRoleDoc.guild; const guildDoc = await GuildCollection.findById(guildId); if (guildDoc === null) { - await Logger.sysLog( + logger.error( `Failed to find the server ${guildId} which the role <@&${membershipRoleId}> belongs to in the database.`, - 'check-screenshot-membership', ); continue; } const guildName = guildDoc.profile.name; // Initialize log service and membership service - const appEventLogService = await new AppEventLogService(discordBotApi, guildId).init(); + const appEventLogService = await new AppEventLogService(logger, discordBotApi, guildId).init(); const membershipService = new MembershipService(discordBotApi, appEventLogService); // Check membership @@ -97,7 +94,9 @@ export const checkScreenshotMembership = async ( }); } catch (error) { // We cannot DM the user, so we just ignore it - console.error(error); + logger.debug( + `Failed to send DM to <@${userId}> for membership role <@&${membershipRoleId}>.`, + ); } } else if (endDate.isBefore(currentDate, 'date')) { // When the end date is before today, we remove the user's membership @@ -132,11 +131,13 @@ export const checkScreenshotMembership = async ( } } - await Logger.sysLog( + logger.info( `Finished checking screenshot membership.\n` + `Removed ${removalCount} memberships (${removalFailCount} failed).`, - 'check-screenshot-membership', ); + + // ? Wait for 1 second to ensure the log is sent + await sleep(1); return { statusCode: 200, body: JSON.stringify({ removalCount, removalFailCount }), diff --git a/apps/sls-check-membership/src/utils/env.ts b/apps/sls-check-membership/src/utils/env.ts index 1a5dd1a..aacd3f0 100644 --- a/apps/sls-check-membership/src/utils/env.ts +++ b/apps/sls-check-membership/src/utils/env.ts @@ -1,14 +1,15 @@ import { z } from 'zod'; -const envSchema = z.object({ - NODE_ENV: z.string(), - MONGO_URI: z.string(), - API_TOKEN: z.string(), - DISCORD_BOT_TOKEN: z.string(), - DISCORD_LOG_WEBHOOK_URL: z.string(), - DATA_ENCRYPTION_KEY: z.string(), - GOOGLE_CLIENT_ID: z.string(), - GOOGLE_CLIENT_SECRET: z.string(), -}); - -export const Env = envSchema.parse(process.env); +export const Env = z + .object({ + NODE_ENV: z.string(), + MONGO_URI: z.string(), + API_TOKEN: z.string(), + DISCORD_BOT_TOKEN: z.string(), + DISCORD_LOG_WEBHOOK_URL: z.string(), + DATA_ENCRYPTION_KEY: z.string(), + GOOGLE_CLIENT_ID: z.string(), + GOOGLE_CLIENT_SECRET: z.string(), + LOGGER_URI: z.string(), + }) + .parse(process.env); diff --git a/apps/sls-check-membership/src/utils/logger.ts b/apps/sls-check-membership/src/utils/logger.ts index 13025ff..29852af 100644 --- a/apps/sls-check-membership/src/utils/logger.ts +++ b/apps/sls-check-membership/src/utils/logger.ts @@ -1,29 +1,11 @@ -import { APIGatewayProxyEventV2 } from 'aws-lambda'; -import { WebhookClient } from 'discord.js'; +import { SystemLogService } from '@divine-bridge/common'; import { Env } from './env.js'; -export namespace Logger { - const client = new WebhookClient({ - url: Env.DISCORD_LOG_WEBHOOK_URL, - }); +export const checkScreenshotMembershipLogger = new SystemLogService( + Env.LOGGER_URI, + 'check-screenshot-membership', +).instance; - export const awsEventLog = (event: APIGatewayProxyEventV2) => { - console.log(JSON.stringify(event, null, 2)); - }; - - export const sysLog = async ( - message: string, - from: 'check-screenshot-membership' | 'check-auth-membership', - ) => { - try { - console.error(message); - await client.send({ - content: `[${from}][${new Date().toISOString()}]\n` + message, - }); - } catch (error) { - console.error('Failed to log error to Discord'); - console.error(error); - } - }; -} +export const checkAuthMembershipLogger = new SystemLogService(Env.LOGGER_URI, 'check-membership') + .instance; diff --git a/apps/sls-check-membership/src/utils/mongoose.ts b/apps/sls-check-membership/src/utils/mongoose.ts index 708cb16..0f5555a 100644 --- a/apps/sls-check-membership/src/utils/mongoose.ts +++ b/apps/sls-check-membership/src/utils/mongoose.ts @@ -1,8 +1,9 @@ +import type { Logger } from '@divine-bridge/common'; import mongoose from 'mongoose'; import { Env } from './env.js'; -export const dbConnect = async () => { +export const dbConnect = async (logger: Logger) => { await mongoose.connect(Env.MONGO_URI); - console.log('Connected to MongoDB'); + logger.debug('Connected to MongoDB'); }; diff --git a/apps/sls-check-membership/src/utils/sleep.ts b/apps/sls-check-membership/src/utils/sleep.ts new file mode 100644 index 0000000..34bae1f --- /dev/null +++ b/apps/sls-check-membership/src/utils/sleep.ts @@ -0,0 +1 @@ +export const sleep = (s: number) => new Promise((resolve) => setTimeout(resolve, s * 1000)); diff --git a/apps/sls-ocr/.env.example b/apps/sls-ocr/.env.example index 8651fe7..27a35e8 100644 --- a/apps/sls-ocr/.env.example +++ b/apps/sls-ocr/.env.example @@ -1,2 +1,3 @@ NODE_ENV= API_TOKEN= +LOGGER_URI= diff --git a/apps/sls-ocr/.gitignore b/apps/sls-ocr/.gitignore index 032056d..017421d 100644 --- a/apps/sls-ocr/.gitignore +++ b/apps/sls-ocr/.gitignore @@ -2,4 +2,5 @@ .env.bak .env.*.local node_modules/ -.esbuild/ \ No newline at end of file +.esbuild/ +invoke-local.json \ No newline at end of file diff --git a/apps/sls-ocr/package.json b/apps/sls-ocr/package.json index 3ce9981..d0bdd7f 100644 --- a/apps/sls-ocr/package.json +++ b/apps/sls-ocr/package.json @@ -2,14 +2,18 @@ "name": "sls-ocr", "version": "0.0.1", "dependencies": { + "@divine-bridge/common": "workspace:^", + "@divine-bridge/ocr-service": "workspace:^", + "@divine-bridge/serverless-offline-lambda-function-urls": "workspace:^", "bmp-js": "^0.1.0", "esbuild": "^0.20.0", - "express": "^4.18.2", "idb-keyval": "^6.2.0", "is-electron": "^2.2.2", "is-url": "^1.2.4", "node-fetch": "^2.6.9", "regenerator-runtime": "^0.13.3", + "serverless-offline": "^13.3.3", + "serverless-offline-lambda-function-urls": "^1.0.3", "tesseract.js": "^5.0.4", "tesseract.js-core": "^5.0.0", "tr46": "~0.0.3", @@ -22,19 +26,19 @@ "devDependencies": { "@divine-bridge/eslint-config-custom": "workspace:^", "@divine-bridge/prettier-config-custom": "workspace:^", - "@types/express": "^4.17.21", + "@types/aws-lambda": "^8.10.133", + "@types/node": "^20.11.16", "eslint": "^8.56.0", "eslint-plugin-import-esm": "^1.2.1", "prettier": "^3.2.5", "serverless": "^3.38.0", "serverless-dotenv-plugin": "^6.0.0", "serverless-esbuild": "^1.51.0", - "serverless-http": "^3.2.0", - "serverless-offline": "^13.3.3", "typescript": "^5.3.3" }, "main": "index.js", "scripts": { + "build": "#noop", "deploy": "serverless deploy --stage production", "dev": "serverless offline start --verbose", "package": "serverless package --stage production" diff --git a/apps/sls-ocr/serverless.yml b/apps/sls-ocr/serverless.yml index 1e6e3d5..bbec2d9 100644 --- a/apps/sls-ocr/serverless.yml +++ b/apps/sls-ocr/serverless.yml @@ -6,10 +6,9 @@ provider: functions: ocr: - handler: src/index.handler + handler: src/index.ocr timeout: 900 - events: - - httpApi: '*' + url: true package: include: @@ -28,17 +27,19 @@ package: - node_modules/webidl-conversions/** plugins: - - serverless-esbuild - serverless-dotenv-plugin + - serverless-esbuild + - '@divine-bridge/serverless-offline-lambda-function-urls' - serverless-offline custom: - serverless-offline: - host: 0.0.0.0 - lambdaPort: 3010 - httpPort: 5010 esbuild: bundle: true minify: false format: cjs outputFileExtension: .cjs + serverless-offline: + lambdaPort: 3010 + urlLambdaFunctionsHttpPort: 5010 + urlLambdaFunctionsHttpVerbs: + - POST diff --git a/apps/sls-ocr/src/index.ts b/apps/sls-ocr/src/index.ts index f7ed6ee..a020d0e 100644 --- a/apps/sls-ocr/src/index.ts +++ b/apps/sls-ocr/src/index.ts @@ -1,24 +1,19 @@ -import express from 'express'; -import serverless from 'serverless-http'; +import { APIGatewayProxyEventV2, APIGatewayProxyResultV2 } from 'aws-lambda'; import { createWorker } from 'tesseract.js'; -import { authMiddleware } from './middleware.js'; +import { checkAuth } from './utils/auth.js'; +import { logger } from './utils/logger.js'; import { ocrBodySchema } from './utils/schemas.js'; -const app = express(); -app.use(express.json()); - -app.use((req, _res, next) => { - console.log(req.method, req.url); - next(); -}); - -app.use(authMiddleware); +export const ocr = async (event: APIGatewayProxyEventV2): Promise => { + logger.debug(JSON.stringify(event, null, 2)); + if (!checkAuth(event)) { + return { statusCode: 403 }; + } -app.post('/api/ocr', async (req, res) => { - const parsedBody = ocrBodySchema.safeParse(req.body); + const parsedBody = ocrBodySchema.safeParse(JSON.parse(event.body ?? '')); if (!parsedBody.success) { - return res.status(400).json({ message: parsedBody.error }); + return { statusCode: 400, body: JSON.stringify({ message: parsedBody.error }) }; } const { image, language } = parsedBody.data; @@ -29,11 +24,5 @@ app.post('/api/ocr', async (req, res) => { const ret = await worker.recognize(image); await worker.terminate(); - res.status(200).json({ message: ret.data.text }); -}); - -app.all('*', (_req, res) => { - res.status(404).end(); -}); - -export const handler = serverless(app); + return { statusCode: 200, body: JSON.stringify({ message: ret.data.text }) }; +}; diff --git a/apps/sls-ocr/src/middleware.ts b/apps/sls-ocr/src/middleware.ts deleted file mode 100644 index ccdcce4..0000000 --- a/apps/sls-ocr/src/middleware.ts +++ /dev/null @@ -1,11 +0,0 @@ -import type { NextFunction, Request, Response } from 'express'; - -import { Env } from './utils/env.js'; - -export const authMiddleware = (req: Request, res: Response, next: NextFunction) => { - if (req.headers['authorization'] !== `Bearer ${Env.API_TOKEN}`) { - return res.status(401).end(); - } - - next(); -}; diff --git a/apps/sls-ocr/src/utils/auth.ts b/apps/sls-ocr/src/utils/auth.ts new file mode 100644 index 0000000..2b018b8 --- /dev/null +++ b/apps/sls-ocr/src/utils/auth.ts @@ -0,0 +1,7 @@ +import type { APIGatewayProxyEventV2 } from 'aws-lambda'; + +import { Env } from './env.js'; + +export const checkAuth = (event: APIGatewayProxyEventV2) => { + return event.headers['authorization'] === `Bearer ${Env.API_TOKEN}`; +}; diff --git a/apps/sls-ocr/src/utils/env.ts b/apps/sls-ocr/src/utils/env.ts index 7068be3..8654077 100644 --- a/apps/sls-ocr/src/utils/env.ts +++ b/apps/sls-ocr/src/utils/env.ts @@ -1,8 +1,9 @@ import { z } from 'zod'; -const envSchema = z.object({ - NODE_ENV: z.string(), - API_TOKEN: z.string(), -}); - -export const Env = envSchema.parse(process.env); +export const Env = z + .object({ + NODE_ENV: z.string(), + API_TOKEN: z.string(), + LOGGER_URI: z.string(), + }) + .parse(process.env); diff --git a/apps/sls-ocr/src/utils/logger.ts b/apps/sls-ocr/src/utils/logger.ts new file mode 100644 index 0000000..0fd4957 --- /dev/null +++ b/apps/sls-ocr/src/utils/logger.ts @@ -0,0 +1,9 @@ +import { SystemLogService } from '@divine-bridge/common'; + +import { Env } from './env.js'; + +export const logger = new SystemLogService( + Env.LOGGER_URI, + 'ocr', + Env.NODE_ENV === 'development' ? 'debug' : 'info', +).instance; diff --git a/apps/sls-ocr/src/utils/schemas.ts b/apps/sls-ocr/src/utils/schemas.ts index 218f6c4..1645b6c 100644 --- a/apps/sls-ocr/src/utils/schemas.ts +++ b/apps/sls-ocr/src/utils/schemas.ts @@ -1,18 +1,11 @@ +import { supportedOCRLanguages } from '@divine-bridge/ocr-service'; import { z } from 'zod'; +const [language, language2, ...languages] = supportedOCRLanguages.map(({ code }) => + z.literal(code), +); + export const ocrBodySchema = z.object({ image: z.string(), - language: z.union([ - z.literal('chi_sim'), - z.literal('chi_tra'), - z.literal('deu'), - z.literal('eng'), - z.literal('fil'), - z.literal('ind'), - z.literal('jpn'), - z.literal('kor'), - z.literal('msa'), - z.literal('tha'), - z.literal('vie'), - ]), + language: z.union([language, language2, ...languages]), }); diff --git a/apps/web/.env.example b/apps/web/.env.example index 5587641..59a5deb 100644 --- a/apps/web/.env.example +++ b/apps/web/.env.example @@ -8,6 +8,7 @@ GOOGLE_CLIENT_ID= GOOGLE_CLIENT_SECRET= DATA_ENCRYPTION_KEY= DISCORD_BOT_TOKEN= +LOGGER_URI= NEXT_PUBLIC_WEB_URL= NEXT_PUBLIC_DISCORD_CLIENT_ID= diff --git a/apps/web/app/api/heartbeat/route.ts b/apps/web/app/api/heartbeat/route.ts new file mode 100644 index 0000000..0658c2c --- /dev/null +++ b/apps/web/app/api/heartbeat/route.ts @@ -0,0 +1,5 @@ +import { NextResponse } from 'next/server'; + +export const GET = async () => { + return new NextResponse(null, { status: 204 }); +}; diff --git a/apps/web/app/layout.tsx b/apps/web/app/layout.tsx index 2709334..46593d1 100644 --- a/apps/web/app/layout.tsx +++ b/apps/web/app/layout.tsx @@ -1,6 +1,7 @@ import { AntdRegistry } from '@ant-design/nextjs-registry'; import { GoogleAnalytics } from '@eisberg-labs/next-google-analytics'; import { GoogleOAuthProvider } from '@react-oauth/google'; +import { Analytics } from '@vercel/analytics/react'; import type { Metadata } from 'next'; import { SessionProvider } from 'next-auth/react'; import type { PropsWithChildren } from 'react'; @@ -27,6 +28,7 @@ export default function RootLayout({ children }: PropsWithChildren) { + {children} diff --git a/apps/web/components/Modals/ApplyModal.tsx b/apps/web/components/Modals/ApplyModal.tsx index fe2a6d9..cfd8a06 100644 --- a/apps/web/components/Modals/ApplyModal.tsx +++ b/apps/web/components/Modals/ApplyModal.tsx @@ -1,7 +1,6 @@ import LoadingOutlined from '@ant-design/icons/LoadingOutlined'; import Modal from 'antd/es/modal/Modal'; import Spin from 'antd/es/spin'; -import axios from 'axios'; import Image from 'next/image'; import { Dispatch, SetStateAction, useContext, useState } from 'react'; import { DiscordLoginButton } from 'react-social-login-buttons'; @@ -9,9 +8,9 @@ import { DiscordLoginButton } from 'react-social-login-buttons'; import styles from './ApplyModal.module.css'; import { MainContext } from '../../contexts/MainContext'; +import { useErrorHandler } from '../../hooks/error-handler'; import useYouTubeAuthorize from '../../hooks/youtube'; import { requiredAction } from '../../libs/common/action'; -import { errorDataSchema } from '../../libs/common/error'; import { verifyAuthMembershipAction } from '../../libs/server/actions/verify-auth-membership'; import { GetGuildsActionData } from '../../types/server-actions'; import GoogleOAuthButton from '../Buttons/GoogleOAuthButton'; @@ -34,6 +33,8 @@ export default function ApplyModal({ const [linkingAccount, setLinkingAccount] = useState(false); const [verifyingMembership, setVerifyingMembership] = useState(false); + const errorHandler = useErrorHandler(); + const authorize = useYouTubeAuthorize({ setLinkingAccount, messageApi, @@ -166,43 +167,13 @@ export default function ApplyModal({ key: 'verify-membership', type: 'success', content: 'Successfully verified your membership', + duration: 3, }); setIsModalOpen(false); } catch (error) { - console.error(error); - if (axios.isAxiosError(error) && error.response !== undefined) { - const parsedData = errorDataSchema.safeParse(error.response.data); - if (parsedData.success) { - const { message } = parsedData.data; - void messageApi.open({ - key: 'verify-membership', - type: 'error', - content: `[${error.response.status}]: ${message}`, - }); - } else { - void messageApi.open({ - key: 'verify-membership', - type: 'error', - content: `[${error.response.status}]: ${error.response.statusText}}`, - }); - } - } else if (error instanceof Error) { - void messageApi.open({ - key: 'verify-membership', - type: 'error', - content: `[${error.name}]: ${error.message}`, - }); - } else { - void messageApi.open({ - key: 'verify-membership', - type: 'error', - content: 'An unknown error has occurred', - }); - } + messageApi.destroy('verify-membership'); + errorHandler(error); } finally { - setTimeout(() => { - messageApi.destroy('verify-membership'); - }, 3000); setVerifyingMembership(false); } }} diff --git a/apps/web/contexts/MainContext.tsx b/apps/web/contexts/MainContext.tsx index 4dc0e8f..e0890ef 100644 --- a/apps/web/contexts/MainContext.tsx +++ b/apps/web/contexts/MainContext.tsx @@ -46,10 +46,7 @@ export const MainProvider = ({ children }: { children: ReactNode }) => { .catch(errorHandler); void getGuildsAction({}) .then(requiredAction) - .then(({ data }) => { - setGuilds(data); - console.log(data); - }) + .then(({ data }) => setGuilds(data)) .catch(errorHandler); }, [errorHandler, messageApi, status]); diff --git a/apps/web/libs/server/actions/connect-youtube.ts b/apps/web/libs/server/actions/connect-youtube.ts index 40a8543..78e6c4b 100644 --- a/apps/web/libs/server/actions/connect-youtube.ts +++ b/apps/web/libs/server/actions/connect-youtube.ts @@ -7,6 +7,7 @@ import { authAction } from '.'; import type { ConnectYouTubeActionData } from '../../../types/server-actions'; import { cryptoUtils } from '../crypto'; import { googleOAuth } from '../google'; +import { logger } from '../logger'; const connectYouTubeActionInputSchema = z.object({ code: z.string(), @@ -24,7 +25,7 @@ export const connectYouTubeAction = authAction< const { refreshToken } = result; // Get channel info from YouTube API - const youtubeOAuthApi = new YouTubeOAuthAPI(googleOAuth, refreshToken); + const youtubeOAuthApi = new YouTubeOAuthAPI(logger, googleOAuth, refreshToken); const channelResult = await youtubeOAuthApi.getSelfChannel(); if (!channelResult.success) { throw new Error(channelResult.error); @@ -54,10 +55,12 @@ export const connectYouTubeAction = authAction< } // Update user YouTube channel info - const encryptedRefreshToken = cryptoUtils.encrypt(refreshToken); - if (encryptedRefreshToken === null) { - throw new Error('Internal Server Error'); + const encryptResult = cryptoUtils.encrypt(refreshToken); + if (!encryptResult.success) { + logger.error(`Failed to encrypt YouTube refresh token for user <@${userDoc._id}>`); + throw new Error('Internal Server Error. Please contact the bot owner to fix this issue'); } + const { cipher: encryptedRefreshToken } = encryptResult; userDoc.youtube = { id: youtubeChannelId, title, diff --git a/apps/web/libs/server/actions/delete-account.ts b/apps/web/libs/server/actions/delete-account.ts index c4ec73e..350a91c 100644 --- a/apps/web/libs/server/actions/delete-account.ts +++ b/apps/web/libs/server/actions/delete-account.ts @@ -14,6 +14,7 @@ import type { DeleteAccountActionData } from '../../../types/server-actions'; import { cryptoUtils } from '../crypto'; import { discordBotApi } from '../discord'; import { googleOAuth } from '../google'; +import { logger } from '../logger'; const deleteAccountActionInputSchema = z.object({}); @@ -23,8 +24,9 @@ export const deleteAccountAction = authAction< >(deleteAccountActionInputSchema, async (_input, { userDoc }) => { // Revoke YouTube refresh token if user has connected their YouTube account if (userDoc.youtube !== null) { - const refreshToken = cryptoUtils.decrypt(userDoc.youtube.refreshToken); - if (refreshToken !== null) { + const decryptResult = cryptoUtils.decrypt(userDoc.youtube.refreshToken); + if (decryptResult.success) { + const { plain: refreshToken } = decryptResult; // Revoke YouTube refresh token // ? We don't do error handling here and proceed to remove the membership await googleOAuth.revokeRefreshToken(refreshToken); @@ -86,7 +88,7 @@ export const deleteAccountAction = authAction< if (membershipDocGroup.length === 0) continue; // Initialize log service and membership service - const appEventLogService = await new AppEventLogService(discordBotApi, guildId).init(); + const appEventLogService = await new AppEventLogService(logger, discordBotApi, guildId).init(); const membershipService = new MembershipService(discordBotApi, appEventLogService); // Remove membership diff --git a/apps/web/libs/server/actions/revoke-youtube.ts b/apps/web/libs/server/actions/revoke-youtube.ts index 036e734..9239c1f 100644 --- a/apps/web/libs/server/actions/revoke-youtube.ts +++ b/apps/web/libs/server/actions/revoke-youtube.ts @@ -6,6 +6,7 @@ import { authAction } from '.'; import type { RevokeYouTubeActionData } from '../../../types/server-actions'; import { cryptoUtils } from '../crypto'; import { googleOAuth } from '../google'; +import { logger } from '../logger'; const revokeYouTubeActionInputSchema = z.object({}); @@ -17,11 +18,12 @@ export const revokeYouTubeAction = authAction< if (userDoc.youtube === null) { throw new Error('You have not connected your YouTube account'); } - const refreshToken = cryptoUtils.decrypt(userDoc.youtube.refreshToken); - if (refreshToken === null) { - console.error(`Failed to decrypt YouTube refresh token for user <@${userDoc._id}>`); + const decryptResult = cryptoUtils.decrypt(userDoc.youtube.refreshToken); + if (!decryptResult.success) { + logger.error(`Failed to decrypt YouTube refresh token for user <@${userDoc._id}>`); throw new Error('Internal server error. Please contact the bot owner to fix this issue.'); } + const { plain: refreshToken } = decryptResult; // Revoke YouTube refresh token // ? We don't do error handling here and proceed to remove the user's YouTube account from DB diff --git a/apps/web/libs/server/actions/verify-auth-membership.ts b/apps/web/libs/server/actions/verify-auth-membership.ts index 06f05ac..3314bcb 100644 --- a/apps/web/libs/server/actions/verify-auth-membership.ts +++ b/apps/web/libs/server/actions/verify-auth-membership.ts @@ -20,6 +20,7 @@ import { getAccessTokenFromCookie } from '../authjs'; import { cryptoUtils } from '../crypto'; import { discordBotApi } from '../discord'; import { googleOAuth } from '../google'; +import { logger } from '../logger'; dayjs.extend(utc); @@ -41,14 +42,19 @@ export const verifyAuthMembershipAction = authAction< .populate<{ guild: GuildDoc | null }>('guild') .populate<{ youtube: YouTubeChannelDoc | null }>('youtube'); if (membershipRoleDoc === null) { - // return response.status(404).json({ message: 'Membership role not found' }); throw new Error('Membership role not found'); } else if (membershipRoleDoc.guild === null) { + logger.error( + `Cannot retrieve the server that owns the membership role <@&${membershipRoleDoc._id}? from the database.`, + ); throw new Error( 'Cannot retrieve the server that owns the membership role from the database.\n' + 'Please contact the bot owner to fix this issue.', ); } else if (membershipRoleDoc.youtube === null) { + logger.error( + `Cannot retrieve the corresponding YouTube channel of the membership role <@&${membershipRoleDoc._id}> from the database.`, + ); throw new Error( 'Cannot retrieve the corresponding YouTube channel of the membership role from the database.\n' + 'Please contact the bot owner to fix this issue.', @@ -87,16 +93,17 @@ export const verifyAuthMembershipAction = authAction< } // Auth membership check - const refreshToken = cryptoUtils.decrypt(userDoc.youtube.refreshToken); - if (refreshToken === null) { - console.error(`Failed to decrypt YouTube refresh token for user <@${userDoc._id}>`); + const decryptResult = cryptoUtils.decrypt(userDoc.youtube.refreshToken); + if (!decryptResult.success) { + logger.error(`Failed to decrypt YouTube refresh token for user <@${userDoc._id}>`); throw new Error('Internal server error. Please contact the bot owner to fix this issue.'); } + const { plain: refreshToken } = decryptResult; const randomVideoId = membershipRoleDoc.youtube.memberOnlyVideoIds[ Math.floor(Math.random() * membershipRoleDoc.youtube.memberOnlyVideoIds.length) ]; - const youtubeOAuthApi = new YouTubeOAuthAPI(googleOAuth, refreshToken); + const youtubeOAuthApi = new YouTubeOAuthAPI(logger, googleOAuth, refreshToken); const verifyResult = await youtubeOAuthApi.verifyMembership(randomVideoId); if (!verifyResult.success) { if ( @@ -110,11 +117,21 @@ export const verifyAuthMembershipAction = authAction< verifyResult.error === 'comment_disabled' || verifyResult.error === 'video_not_found' ) { + logger.error( + `Failed to retrieve the members-only video of the YouTube channel <@&${membershipRoleDoc._id}>.\n` + + `Error: ${verifyResult.error}\n` + + `Random video ID: ${randomVideoId}`, + ); throw new Error( 'Failed to retrieve the members-only video of the YouTube channel.\n' + 'Please try again. If the problem persists, please contact the bot owner.', ); } else if (verifyResult.error === 'unknown_error') { + logger.error( + `An unknown error occurred when trying to verify the YouTube membership of user <@${userDoc._id}>\n` + + `YouTube channel ID: ${membershipRoleDoc.youtube.id}\n` + + `Random video ID: ${randomVideoId}`, + ); throw new Error( 'An unknown error occurred when trying to verify your YouTube membership.\n' + 'Please try again. If the problem persists, please contact the bot owner.', @@ -123,7 +140,11 @@ export const verifyAuthMembershipAction = authAction< } // Initialize log service and membership service - const appEventLogService = await new AppEventLogService(discordBotApi, guildDoc._id).init(); + const appEventLogService = await new AppEventLogService( + logger, + discordBotApi, + guildDoc._id, + ).init(); const membershipService = new MembershipService(discordBotApi, appEventLogService); // Add membership to user diff --git a/apps/web/libs/server/logger.ts b/apps/web/libs/server/logger.ts new file mode 100644 index 0000000..e42f0ce --- /dev/null +++ b/apps/web/libs/server/logger.ts @@ -0,0 +1,6 @@ +import { SystemLogService } from '@divine-bridge/common'; +import 'server-only'; + +import { privateEnv } from './private-env'; + +export const logger = new SystemLogService(privateEnv.LOGGER_URI, 'web').instance; diff --git a/apps/web/libs/server/private-env.ts b/apps/web/libs/server/private-env.ts index 0e48507..18a8463 100644 --- a/apps/web/libs/server/private-env.ts +++ b/apps/web/libs/server/private-env.ts @@ -13,6 +13,7 @@ export const privateEnv = z GOOGLE_CLIENT_SECRET: z.string(), DATA_ENCRYPTION_KEY: z.string(), DISCORD_BOT_TOKEN: z.string(), + LOGGER_URI: z.string(), }) .parse({ NODE_ENV: process.env.NODE_ENV, @@ -24,4 +25,5 @@ export const privateEnv = z GOOGLE_CLIENT_SECRET: process.env.GOOGLE_CLIENT_SECRET, DATA_ENCRYPTION_KEY: process.env.DATA_ENCRYPTION_KEY, DISCORD_BOT_TOKEN: process.env.DISCORD_BOT_TOKEN, + LOGGER_URI: process.env.LOGGER_URI, }); diff --git a/apps/web/package.json b/apps/web/package.json index 98c2c12..98fef85 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -6,17 +6,22 @@ "@ant-design/nextjs-registry": "^1.0.0", "@auth/core": "0.21.0", "@divine-bridge/common": "workspace:^", + "@divine-bridge/eslint-config-custom": "workspace:^", + "@divine-bridge/prettier-config-custom": "workspace:^", "@eisberg-labs/next-google-analytics": "^5.0.1", "@react-oauth/google": "^0.12.1", "@types/node": "^20.11.16", "@types/react": "^18.2.55", "@types/react-dom": "^18.2.19", + "@vercel/analytics": "^1.2.2", "antd": "^5.14.0", - "axios": "^1.6.7", "bootstrap": "^5.3.2", "client-only": "^0.0.1", "dayjs": "^1.11.10", "discord-api-types": "^0.37.69", + "eslint": "^8.56.0", + "eslint-config-next": "14.1.0", + "eslint-plugin-import": "^2.29.1", "mongoose": "^8.1.1", "next": "14.1.0", "next-auth": "5.0.0-beta.5", @@ -30,13 +35,6 @@ "typescript": "^5.3.3", "zod": "^3.22.4" }, - "devDependencies": { - "@divine-bridge/eslint-config-custom": "workspace:^", - "@divine-bridge/prettier-config-custom": "workspace:^", - "eslint": "^8.56.0", - "eslint-config-next": "14.1.0", - "eslint-plugin-import": "^2.29.1" - }, "scripts": { "build": "next build", "dev": "next dev --turbo", diff --git a/package.json b/package.json index b163d5a..dde6cc1 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "husky": "^9.0.10", "lint-staged": "^15.2.1", "syncpack": "^12.3.0", - "turbo": "^1.12.3" + "turbo": "^1.12.4" }, "license": "MIT", "lint-staged": { @@ -19,13 +19,17 @@ "packageManager": "pnpm@8.15.3", "scripts": { "build": "turbo run build", + "deploy": "vercel --prod deploy", + "deploy:sls-check-membership": "turbo run deploy --filter sls-check-membership", + "deploy:sls-ocr": "turbo run deploy --filter sls-ocr", "dev": "turbo run dev", "dev:web": "turbo run dev --filter web --filter @divine-bridge/common", "format": "turbo run format", "lint": "turbo run lint", "preinstall": "npx only-allow pnpm", "prepare": "npx husky", - "start": "turbo run start" + "start": "turbo run start", + "test": "turbo run test" }, "syncpack": { "dependencyTypes": [ diff --git a/packages/common/package.json b/packages/common/package.json index 8d54df3..f30df64 100644 --- a/packages/common/package.json +++ b/packages/common/package.json @@ -4,6 +4,7 @@ "dependencies": { "@discordjs/builders": "^1.7.0", "@discordjs/rest": "^2.2.0", + "@divine-bridge/ocr-service": "workspace:^", "dayjs": "^1.11.10", "discord-api-types": "^0.37.69", "gaxios": "^6.2.0", @@ -11,6 +12,8 @@ "googleapis": "^132.0.0", "mongoose": "^8.1.1", "p-queue": "^8.0.1", + "pino": "^8.19.0", + "pino-abstract-transport": "^1.1.0", "tsup": "^8.0.1", "zod": "^3.22.4" }, @@ -25,8 +28,9 @@ "exports": "./dist/index.js", "main": "./dist/index.js", "scripts": { - "build": "tsup ./src/index.ts --format esm --dts-resolve --minify", - "dev": "tsup ./src/index.ts --format esm --dts-resolve --watch", + "build": "tsup --minify && pnpm run build:dts", + "build:dts": "tsc -p tsc-tsconfig.json --emitDeclarationOnly && echo \"\\033[1;35mDTS\\033[0m 🚀 Successfully Built\"", + "dev": "tsup --watch --onSuccess \"pnpm run build:dts\"", "format": "prettier --write .", "lint": "eslint ." }, diff --git a/packages/common/src/components/embeds.ts b/packages/common/src/components/embeds.ts index 0255e27..4c99f93 100644 --- a/packages/common/src/components/embeds.ts +++ b/packages/common/src/components/embeds.ts @@ -1,4 +1,5 @@ import { EmbedBuilder } from '@discordjs/builders'; +import type { RecognizedDate } from '@divine-bridge/ocr-service'; import dayjs from 'dayjs'; import utc from 'dayjs/plugin/utc.js'; @@ -7,7 +8,6 @@ import { MembershipRoleDoc } from '../models/membership-role.js'; import { MembershipDoc } from '../models/membership.js'; import { YouTubeChannelDoc } from '../models/youtube-channel.js'; import { UserPayload } from '../types/common.js'; -import { RecognizedDate } from '../types/common.js'; import { CommonUtils } from '../utils/common.js'; import { DiscordUtils } from '../utils/discord.js'; diff --git a/packages/common/src/services/app-event-log.ts b/packages/common/src/services/app-event-log.ts index 86942d8..45c2b8d 100644 --- a/packages/common/src/services/app-event-log.ts +++ b/packages/common/src/services/app-event-log.ts @@ -2,13 +2,15 @@ import { RESTPostAPIChannelMessageJSONBody } from 'discord-api-types/v10'; import { GuildCollection } from '../models/guild.js'; import { DiscordBotAPI } from './discord-bot-api.js'; +import type { Logger } from './system-log.js'; export class AppEventLogService { - private guildName: string; public guildOwnerId: string | null = null; public logChannelId: string | null = null; + private guildName: string; constructor( + private readonly logger: Logger, private readonly discordBotApi: DiscordBotAPI, private readonly guildId: string, ) { @@ -60,7 +62,7 @@ export class AppEventLogService { } } - console.error( + this.logger.error( `Failed to send event log to the log channel or DM the guild owner in guild ${this.guildId}.`, ); return false; diff --git a/packages/common/src/services/index.ts b/packages/common/src/services/index.ts index 2acfb61..ef0dc9b 100644 --- a/packages/common/src/services/index.ts +++ b/packages/common/src/services/index.ts @@ -2,6 +2,7 @@ export * from './app-event-log.js'; export * from './discord-bot-api.js'; export * from './discord-oauth-api.js'; export * from './google-oauth.js'; +export * from './system-log.js'; export * from './membership.js'; export * from './youtube-api-key-api.js'; export * from './youtube-oauth-api.js'; diff --git a/packages/common/src/services/membership.ts b/packages/common/src/services/membership.ts index 29b9d76..7d32586 100644 --- a/packages/common/src/services/membership.ts +++ b/packages/common/src/services/membership.ts @@ -160,17 +160,11 @@ export class MembershipService { ); // If the role is not removed, we stop when it's a manual removal - if (!roleRemoved) { - if (manual) { - return { - success: false, - error: 'Failed to remove the role from the member.', - }; - } else { - console.error( - `Failed to remove role <@&${membershipRoleId}> from user <@${userId}> in guild ${guildId}.`, - ); - } + if (!roleRemoved && manual) { + return { + success: false, + error: 'Failed to remove the role from the member.', + }; } // Remove membership record in DB diff --git a/packages/common/src/services/system-log.ts b/packages/common/src/services/system-log.ts new file mode 100644 index 0000000..f0182cb --- /dev/null +++ b/packages/common/src/services/system-log.ts @@ -0,0 +1,106 @@ +import { type Logger as L, type LevelWithSilentOrString, pino } from 'pino'; +import build from 'pino-abstract-transport'; +import { z } from 'zod'; + +export type Logger = L; + +/** + * Log messages to the OpenObserve platform. + */ +export class SystemLogService { + private readonly defaultLevelMap = { + 10: 'trace', + 20: 'debug', + 30: 'info', + 40: 'warn', + 50: 'error', + 60: 'fatal', + }; + private readonly logSchema = z.object({ + level: z.number(), + time: z.number(), + msg: z.unknown(), + }); + + public instance: L; + private readonly username: string; + private readonly password: string; + private readonly domain: string; + private readonly organization: string; + private readonly streamName: string; + private readonly identifier: string; + + constructor(uri: string, identifier: string, defaultLogLevel: LevelWithSilentOrString = 'info') { + // The URL class will throw an error if the URI is not valid + const parsedUrl = new URL(uri); + this.identifier = identifier; + + // Extract the username and password from the URL + this.username = decodeURIComponent(parsedUrl.username); + this.password = decodeURIComponent(parsedUrl.password); + + // Extract the hostname (without the scheme) + this.domain = parsedUrl.hostname; + + // Extract the path segments + const pathSegments = parsedUrl.pathname.split('/').filter((segment) => segment.length > 0); + + // Ensure the path has the expected number of segments for org and stream_name + if (pathSegments.length !== 3 || pathSegments[0] !== 'api') { + throw new Error('Invalid path in the URI. Expected format: /api/{org}/{stream_name}'); + } + + // Extract org and stream_name from the path + this.organization = pathSegments[1]; + this.streamName = pathSegments[2]; + + this.instance = pino( + { level: defaultLogLevel }, + pino.multistream([{ stream: process.stdout, level: defaultLogLevel }, this.openObserve()]), + ); + } + + private openObserve() { + return build(async (source) => { + for await (const log of source) { + void this.sendLog(log); + } + }); + } + + private async sendLog(log: unknown) { + try { + const { time, level, msg } = this.logSchema.parse(log); + + const response = await fetch( + `https://${this.domain}/api/${this.organization}/${this.streamName}/_multi`, + { + method: 'POST', + headers: { + 'Authorization': `Basic ${Buffer.from(`${this.username}:${this.password}`).toString('base64')}`, + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ + _timestamp: time, + date: new Date(time).toISOString(), + identifier: this.identifier, + level, + level_name: + level in this.defaultLevelMap + ? this.defaultLevelMap[level as keyof typeof this.defaultLevelMap] + : 'unknown', + msg, + }), + }, + ); + + if (response.ok) { + return; + } else { + console.error('Failed to send logs:', response.status, response.statusText); + } + } catch (error) { + console.error('Failed to send logs:', error); + } + } +} diff --git a/packages/common/src/services/youtube-oauth-api.ts b/packages/common/src/services/youtube-oauth-api.ts index 87c96fa..fb8eacf 100644 --- a/packages/common/src/services/youtube-oauth-api.ts +++ b/packages/common/src/services/youtube-oauth-api.ts @@ -1,13 +1,18 @@ import { google } from 'googleapis'; -import { YouTubeUtils } from '../index.js'; +import { Logger } from '../services/system-log.js'; import { GoogleUtils } from '../utils/google.js'; +import { YouTubeUtils } from '../utils/youtube.js'; import { GoogleOAuth } from './google-oauth.js'; export class YouTubeOAuthAPI { private readonly googleOAuth: GoogleOAuth; - constructor(googleOAuth: GoogleOAuth, refreshToken: string) { + constructor( + private readonly logger: Logger, + googleOAuth: GoogleOAuth, + refreshToken: string, + ) { // ? Prevent polluting the original GoogleOAuth instance this.googleOAuth = googleOAuth.clone(); this.googleOAuth.oauth2Client.setCredentials({ refresh_token: refreshToken }); @@ -36,7 +41,6 @@ export class YouTubeOAuthAPI { } return { success: true, channel: parsedChannel.data }; } catch (error) { - console.error(error); const { message } = GoogleUtils.parseError(error); return { success: false, error: message }; } @@ -77,13 +81,13 @@ export class YouTubeOAuthAPI { error: 'forbidden', }; } else if (reason === 'commentsDisabled') { - console.error(error); + this.logger.debug(error); return { success: false, error: 'comment_disabled', }; } else if (reason === 'videoNotFound') { - console.error(error); + this.logger.debug(error); return { success: false, error: 'video_not_found', @@ -107,7 +111,7 @@ export class YouTubeOAuthAPI { } } - console.error(error); + this.logger.error(error); return { success: false, error: 'unknown_error', diff --git a/packages/common/src/types/common.ts b/packages/common/src/types/common.ts index 797554a..99f066f 100644 --- a/packages/common/src/types/common.ts +++ b/packages/common/src/types/common.ts @@ -3,9 +3,3 @@ export interface UserPayload { name: string; image: string; } - -export interface RecognizedDate { - year: number | null; - month: number | null; - day: number | null; -} diff --git a/packages/common/src/utils/crypto.ts b/packages/common/src/utils/crypto.ts index f960bbf..9406405 100644 --- a/packages/common/src/utils/crypto.ts +++ b/packages/common/src/utils/crypto.ts @@ -11,21 +11,27 @@ export class CryptoUtils { this.key = Buffer.from(b64key, 'base64'); } - public encrypt(plain: string): string | null { + public encrypt( + plain: string, + ): { success: true; cipher: string } | { success: false; error: unknown } { try { const iv = crypto.randomBytes(this.keyBytes); // (this.keyBytes * 8)-bit IV const cipher = crypto.createCipheriv(this.algorithm, this.key, iv); let encrypted = cipher.update(plain, 'utf8', 'base64'); encrypted += cipher.final('base64'); - return Buffer.concat([iv, Buffer.from(encrypted, 'base64')]).toString('base64'); + return { + success: true, + cipher: Buffer.concat([iv, Buffer.from(encrypted, 'base64')]).toString('base64'), + }; } catch (error) { // Failed to encrypt - console.error(error); + return { success: false, error }; } - return null; } - public decrypt(b64cipher: string): string | null { + public decrypt( + b64cipher: string, + ): { success: true; plain: string } | { success: false; error: unknown } { try { const cipher = Buffer.from(b64cipher, 'base64'); const iv = cipher.subarray(0, this.keyBytes); @@ -34,11 +40,10 @@ export class CryptoUtils { let decrypted = decipher.update(encrypted, 'base64', 'utf8'); decrypted += decipher.final('utf8'); - return decrypted; + return { success: true, plain: decrypted }; } catch (error) { // Failed to decrypt - console.error(error); + return { success: false, error }; } - return null; } } diff --git a/packages/common/src/utils/queue.ts b/packages/common/src/utils/queue.ts index 7542d64..da80e04 100644 --- a/packages/common/src/utils/queue.ts +++ b/packages/common/src/utils/queue.ts @@ -19,23 +19,17 @@ export class Queue { } | { success: false; + error: unknown; } > { return await this.queue.add( async () => { try { const value = await cb(); - return { - success: true, - value, - }; + return { success: true, value }; } catch (error) { - console.error(`An error occurred while executing a ${this.name} job:`); - console.error(error); + return { success: false, error }; } - return { - success: false, - }; }, { throwOnTimeout: true, diff --git a/packages/common/tsc-tsconfig.json b/packages/common/tsc-tsconfig.json new file mode 100644 index 0000000..2c8cb96 --- /dev/null +++ b/packages/common/tsc-tsconfig.json @@ -0,0 +1,10 @@ +{ + "compilerOptions": { + "declaration": true, + "declarationMap": true, + "declarationDir": "./dist" + }, + "files": ["./src/index.ts"], + "extends": "./tsconfig.json", + "include": ["src/**/*.ts"] +} diff --git a/packages/common/tsconfig.json b/packages/common/tsconfig.json index 7407b7e..9807382 100644 --- a/packages/common/tsconfig.json +++ b/packages/common/tsconfig.json @@ -1,4 +1,4 @@ { "extends": "../../tsconfig.json", - "exclude": ["dist/**/*"] + "include": ["**/*.ts"] } diff --git a/packages/common/tsup.config.ts b/packages/common/tsup.config.ts new file mode 100644 index 0000000..c5f09d1 --- /dev/null +++ b/packages/common/tsup.config.ts @@ -0,0 +1,7 @@ +import { defineConfig } from 'tsup'; + +export default defineConfig({ + entry: ['./src/index.ts'], + outDir: './dist', + format: ['esm'], +}); diff --git a/packages/ocr-service/.eslintignore b/packages/ocr-service/.eslintignore new file mode 100644 index 0000000..7773828 --- /dev/null +++ b/packages/ocr-service/.eslintignore @@ -0,0 +1 @@ +dist/ \ No newline at end of file diff --git a/packages/ocr-service/.eslintrc.json b/packages/ocr-service/.eslintrc.json new file mode 100644 index 0000000..6738e10 --- /dev/null +++ b/packages/ocr-service/.eslintrc.json @@ -0,0 +1,11 @@ +{ + "overrides": [ + { + "files": ["tests/**/*"], + "env": { + "jest": true + } + } + ], + "extends": ["@divine-bridge/eslint-config-custom", "plugin:import-esm/recommended"] +} diff --git a/packages/ocr-service/.prettierrc b/packages/ocr-service/.prettierrc new file mode 100644 index 0000000..ad02c6a --- /dev/null +++ b/packages/ocr-service/.prettierrc @@ -0,0 +1 @@ +"@divine-bridge/prettier-config-custom" diff --git a/packages/ocr-service/jest.config.mjs b/packages/ocr-service/jest.config.mjs new file mode 100644 index 0000000..c10d386 --- /dev/null +++ b/packages/ocr-service/jest.config.mjs @@ -0,0 +1,17 @@ +/** @type {import('ts-jest').JestConfigWithTsJest} */ +export default { + preset: 'ts-jest/presets/default-esm', // or other ESM presets + moduleNameMapper: { + '^(\\.{1,2}/.*)\\.js$': '$1', + }, + transform: { + // '^.+\\.[tj]sx?$' to process js/ts with `ts-jest` + // '^.+\\.m?[tj]sx?$' to process js/ts/mjs/mts with `ts-jest` + '^.+\\.ts$': [ + 'ts-jest', + { + useESM: true, + }, + ], + }, +}; diff --git a/packages/ocr-service/package.json b/packages/ocr-service/package.json new file mode 100644 index 0000000..e8e05ed --- /dev/null +++ b/packages/ocr-service/package.json @@ -0,0 +1,32 @@ +{ + "name": "@divine-bridge/ocr-service", + "version": "0.0.1", + "dependencies": { + "tsup": "^8.0.1", + "zod": "^3.22.4" + }, + "devDependencies": { + "@divine-bridge/eslint-config-custom": "workspace:^", + "@divine-bridge/prettier-config-custom": "workspace:^", + "@jest/globals": "^29.7.0", + "dotenv": "^16.4.1", + "eslint": "^8.56.0", + "eslint-plugin-import-esm": "^1.2.1", + "jest": "^29.7.0", + "prettier": "^3.2.5", + "ts-jest": "^29.1.2", + "typescript": "^5.3.3" + }, + "exports": "./dist/index.js", + "main": "./dist/index.js", + "scripts": { + "build": "tsup --minify && pnpm run build:dts", + "build:dts": "tsc -p tsc-tsconfig.json --emitDeclarationOnly && echo \"\\033[1;35mDTS\\033[0m 🚀 Successfully Built\"", + "dev": "tsup --watch --onSuccess \"pnpm run build:dts\"", + "format": "prettier --write .", + "lint": "eslint .", + "test": "jest" + }, + "type": "module", + "types": "./dist/index.d.ts" +} diff --git a/packages/ocr-service/src/definitions.ts b/packages/ocr-service/src/definitions.ts new file mode 100644 index 0000000..1e4c964 --- /dev/null +++ b/packages/ocr-service/src/definitions.ts @@ -0,0 +1,13 @@ +export interface RecognizedDate { + year: number | null; + month: number | null; + day: number | null; +} + +export abstract class BillingDateParser { + public static readonly emptyDate: RecognizedDate = { year: null, month: null, day: null }; + + constructor(public readonly code: string) {} + + public abstract parse(lines: string[]): RecognizedDate; +} diff --git a/packages/ocr-service/src/index.ts b/packages/ocr-service/src/index.ts new file mode 100644 index 0000000..846b7de --- /dev/null +++ b/packages/ocr-service/src/index.ts @@ -0,0 +1,114 @@ +import { z } from 'zod'; + +import { RecognizedDate } from './definitions.js'; +import { type TSupportedLangCode, billingDateParsers } from './parsers.js'; + +export { supportedOCRLanguages } from './parsers.js'; +export type { RecognizedDate } from './definitions.js'; + +export class OCRService { + private readonly apiResponseSchema = z.object({ + message: z.string(), + }); + + constructor( + private readonly apiEndpoint: string, + private readonly apiKey: string, + ) {} + + public async recognizeBillingDate( + imageUrl: string, + langCode: TSupportedLangCode, + ): Promise< + | { success: true; date: RecognizedDate } + | { + success: false; + error: string; + } + > { + try { + const response = await fetch(this.apiEndpoint, { + method: 'POST', + body: JSON.stringify({ + image: imageUrl, + language: langCode, + }), + headers: { + Authorization: `Bearer ${this.apiKey}`, + }, + }); + const data = (await response.json()) as unknown; + + if (!response.ok) { + return { + success: false, + error: JSON.stringify(data), + }; + } + + const parsedData = this.apiResponseSchema.safeParse(data); + if (parsedData.success) { + const { message: rawText } = parsedData.data; + const parsedDateResult = this.parseDate(rawText, langCode); + return parsedDateResult.success + ? parsedDateResult + : { success: false, error: parsedDateResult.error }; + } + } catch (error) { + if (error instanceof Error) { + return { + success: false, + error: error.message, + }; + } + } + return { + success: false, + error: 'Unknown error', + }; + } + + private parseDate( + rawText: string, + langCode: TSupportedLangCode, + ): + | { + success: false; + error: string; + } + | { + success: true; + date: RecognizedDate; + } { + let text = rawText; + + /** + * post-process raw text + */ + + // replace full-width characters with half-width characters + text = text.replace(/[\uff01-\uff5e]/g, (c) => String.fromCharCode(c.charCodeAt(0) - 0xfee0)); + // replace small form variant colon + text = text.replace(/\ufe55/g, ':'); + // replace enclosed alphanumeric characters with their corresponding numbers + text = text.replace(/[\u2460-\u2468]/g, (c) => String.fromCharCode(c.charCodeAt(0) - 0x245f)); + text = text.replace(/[\u2469-\u2473]/g, (c) => (c.charCodeAt(0) - 0x245f).toString()); + // replace spaces with empty string + const lines = text.split('\n').map((line) => line.replace(/\s/g, '')); + + /** + * i18n date parser + */ + + const parser = Object.values(billingDateParsers).find(({ code }) => code === langCode); + if (parser === undefined) { + return { + success: false, + error: 'Unsupported language', + }; + } + const date = parser.parse(lines); + + return { success: true, date }; + } +} diff --git a/packages/ocr-service/src/parsers.ts b/packages/ocr-service/src/parsers.ts new file mode 100644 index 0000000..3eb2ef4 --- /dev/null +++ b/packages/ocr-service/src/parsers.ts @@ -0,0 +1,43 @@ +import { + ChiSimBillingDateParser, + ChiTraBillingDateParser, + DeuBillingDateParser, + EngBillingDateParser, + FilBillingDateParser, + IndBillingDateParser, + JpnBillingDateParser, + KorBillingDateParser, + MsaBillingDateParser, + ThaBillingDateParser, + VieBillingDateParser, +} from './parsers/index.js'; + +/* ======================================================================== */ + +/** + * For developers: you can extend this to support more languages + * */ +export const billingDateParsers = { + 'English': new EngBillingDateParser('eng'), + 'Chinese - Simplified': new ChiSimBillingDateParser('chi_sim'), + 'Chinese - Traditional': new ChiTraBillingDateParser('chi_tra'), + 'German': new DeuBillingDateParser('deu'), + 'Filipino': new FilBillingDateParser('fil'), + 'Indonesian': new IndBillingDateParser('ind'), + 'Japanese': new JpnBillingDateParser('jpn'), + 'Korean': new KorBillingDateParser('kor'), + 'Malay': new MsaBillingDateParser('msa'), + 'Thai': new ThaBillingDateParser('tha'), + 'Vietnamese': new VieBillingDateParser('vie'), +}; + +/* ======================================================================== */ + +export const supportedOCRLanguages = Object.entries(billingDateParsers).map( + ([language, parser]) => ({ + language: language as keyof typeof billingDateParsers, + code: parser.code, + }), +); + +export type TSupportedLangCode = (typeof supportedOCRLanguages)[number]['code']; diff --git a/packages/ocr-service/src/parsers/chi_sim.ts b/packages/ocr-service/src/parsers/chi_sim.ts new file mode 100644 index 0000000..115a137 --- /dev/null +++ b/packages/ocr-service/src/parsers/chi_sim.ts @@ -0,0 +1,17 @@ +import type { RecognizedDate } from '../definitions.js'; +import { BillingDateParser } from '../definitions.js'; + +export class ChiSimBillingDateParser implements BillingDateParser { + constructor(public readonly code: 'chi_sim') {} + parse(lines: string[]): RecognizedDate { + const regex = /结算日期:(\d{4})年(\d{1,2})月(\d{1,2})日/; + for (const line of lines) { + const match = line.match(regex); + if (match !== null) { + const [year, month, day] = match.slice(1, 4).map((s) => parseInt(s, 10)); + return { year, month, day }; + } + } + return BillingDateParser.emptyDate; + } +} diff --git a/packages/ocr-service/src/parsers/chi_tra.ts b/packages/ocr-service/src/parsers/chi_tra.ts new file mode 100644 index 0000000..3453060 --- /dev/null +++ b/packages/ocr-service/src/parsers/chi_tra.ts @@ -0,0 +1,17 @@ +import type { RecognizedDate } from '../definitions.js'; +import { BillingDateParser } from '../definitions.js'; + +export class ChiTraBillingDateParser implements BillingDateParser { + constructor(public readonly code: 'chi_tra') {} + parse(lines: string[]): RecognizedDate { + const regex = /帳單日期:(\d{4})年(\d{1,2})月(\d{1,2})日/; + for (const line of lines) { + const match = line.match(regex); + if (match !== null) { + const [year, month, day] = match.slice(1, 4).map((s) => parseInt(s, 10)); + return { year, month, day }; + } + } + return BillingDateParser.emptyDate; + } +} diff --git a/apps/server/src/services/ocr/parsers/deu.ts b/packages/ocr-service/src/parsers/deu.ts similarity index 50% rename from apps/server/src/services/ocr/parsers/deu.ts rename to packages/ocr-service/src/parsers/deu.ts index 467ec65..f1c439c 100644 --- a/apps/server/src/services/ocr/parsers/deu.ts +++ b/packages/ocr-service/src/parsers/deu.ts @@ -1,8 +1,9 @@ -import { OCRTypes } from '../types.js'; +import type { RecognizedDate } from '../definitions.js'; +import { BillingDateParser } from '../definitions.js'; -export class DeuBillingDateParser implements OCRTypes.BillingDateParser { - constructor(public readonly language: 'deu') {} - parse(lines: string[]): OCRTypes.RecognizedDate { +export class DeuBillingDateParser implements BillingDateParser { + constructor(public readonly code: 'deu') {} + parse(lines: string[]): RecognizedDate { const regex = /NächstesAbrechnungsdatum:(\d{1,2})\.(\d{1,2})\.(\d{4})/; for (const line of lines) { const match = line.match(regex); @@ -11,6 +12,6 @@ export class DeuBillingDateParser implements OCRTypes.BillingDateParser { return { year, month, day }; } } - return OCRTypes.BillingDateParser.emptyDate; + return BillingDateParser.emptyDate; } } diff --git a/apps/server/src/services/ocr/parsers/eng.ts b/packages/ocr-service/src/parsers/eng.ts similarity index 70% rename from apps/server/src/services/ocr/parsers/eng.ts rename to packages/ocr-service/src/parsers/eng.ts index 9508e40..8d15f48 100644 --- a/apps/server/src/services/ocr/parsers/eng.ts +++ b/packages/ocr-service/src/parsers/eng.ts @@ -1,8 +1,9 @@ -import { OCRTypes } from '../types.js'; +import type { RecognizedDate } from '../definitions.js'; +import { BillingDateParser } from '../definitions.js'; -export class EngBillingDateParser implements OCRTypes.BillingDateParser { - constructor(public readonly language: 'eng') {} - parse(lines: string[]): OCRTypes.RecognizedDate { +export class EngBillingDateParser implements BillingDateParser { + constructor(public readonly code: 'eng') {} + parse(lines: string[]): RecognizedDate { const regex = /Nextbillingdate:(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)(\d{1,2}),(\d{4})/; for (const line of lines) { @@ -28,6 +29,6 @@ export class EngBillingDateParser implements OCRTypes.BillingDateParser { return { year, month, day }; } } - return OCRTypes.BillingDateParser.emptyDate; + return BillingDateParser.emptyDate; } } diff --git a/apps/server/src/services/ocr/parsers/fil.ts b/packages/ocr-service/src/parsers/fil.ts similarity index 70% rename from apps/server/src/services/ocr/parsers/fil.ts rename to packages/ocr-service/src/parsers/fil.ts index 4dd9e3c..7a8f2ba 100644 --- a/apps/server/src/services/ocr/parsers/fil.ts +++ b/packages/ocr-service/src/parsers/fil.ts @@ -1,8 +1,9 @@ -import { OCRTypes } from '../types.js'; +import type { RecognizedDate } from '../definitions.js'; +import { BillingDateParser } from '../definitions.js'; -export class FilBillingDateParser implements OCRTypes.BillingDateParser { - constructor(public readonly language: 'fil') {} - parse(lines: string[]): OCRTypes.RecognizedDate { +export class FilBillingDateParser implements BillingDateParser { + constructor(public readonly code: 'fil') {} + parse(lines: string[]): RecognizedDate { const regex = /Susunodnapetsangpagsingil:(Ene|Peb|Mar|Abr|Mayo|Hun|Hul|Ago|Set|Okt|Nob|Dis)(\d{1,2}),(\d{4})/; for (const line of lines) { @@ -28,6 +29,6 @@ export class FilBillingDateParser implements OCRTypes.BillingDateParser { return { year, month, day }; } } - return OCRTypes.BillingDateParser.emptyDate; + return BillingDateParser.emptyDate; } } diff --git a/apps/server/src/services/ocr/parsers/ind.ts b/packages/ocr-service/src/parsers/ind.ts similarity index 70% rename from apps/server/src/services/ocr/parsers/ind.ts rename to packages/ocr-service/src/parsers/ind.ts index 7921cd3..b7f7517 100644 --- a/apps/server/src/services/ocr/parsers/ind.ts +++ b/packages/ocr-service/src/parsers/ind.ts @@ -1,8 +1,9 @@ -import { OCRTypes } from '../types.js'; +import type { RecognizedDate } from '../definitions.js'; +import { BillingDateParser } from '../definitions.js'; -export class IndBillingDateParser implements OCRTypes.BillingDateParser { - constructor(public readonly language: 'ind') {} - parse(lines: string[]): OCRTypes.RecognizedDate { +export class IndBillingDateParser implements BillingDateParser { + constructor(public readonly code: 'ind') {} + parse(lines: string[]): RecognizedDate { const regex = /Tanggalpenagihanberikutnya:(\d{1,2})(Jan|Feb|Mar|Apr|Mei|Jun|Jul|Agu|Sep|Okt|Nov|Des)(\d{4})/; for (const line of lines) { @@ -28,6 +29,6 @@ export class IndBillingDateParser implements OCRTypes.BillingDateParser { return { year, month, day }; } } - return OCRTypes.BillingDateParser.emptyDate; + return BillingDateParser.emptyDate; } } diff --git a/packages/ocr-service/src/parsers/index.ts b/packages/ocr-service/src/parsers/index.ts new file mode 100644 index 0000000..e558f3f --- /dev/null +++ b/packages/ocr-service/src/parsers/index.ts @@ -0,0 +1,11 @@ +export { ChiSimBillingDateParser } from './chi_sim.js'; +export { ChiTraBillingDateParser } from './chi_tra.js'; +export { DeuBillingDateParser } from './deu.js'; +export { EngBillingDateParser } from './eng.js'; +export { FilBillingDateParser } from './fil.js'; +export { IndBillingDateParser } from './ind.js'; +export { JpnBillingDateParser } from './jpn.js'; +export { KorBillingDateParser } from './kor.js'; +export { MsaBillingDateParser } from './msa.js'; +export { ThaBillingDateParser } from './tha.js'; +export { VieBillingDateParser } from './vie.js'; diff --git a/packages/ocr-service/src/parsers/jpn.ts b/packages/ocr-service/src/parsers/jpn.ts new file mode 100644 index 0000000..64b8444 --- /dev/null +++ b/packages/ocr-service/src/parsers/jpn.ts @@ -0,0 +1,17 @@ +import type { RecognizedDate } from '../definitions.js'; +import { BillingDateParser } from '../definitions.js'; + +export class JpnBillingDateParser implements BillingDateParser { + constructor(public readonly code: 'jpn') {} + parse(lines: string[]): RecognizedDate { + const regex = /次回請求日:(\d{4})\/(\d{2})\/(\d{2})/; + for (const line of lines) { + const match = line.match(regex); + if (match !== null) { + const [year, month, day] = match.slice(1, 4).map((s) => parseInt(s, 10)); + return { year, month, day }; + } + } + return BillingDateParser.emptyDate; + } +} diff --git a/apps/server/src/services/ocr/parsers/kor.ts b/packages/ocr-service/src/parsers/kor.ts similarity index 50% rename from apps/server/src/services/ocr/parsers/kor.ts rename to packages/ocr-service/src/parsers/kor.ts index 095407c..b457fee 100644 --- a/apps/server/src/services/ocr/parsers/kor.ts +++ b/packages/ocr-service/src/parsers/kor.ts @@ -1,8 +1,9 @@ -import { OCRTypes } from '../types.js'; +import type { RecognizedDate } from '../definitions.js'; +import { BillingDateParser } from '../definitions.js'; -export class KorBillingDateParser implements OCRTypes.BillingDateParser { - constructor(public readonly language: 'kor') {} - parse(lines: string[]): OCRTypes.RecognizedDate { +export class KorBillingDateParser implements BillingDateParser { + constructor(public readonly code: 'kor') {} + parse(lines: string[]): RecognizedDate { const regex = /다음결제일:(\d{4})\.(\d{1,2})\.(\d{1,2})\./; for (const line of lines) { const match = line.match(regex); @@ -11,6 +12,6 @@ export class KorBillingDateParser implements OCRTypes.BillingDateParser { return { year, month, day }; } } - return OCRTypes.BillingDateParser.emptyDate; + return BillingDateParser.emptyDate; } } diff --git a/apps/server/src/services/ocr/parsers/msa.ts b/packages/ocr-service/src/parsers/msa.ts similarity index 70% rename from apps/server/src/services/ocr/parsers/msa.ts rename to packages/ocr-service/src/parsers/msa.ts index ba8366a..2656127 100644 --- a/apps/server/src/services/ocr/parsers/msa.ts +++ b/packages/ocr-service/src/parsers/msa.ts @@ -1,8 +1,9 @@ -import { OCRTypes } from '../types.js'; +import type { RecognizedDate } from '../definitions.js'; +import { BillingDateParser } from '../definitions.js'; -export class MsaBillingDateParser implements OCRTypes.BillingDateParser { - constructor(public readonly language: 'msa') {} - parse(lines: string[]): OCRTypes.RecognizedDate { +export class MsaBillingDateParser implements BillingDateParser { + constructor(public readonly code: 'msa') {} + parse(lines: string[]): RecognizedDate { const regex = /Tarikhpengebilanseterusnya:(\d{1,2})(Jan|Feb|Mac|Apr|Mei|Jun|Jul|Ogos|Sep|Okt|Nov|Dis)(\d{4})/; for (const line of lines) { @@ -28,6 +29,6 @@ export class MsaBillingDateParser implements OCRTypes.BillingDateParser { return { year, month, day }; } } - return OCRTypes.BillingDateParser.emptyDate; + return BillingDateParser.emptyDate; } } diff --git a/apps/server/src/services/ocr/parsers/tha.ts b/packages/ocr-service/src/parsers/tha.ts similarity index 75% rename from apps/server/src/services/ocr/parsers/tha.ts rename to packages/ocr-service/src/parsers/tha.ts index 7fe726e..3a25dce 100644 --- a/apps/server/src/services/ocr/parsers/tha.ts +++ b/packages/ocr-service/src/parsers/tha.ts @@ -1,8 +1,9 @@ -import { OCRTypes } from '../types.js'; +import type { RecognizedDate } from '../definitions.js'; +import { BillingDateParser } from '../definitions.js'; -export class ThaBillingDateParser implements OCRTypes.BillingDateParser { - constructor(public readonly language: 'tha') {} - parse(lines: string[]): OCRTypes.RecognizedDate { +export class ThaBillingDateParser implements BillingDateParser { + constructor(public readonly code: 'tha') {} + parse(lines: string[]): RecognizedDate { const regex = /เรียกเก็บเงินครั้งถัดไปในวันที่(\d{1,2})(ม.ค.|ก.พ.|มี.ค.|เม.ย.|พ.ค.|มิ.ย.|ก.ค.|ส.ค.|ก.ย.|ต.ค.|พ.ย.|ธ.ค.)(\d{4})/; for (const line of lines) { @@ -28,6 +29,6 @@ export class ThaBillingDateParser implements OCRTypes.BillingDateParser { return { year, month, day }; } } - return OCRTypes.BillingDateParser.emptyDate; + return BillingDateParser.emptyDate; } } diff --git a/apps/server/src/services/ocr/parsers/vie.ts b/packages/ocr-service/src/parsers/vie.ts similarity index 50% rename from apps/server/src/services/ocr/parsers/vie.ts rename to packages/ocr-service/src/parsers/vie.ts index 73d9404..4339527 100644 --- a/apps/server/src/services/ocr/parsers/vie.ts +++ b/packages/ocr-service/src/parsers/vie.ts @@ -1,8 +1,9 @@ -import { OCRTypes } from '../types.js'; +import type { RecognizedDate } from '../definitions.js'; +import { BillingDateParser } from '../definitions.js'; -export class VieBillingDateParser implements OCRTypes.BillingDateParser { - constructor(public readonly language: 'vie') {} - parse(lines: string[]): OCRTypes.RecognizedDate { +export class VieBillingDateParser implements BillingDateParser { + constructor(public readonly code: 'vie') {} + parse(lines: string[]): RecognizedDate { const regex = /Ngàythanhtoántiếptheo:(\d{1,2})thg(\d{1,2}),(\d{4})/; for (const line of lines) { const match = line.match(regex); @@ -11,6 +12,6 @@ export class VieBillingDateParser implements OCRTypes.BillingDateParser { return { year, month, day }; } } - return OCRTypes.BillingDateParser.emptyDate; + return BillingDateParser.emptyDate; } } diff --git a/packages/ocr-service/tests/ocr.test.ts b/packages/ocr-service/tests/ocr.test.ts new file mode 100644 index 0000000..8fa1967 --- /dev/null +++ b/packages/ocr-service/tests/ocr.test.ts @@ -0,0 +1,170 @@ +/* eslint-disable turbo/no-undeclared-env-vars */ +import { beforeAll } from '@jest/globals'; +import { describe, expect, it } from '@jest/globals'; +import { config } from 'dotenv'; + +import { OCRService, type RecognizedDate, supportedOCRLanguages } from '../src/index.js'; + +config({ path: '.env.test.local' }); + +let ocrService: OCRService; + +const TIMEOUT = 30 * 1000; + +beforeAll(() => { + if (process.env.OCR_API_ENDPOINT === undefined || process.env.OCR_API_KEY === undefined) { + throw new Error('Please provide OCR_API_ENDPOINT and OCR_API_KEY in .env.test'); + } + ocrService = new OCRService(process.env.OCR_API_ENDPOINT, process.env.OCR_API_KEY); +}); + +const testMap: Record< + (typeof supportedOCRLanguages)[number]['code'], + { url: string; date: RecognizedDate } +> = { + eng: { + url: 'https://i.imgur.com/YXgHJGm.png', + date: { year: 2024, month: 3, day: 6 }, + }, + chi_sim: { + url: 'https://i.imgur.com/DTBquNF.png', + date: { year: 2024, month: 3, day: 6 }, + }, + chi_tra: { + url: 'https://i.imgur.com/p3wiZD3.png', + date: { year: 2024, month: 3, day: 6 }, + }, + deu: { + url: 'https://i.imgur.com/eYzCnni.png', + date: { year: 2024, month: 3, day: 6 }, + }, + fil: { + url: 'https://i.imgur.com/yqMDdJS.png', + date: { year: 2024, month: 3, day: 6 }, + }, + ind: { + url: 'https://i.imgur.com/erKLG7p.png', + date: { year: 2024, month: 3, day: 6 }, + }, + jpn: { + url: 'https://i.imgur.com/MUdFtam.png', + date: { year: 2024, month: 3, day: 6 }, + }, + kor: { + url: 'https://i.imgur.com/mnB29Fc.png', + date: { year: 2024, month: 3, day: 6 }, + }, + msa: { + url: 'https://i.imgur.com/QgnZT86.png', + date: { year: 2024, month: 3, day: 6 }, + }, + tha: { + url: 'https://i.imgur.com/yD87ey7.png', + date: { year: 2024, month: 3, day: 6 }, + }, + vie: { + url: 'https://i.imgur.com/DNwf1rY.png', + date: { year: 2024, month: 3, day: 6 }, + }, +}; + +describe('Test Membership screenshot OCR with different languages', () => { + it( + 'eng (English)', + async () => { + const result = await ocrService.recognizeBillingDate(testMap['eng'].url, 'eng'); + expect(result).toStrictEqual({ success: true, date: testMap['eng'].date }); + }, + TIMEOUT, + ); + + it( + 'chi_sim (Chinese Simplified)', + async () => { + const result = await ocrService.recognizeBillingDate(testMap['chi_sim'].url, 'chi_sim'); + expect(result).toStrictEqual({ success: true, date: testMap['chi_sim'].date }); + }, + TIMEOUT, + ); + + it( + 'chi_tra (Chinese Traditional)', + async () => { + const result = await ocrService.recognizeBillingDate(testMap['chi_tra'].url, 'chi_tra'); + expect(result).toStrictEqual({ success: true, date: testMap['chi_tra'].date }); + }, + TIMEOUT, + ); + + it( + 'deu (German)', + async () => { + const result = await ocrService.recognizeBillingDate(testMap['deu'].url, 'deu'); + expect(result).toStrictEqual({ success: true, date: testMap['deu'].date }); + }, + TIMEOUT, + ); + + it( + 'fil (Filipino)', + async () => { + const result = await ocrService.recognizeBillingDate(testMap['fil'].url, 'fil'); + expect(result).toStrictEqual({ success: true, date: testMap['fil'].date }); + }, + TIMEOUT, + ); + + it( + 'ind (Indonesian)', + async () => { + const result = await ocrService.recognizeBillingDate(testMap['ind'].url, 'ind'); + expect(result).toStrictEqual({ success: true, date: testMap['ind'].date }); + }, + TIMEOUT, + ); + + it( + 'jpn (Japanese)', + async () => { + const result = await ocrService.recognizeBillingDate(testMap['jpn'].url, 'jpn'); + expect(result).toStrictEqual({ success: true, date: testMap['jpn'].date }); + }, + TIMEOUT, + ); + + it( + 'kor (Korean)', + async () => { + const result = await ocrService.recognizeBillingDate(testMap['kor'].url, 'kor'); + expect(result).toStrictEqual({ success: true, date: testMap['kor'].date }); + }, + TIMEOUT, + ); + + it( + 'msa (Malay)', + async () => { + const result = await ocrService.recognizeBillingDate(testMap['msa'].url, 'msa'); + expect(result).toStrictEqual({ success: true, date: testMap['msa'].date }); + }, + TIMEOUT, + ); + + it( + 'tha (Thai)', + async () => { + const result = await ocrService.recognizeBillingDate(testMap['tha'].url, 'tha'); + expect(result).toStrictEqual({ success: true, date: testMap['tha'].date }); + }, + TIMEOUT, + ); + + it( + 'vie (Vietnamese)', + async () => { + const result = await ocrService.recognizeBillingDate(testMap['vie'].url, 'vie'); + expect(result).toStrictEqual({ success: true, date: testMap['vie'].date }); + }, + TIMEOUT, + ); +}); diff --git a/packages/ocr-service/tsc-tsconfig.json b/packages/ocr-service/tsc-tsconfig.json new file mode 100644 index 0000000..2c8cb96 --- /dev/null +++ b/packages/ocr-service/tsc-tsconfig.json @@ -0,0 +1,10 @@ +{ + "compilerOptions": { + "declaration": true, + "declarationMap": true, + "declarationDir": "./dist" + }, + "files": ["./src/index.ts"], + "extends": "./tsconfig.json", + "include": ["src/**/*.ts"] +} diff --git a/packages/ocr-service/tsconfig.json b/packages/ocr-service/tsconfig.json new file mode 100644 index 0000000..93514b4 --- /dev/null +++ b/packages/ocr-service/tsconfig.json @@ -0,0 +1,4 @@ +{ + "extends": "../../tsconfig.json", + "include": ["*.mjs", "**/*.ts"] +} diff --git a/packages/ocr-service/tsup.config.ts b/packages/ocr-service/tsup.config.ts new file mode 100644 index 0000000..c5f09d1 --- /dev/null +++ b/packages/ocr-service/tsup.config.ts @@ -0,0 +1,7 @@ +import { defineConfig } from 'tsup'; + +export default defineConfig({ + entry: ['./src/index.ts'], + outDir: './dist', + format: ['esm'], +}); diff --git a/packages/serverless-offline-lambda-function-urls/.eslintignore b/packages/serverless-offline-lambda-function-urls/.eslintignore new file mode 100644 index 0000000..0dc3912 --- /dev/null +++ b/packages/serverless-offline-lambda-function-urls/.eslintignore @@ -0,0 +1,2 @@ +dist/ +*.mjs \ No newline at end of file diff --git a/packages/serverless-offline-lambda-function-urls/.eslintrc.json b/packages/serverless-offline-lambda-function-urls/.eslintrc.json new file mode 100644 index 0000000..b94255c --- /dev/null +++ b/packages/serverless-offline-lambda-function-urls/.eslintrc.json @@ -0,0 +1,3 @@ +{ + "extends": ["@divine-bridge/eslint-config-custom", "plugin:import-esm/recommended"] +} diff --git a/packages/serverless-offline-lambda-function-urls/.prettierrc b/packages/serverless-offline-lambda-function-urls/.prettierrc new file mode 100644 index 0000000..ad02c6a --- /dev/null +++ b/packages/serverless-offline-lambda-function-urls/.prettierrc @@ -0,0 +1 @@ +"@divine-bridge/prettier-config-custom" diff --git a/packages/serverless-offline-lambda-function-urls/index.d.ts b/packages/serverless-offline-lambda-function-urls/index.d.ts new file mode 100644 index 0000000..569a2d9 --- /dev/null +++ b/packages/serverless-offline-lambda-function-urls/index.d.ts @@ -0,0 +1,38 @@ +import Serverless from 'serverless'; + +export default class ServerlessOfflineLambdaFunctionUrls { + private constructor(serverless: Serverless); + + getLambdas(functions: Record): Array<{ + functionKey: string; + functionDefinition: unknown; + }>; + + filterNonUrlEnabledFunctions(configuration: { + functions: Record; + }): Record; + + getEvents(functions: Record): Array<{ + functionKey: string; + handler: string; + http: { + routeKey: string; + payload: string; + isHttpApi: boolean; + path: string; + method: string; + }; + }>; + + getStage(): string; + + mergeServerlessOfflineOptions(options: Record): Record; + + getTranspiledHandlerFilepath(handler: string): string; + + getFullPath(...args: string[]): string; + + init(): Promise; + + cleanup(): void; +} diff --git a/packages/serverless-offline-lambda-function-urls/index.mjs b/packages/serverless-offline-lambda-function-urls/index.mjs new file mode 100644 index 0000000..bbd19b6 --- /dev/null +++ b/packages/serverless-offline-lambda-function-urls/index.mjs @@ -0,0 +1,124 @@ +import { existsSync } from 'node:fs'; +import { join, resolve } from 'node:path'; +import { cwd } from 'node:process'; + +export default class ServerlessOfflineLambdaFunctionUrls { + #http; + + constructor(serverless) { + const configuration = serverless.config.serverless.configurationInput; + this.serverless = serverless; + this.configuration = configuration; + this.hooks = { + 'offline:start:init': () => this.init(), + 'offline:functionsUpdated:cleanup': () => { + this.cleanup(); + this.init(); + }, + }; + } + getLambdas(functions) { + return Object.entries(functions).reduce( + (lambdas, [functionKey, functionDefinition]) => [ + ...lambdas, + { + functionKey, + functionDefinition: { + ...functionDefinition, + handler: this.getTranspiledHandlerFilepath(functionDefinition.handler), + }, + }, + ], + [], + ); + } + filterNonUrlEnabledFunctions(configuration) { + return Object.entries(configuration.functions).reduce( + (functions, [functionKey, functionDefinition]) => { + if (!functionDefinition.url) { + return functions; + } + return { ...functions, [functionKey]: functionDefinition }; + }, + {}, + ); + } + getEvents(functions) { + const stage = this.getStage(); + const verbs = this.configuration?.custom?.['serverless-offline'] + ?.urlLambdaFunctionsHttpVerbs ?? ['GET', 'POST']; + return Object.entries(functions).reduce((events, [functionKey, { handler }]) => { + const path = `/${stage}/${encodeURIComponent(functionKey)}`; + return events.concat( + verbs.map((verb) => ({ + functionKey, + handler, + http: { + routeKey: `${verb} ${path}`, + payload: '2.0', + isHttpApi: true, + path, + method: verb, + }, + })), + ); + }, []); + } + getStage() { + return this.serverless.variables.options?.stage ?? this.configuration.provider?.stage; + } + mergeServerlessOfflineOptions(options) { + const stage = this.getStage(); + const serverlessOfflineOptions = this.configuration?.custom?.['serverless-offline'] ?? {}; + return { + ...serverlessOfflineOptions, + stage, + host: serverlessOfflineOptions['host'] ?? '127.0.0.1', + httpPort: serverlessOfflineOptions['urlLambdaFunctionsHttpPort'] ?? 3003, + ...options, + }; + } + getTranspiledHandlerFilepath(handler) { + const webpackDir = existsSync(this.getFullPath('.webpack')); + if (webpackDir) { + return join('.webpack', 'service', handler); + } + const esbuildDir = existsSync(this.getFullPath('.esbuild')); + if (esbuildDir) { + return join('.esbuild', '.build', handler); + } + + return handler; + } + getFullPath(...args) { + return resolve(cwd(), ...args); + } + async init() { + const { default: Lambda } = await import( + this.getFullPath('node_modules', 'serverless-offline', 'src', 'lambda', 'Lambda.js') + ); + const { default: Http } = await import( + this.getFullPath('node_modules', 'serverless-offline', 'src', 'events', 'http', 'Http.js') + ); + const functions = this.filterNonUrlEnabledFunctions(this.configuration); + + const lambda = new Lambda( + this.serverless, + this.mergeServerlessOfflineOptions({ noTimeout: true }), + ); + lambda.create(this.getLambdas(functions)); + + this.#http = new Http(this.serverless, this.mergeServerlessOfflineOptions(), lambda); + + await this.#http.createServer(); + + this.#http.create(this.getEvents(functions)); + this.#http.createResourceRoutes(); + this.#http.create404Route(); + + await this.#http.start(); + } + cleanup() { + this.#http?.stop(); + } +} diff --git a/packages/serverless-offline-lambda-function-urls/package.json b/packages/serverless-offline-lambda-function-urls/package.json new file mode 100644 index 0000000..07f8df6 --- /dev/null +++ b/packages/serverless-offline-lambda-function-urls/package.json @@ -0,0 +1,20 @@ +{ + "name": "@divine-bridge/serverless-offline-lambda-function-urls", + "version": "0.0.1", + "devDependencies": { + "@divine-bridge/eslint-config-custom": "workspace:^", + "@divine-bridge/prettier-config-custom": "workspace:^", + "eslint": "^8.56.0", + "eslint-plugin-import-esm": "^1.2.1", + "prettier": "^3.2.5", + "typescript": "^5.3.3" + }, + "exports": "./index.mjs", + "main": "./index.mjs", + "scripts": { + "format": "prettier --write .", + "lint": "eslint ." + }, + "type": "module", + "types": "./index.d.ts" +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b8ff420..da81e91 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -18,8 +18,8 @@ importers: specifier: ^12.3.0 version: 12.3.0 turbo: - specifier: ^1.12.3 - version: 1.12.3 + specifier: ^1.12.4 + version: 1.12.4 apps/server: dependencies: @@ -35,6 +35,9 @@ importers: '@divine-bridge/common': specifier: workspace:^ version: link:../../packages/common + '@divine-bridge/ocr-service': + specifier: workspace:^ + version: link:../../packages/ocr-service '@panva/hkdf': specifier: ^1.1.1 version: 1.1.1 @@ -114,6 +117,9 @@ importers: '@divine-bridge/common': specifier: workspace:^ version: link:../../packages/common + '@divine-bridge/serverless-offline-lambda-function-urls': + specifier: workspace:^ + version: link:../../packages/serverless-offline-lambda-function-urls dayjs: specifier: ^1.11.10 version: 1.11.10 @@ -129,6 +135,9 @@ importers: mongoose: specifier: ^8.1.1 version: 8.1.1 + serverless-offline: + specifier: ^13.3.3 + version: 13.3.3(serverless@3.38.0) zod: specifier: ^3.22.4 version: 3.22.4 @@ -153,7 +162,7 @@ importers: version: 3.2.5 serverless: specifier: ^3.38.0 - version: 3.38.0(@aws-sdk/credential-provider-node@3.511.0) + version: 3.38.0(@aws-sdk/credential-provider-node@3.515.0) serverless-dotenv-plugin: specifier: ^6.0.0 version: 6.0.0(serverless@3.38.0) @@ -166,15 +175,21 @@ importers: apps/sls-ocr: dependencies: + '@divine-bridge/common': + specifier: workspace:^ + version: link:../../packages/common + '@divine-bridge/ocr-service': + specifier: workspace:^ + version: link:../../packages/ocr-service + '@divine-bridge/serverless-offline-lambda-function-urls': + specifier: workspace:^ + version: link:../../packages/serverless-offline-lambda-function-urls bmp-js: specifier: ^0.1.0 version: 0.1.0 esbuild: specifier: ^0.20.0 version: 0.20.0 - express: - specifier: ^4.18.2 - version: 4.18.2 idb-keyval: specifier: ^6.2.0 version: 6.2.1 @@ -190,6 +205,12 @@ importers: regenerator-runtime: specifier: ^0.13.3 version: 0.13.11 + serverless-offline: + specifier: ^13.3.3 + version: 13.3.3(serverless@3.38.0) + serverless-offline-lambda-function-urls: + specifier: ^1.0.3 + version: 1.0.3(serverless-offline@13.3.3)(serverless@3.38.0) tesseract.js: specifier: ^5.0.4 version: 5.0.4 @@ -221,9 +242,12 @@ importers: '@divine-bridge/prettier-config-custom': specifier: workspace:^ version: link:../../packages/prettier-config-custom - '@types/express': - specifier: ^4.17.21 - version: 4.17.21 + '@types/aws-lambda': + specifier: ^8.10.133 + version: 8.10.133 + '@types/node': + specifier: ^20.11.16 + version: 20.11.16 eslint: specifier: ^8.56.0 version: 8.56.0 @@ -235,19 +259,13 @@ importers: version: 3.2.5 serverless: specifier: ^3.38.0 - version: 3.38.0(@aws-sdk/credential-provider-node@3.511.0) + version: 3.38.0(@aws-sdk/credential-provider-node@3.515.0) serverless-dotenv-plugin: specifier: ^6.0.0 version: 6.0.0(serverless@3.38.0) serverless-esbuild: specifier: ^1.51.0 version: 1.51.0(esbuild@0.20.0) - serverless-http: - specifier: ^3.2.0 - version: 3.2.0 - serverless-offline: - specifier: ^13.3.3 - version: 13.3.3(serverless@3.38.0) typescript: specifier: ^5.3.3 version: 5.3.3 @@ -266,6 +284,12 @@ importers: '@divine-bridge/common': specifier: workspace:^ version: link:../../packages/common + '@divine-bridge/eslint-config-custom': + specifier: workspace:^ + version: link:../../packages/eslint-config-custom + '@divine-bridge/prettier-config-custom': + specifier: workspace:^ + version: link:../../packages/prettier-config-custom '@eisberg-labs/next-google-analytics': specifier: ^5.0.1 version: 5.0.1(next@14.1.0)(react-dom@18.2.0)(react@18.2.0) @@ -281,12 +305,12 @@ importers: '@types/react-dom': specifier: ^18.2.19 version: 18.2.19 + '@vercel/analytics': + specifier: ^1.2.2 + version: 1.2.2(next@14.1.0)(react@18.2.0) antd: specifier: ^5.14.0 version: 5.14.0(react-dom@18.2.0)(react@18.2.0) - axios: - specifier: ^1.6.7 - version: 1.6.7 bootstrap: specifier: ^5.3.2 version: 5.3.2(@popperjs/core@2.11.8) @@ -299,6 +323,15 @@ importers: discord-api-types: specifier: ^0.37.69 version: 0.37.69 + eslint: + specifier: ^8.56.0 + version: 8.56.0 + eslint-config-next: + specifier: 14.1.0 + version: 14.1.0(eslint@8.56.0)(typescript@5.3.3) + eslint-plugin-import: + specifier: ^2.29.1 + version: 2.29.1(@typescript-eslint/parser@6.20.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) mongoose: specifier: ^8.1.1 version: 8.1.1 @@ -335,22 +368,6 @@ importers: zod: specifier: ^3.22.4 version: 3.22.4 - devDependencies: - '@divine-bridge/eslint-config-custom': - specifier: workspace:^ - version: link:../../packages/eslint-config-custom - '@divine-bridge/prettier-config-custom': - specifier: workspace:^ - version: link:../../packages/prettier-config-custom - eslint: - specifier: ^8.56.0 - version: 8.56.0 - eslint-config-next: - specifier: 14.1.0 - version: 14.1.0(eslint@8.56.0)(typescript@5.3.3) - eslint-plugin-import: - specifier: ^2.29.1 - version: 2.29.1(@typescript-eslint/parser@6.20.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) packages/common: dependencies: @@ -360,6 +377,9 @@ importers: '@discordjs/rest': specifier: ^2.2.0 version: 2.2.0 + '@divine-bridge/ocr-service': + specifier: workspace:^ + version: link:../ocr-service dayjs: specifier: ^1.11.10 version: 1.11.10 @@ -381,6 +401,12 @@ importers: p-queue: specifier: ^8.0.1 version: 8.0.1 + pino: + specifier: ^8.19.0 + version: 8.19.0 + pino-abstract-transport: + specifier: ^1.1.0 + version: 1.1.0 tsup: specifier: ^8.0.1 version: 8.0.1(typescript@5.3.3) @@ -441,6 +467,46 @@ importers: specifier: workspace:^ version: link:../prettier-config-custom + packages/ocr-service: + dependencies: + tsup: + specifier: ^8.0.1 + version: 8.0.1(typescript@5.3.3) + zod: + specifier: ^3.22.4 + version: 3.22.4 + devDependencies: + '@divine-bridge/eslint-config-custom': + specifier: workspace:^ + version: link:../eslint-config-custom + '@divine-bridge/prettier-config-custom': + specifier: workspace:^ + version: link:../prettier-config-custom + '@jest/globals': + specifier: ^29.7.0 + version: 29.7.0 + dotenv: + specifier: ^16.4.1 + version: 16.4.1 + eslint: + specifier: ^8.56.0 + version: 8.56.0 + eslint-plugin-import-esm: + specifier: ^1.2.1 + version: 1.2.1(eslint@8.56.0) + jest: + specifier: ^29.7.0 + version: 29.7.0 + prettier: + specifier: ^3.2.5 + version: 3.2.5 + ts-jest: + specifier: ^29.1.2 + version: 29.1.2(@babel/core@7.23.9)(esbuild@0.19.12)(jest@29.7.0)(typescript@5.3.3) + typescript: + specifier: ^5.3.3 + version: 5.3.3 + packages/prettier-config-custom: dependencies: '@trivago/prettier-plugin-sort-imports': @@ -450,6 +516,27 @@ importers: specifier: ^3.2.5 version: 3.2.5 + packages/serverless-offline-lambda-function-urls: + devDependencies: + '@divine-bridge/eslint-config-custom': + specifier: workspace:^ + version: link:../eslint-config-custom + '@divine-bridge/prettier-config-custom': + specifier: workspace:^ + version: link:../prettier-config-custom + eslint: + specifier: ^8.56.0 + version: 8.56.0 + eslint-plugin-import-esm: + specifier: ^1.2.1 + version: 1.2.1(eslint@8.56.0) + prettier: + specifier: ^3.2.5 + version: 3.2.5 + typescript: + specifier: ^5.3.3 + version: 5.3.3 + packages: /2-thenable@1.0.0: @@ -457,12 +544,19 @@ packages: dependencies: d: 1.0.1 es5-ext: 0.10.62 - dev: true /@aashutoshrathi/word-wrap@1.2.6: resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} engines: {node: '>=0.10.0'} + /@ampproject/remapping@2.2.1: + resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} + engines: {node: '>=6.0.0'} + dependencies: + '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/trace-mapping': 0.3.22 + dev: true + /@ant-design/colors@7.0.2: resolution: {integrity: sha512-7KJkhTiPiLHSu+LmMJnehfJ6242OCxSlR3xHVBecYxnMW8MS/878NXct1GqYARyL59fyeFdKRxXTfvR9SnDgJg==} dependencies: @@ -558,13 +652,11 @@ packages: '@aws-crypto/util': 3.0.0 '@aws-sdk/types': 3.511.0 tslib: 1.14.1 - dev: true /@aws-crypto/ie11-detection@3.0.0: resolution: {integrity: sha512-341lBBkiY1DfDNKai/wXM3aujNBkXR7tq1URPQDL9wi3AUbI80NR74uF1TXHMm7po1AcnFk8iu2S2IeU/+/A+Q==} dependencies: tslib: 1.14.1 - dev: true /@aws-crypto/sha256-browser@3.0.0: resolution: {integrity: sha512-8VLmW2B+gjFbU5uMeqtQM6Nj0/F1bro80xQXCW6CQBWgosFWXTx77aeOF5CAIAmbOK64SdMBJdNr6J41yP5mvQ==} @@ -577,7 +669,6 @@ packages: '@aws-sdk/util-locate-window': 3.495.0 '@aws-sdk/util-utf8-browser': 3.259.0 tslib: 1.14.1 - dev: true /@aws-crypto/sha256-js@3.0.0: resolution: {integrity: sha512-PnNN7os0+yd1XvXAy23CFOmTbMaDxgxXtTKHybrJ39Y8kGzBATgBFibWJKH6BhytLI/Zyszs87xCOBNyBig6vQ==} @@ -585,13 +676,11 @@ packages: '@aws-crypto/util': 3.0.0 '@aws-sdk/types': 3.511.0 tslib: 1.14.1 - dev: true /@aws-crypto/supports-web-crypto@3.0.0: resolution: {integrity: sha512-06hBdMwUAb2WFTuGG73LSC0wfPu93xWwo5vL2et9eymgmu3Id5vFAHBbajVWiGhPO37qcsdCap/FqXvJGJWPIg==} dependencies: tslib: 1.14.1 - dev: true /@aws-crypto/util@3.0.0: resolution: {integrity: sha512-2OJlpeJpCR48CC8r+uKVChzs9Iungj9wkZrl8Z041DWEWvyIHILYKCPNzJghKsivj+S3mLo6BVc7mBNzdxA46w==} @@ -599,7 +688,6 @@ packages: '@aws-sdk/types': 3.511.0 '@aws-sdk/util-utf8-browser': 3.259.0 tslib: 1.14.1 - dev: true /@aws-sdk/client-cloudformation@3.511.0: resolution: {integrity: sha512-FR41v2xzMGXKM+QiV+3XktKuCR6VwOvhoRjbCwECIhrvOaUGdXi0XMVCD1aSFocwxDN5aa96piD7gexkXRF91A==} @@ -650,32 +738,30 @@ packages: uuid: 8.3.2 transitivePeerDependencies: - aws-crt - dev: true - /@aws-sdk/client-lambda@3.511.0: - resolution: {integrity: sha512-zJVszZcdEOit+hxqZc3sb0MsgpYfbygjKNYsWTSj4YMjZBT+bzSqi/4dE/VJPGvvchU61jJLnqafJXc6GBPVxA==} + /@aws-sdk/client-lambda@3.518.0: + resolution: {integrity: sha512-y7P7iXTcwOITMmvx2eQgAhHU9qCYXw/3Dt/sMbNtX1YGLJm3B2J/j8kl4F6JjYM2LKtkUGIslHVuzJa2K/Ua5g==} engines: {node: '>=14.0.0'} dependencies: '@aws-crypto/sha256-browser': 3.0.0 '@aws-crypto/sha256-js': 3.0.0 - '@aws-sdk/client-sts': 3.511.0(@aws-sdk/credential-provider-node@3.511.0) - '@aws-sdk/core': 3.511.0 - '@aws-sdk/credential-provider-node': 3.511.0 - '@aws-sdk/middleware-host-header': 3.511.0 - '@aws-sdk/middleware-logger': 3.511.0 - '@aws-sdk/middleware-recursion-detection': 3.511.0 - '@aws-sdk/middleware-signing': 3.511.0 - '@aws-sdk/middleware-user-agent': 3.511.0 - '@aws-sdk/region-config-resolver': 3.511.0 - '@aws-sdk/types': 3.511.0 - '@aws-sdk/util-endpoints': 3.511.0 - '@aws-sdk/util-user-agent-browser': 3.511.0 - '@aws-sdk/util-user-agent-node': 3.511.0 + '@aws-sdk/client-sts': 3.515.0(@aws-sdk/credential-provider-node@3.515.0) + '@aws-sdk/core': 3.513.0 + '@aws-sdk/credential-provider-node': 3.515.0 + '@aws-sdk/middleware-host-header': 3.515.0 + '@aws-sdk/middleware-logger': 3.515.0 + '@aws-sdk/middleware-recursion-detection': 3.515.0 + '@aws-sdk/middleware-user-agent': 3.515.0 + '@aws-sdk/region-config-resolver': 3.515.0 + '@aws-sdk/types': 3.515.0 + '@aws-sdk/util-endpoints': 3.515.0 + '@aws-sdk/util-user-agent-browser': 3.515.0 + '@aws-sdk/util-user-agent-node': 3.515.0 '@smithy/config-resolver': 2.1.1 '@smithy/core': 1.3.2 - '@smithy/eventstream-serde-browser': 2.1.1 - '@smithy/eventstream-serde-config-resolver': 2.1.1 - '@smithy/eventstream-serde-node': 2.1.1 + '@smithy/eventstream-serde-browser': 2.1.2 + '@smithy/eventstream-serde-config-resolver': 2.1.2 + '@smithy/eventstream-serde-node': 2.1.2 '@smithy/fetch-http-handler': 2.4.1 '@smithy/hash-node': 2.1.1 '@smithy/invalid-dependency': 2.1.1 @@ -688,7 +774,7 @@ packages: '@smithy/node-http-handler': 2.3.1 '@smithy/protocol-http': 3.1.1 '@smithy/smithy-client': 2.3.1 - '@smithy/types': 2.9.1 + '@smithy/types': 2.10.0 '@smithy/url-parser': 2.1.1 '@smithy/util-base64': 2.1.1 '@smithy/util-body-length-browser': 2.1.1 @@ -696,6 +782,7 @@ packages: '@smithy/util-defaults-mode-browser': 2.1.1 '@smithy/util-defaults-mode-node': 2.2.0 '@smithy/util-endpoints': 1.1.1 + '@smithy/util-middleware': 2.1.1 '@smithy/util-retry': 2.1.1 '@smithy/util-stream': 2.1.1 '@smithy/util-utf8': 2.1.1 @@ -703,7 +790,7 @@ packages: tslib: 2.6.2 transitivePeerDependencies: - aws-crt - dev: true + dev: false /@aws-sdk/client-sso-oidc@3.511.0(@aws-sdk/credential-provider-node@3.511.0): resolution: {integrity: sha512-cITRRq54eTrq7ll9li+yYnLbNHKXG2P+ovdZSDiQ6LjCYBdcD4ela30qbs87Yye9YsopdslDzBhHHtrf5oiuMw==} @@ -753,7 +840,55 @@ packages: tslib: 2.6.2 transitivePeerDependencies: - aws-crt - dev: true + + /@aws-sdk/client-sso-oidc@3.515.0(@aws-sdk/credential-provider-node@3.515.0): + resolution: {integrity: sha512-zACa8LNlPUdlNUBqQRf5a3MfouLNtcBfm84v2c8M976DwJrMGONPe1QjyLLsD38uESQiXiVQRruj/b000iMXNw==} + engines: {node: '>=14.0.0'} + peerDependencies: + '@aws-sdk/credential-provider-node': ^3.515.0 + dependencies: + '@aws-crypto/sha256-browser': 3.0.0 + '@aws-crypto/sha256-js': 3.0.0 + '@aws-sdk/client-sts': 3.515.0(@aws-sdk/credential-provider-node@3.515.0) + '@aws-sdk/core': 3.513.0 + '@aws-sdk/credential-provider-node': 3.515.0 + '@aws-sdk/middleware-host-header': 3.515.0 + '@aws-sdk/middleware-logger': 3.515.0 + '@aws-sdk/middleware-recursion-detection': 3.515.0 + '@aws-sdk/middleware-user-agent': 3.515.0 + '@aws-sdk/region-config-resolver': 3.515.0 + '@aws-sdk/types': 3.515.0 + '@aws-sdk/util-endpoints': 3.515.0 + '@aws-sdk/util-user-agent-browser': 3.515.0 + '@aws-sdk/util-user-agent-node': 3.515.0 + '@smithy/config-resolver': 2.1.1 + '@smithy/core': 1.3.2 + '@smithy/fetch-http-handler': 2.4.1 + '@smithy/hash-node': 2.1.1 + '@smithy/invalid-dependency': 2.1.1 + '@smithy/middleware-content-length': 2.1.1 + '@smithy/middleware-endpoint': 2.4.1 + '@smithy/middleware-retry': 2.1.1 + '@smithy/middleware-serde': 2.1.1 + '@smithy/middleware-stack': 2.1.1 + '@smithy/node-config-provider': 2.2.1 + '@smithy/node-http-handler': 2.3.1 + '@smithy/protocol-http': 3.1.1 + '@smithy/smithy-client': 2.3.1 + '@smithy/types': 2.10.0 + '@smithy/url-parser': 2.1.1 + '@smithy/util-base64': 2.1.1 + '@smithy/util-body-length-browser': 2.1.1 + '@smithy/util-body-length-node': 2.2.1 + '@smithy/util-defaults-mode-browser': 2.1.1 + '@smithy/util-defaults-mode-node': 2.2.0 + '@smithy/util-endpoints': 1.1.1 + '@smithy/util-middleware': 2.1.1 + '@smithy/util-retry': 2.1.1 + '@smithy/util-utf8': 2.1.1 + tslib: 2.6.2 + transitivePeerDependencies: + - aws-crt /@aws-sdk/client-sso@3.511.0: resolution: {integrity: sha512-v1f5ZbuZWpad+fgTOpgFyIZT3A37wdqoSPh0hl+cKRu5kPsz96xCe9+UvLx+HdN2yJ/mV0UZcMq6ysj4xAGIEg==} @@ -798,7 +933,51 @@ packages: tslib: 2.6.2 transitivePeerDependencies: - aws-crt - dev: true + + /@aws-sdk/client-sso@3.515.0: + resolution: {integrity: sha512-4oGBLW476zmkdN98lAns3bObRNO+DLOfg4MDUSR6l6GYBV/zGAtoy2O/FhwYKgA2L5h2ZtElGopLlk/1Q0ePLw==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-crypto/sha256-browser': 3.0.0 + '@aws-crypto/sha256-js': 3.0.0 + '@aws-sdk/core': 3.513.0 + '@aws-sdk/middleware-host-header': 3.515.0 + '@aws-sdk/middleware-logger': 3.515.0 + '@aws-sdk/middleware-recursion-detection': 3.515.0 + '@aws-sdk/middleware-user-agent': 3.515.0 + '@aws-sdk/region-config-resolver': 3.515.0 + '@aws-sdk/types': 3.515.0 + '@aws-sdk/util-endpoints': 3.515.0 + '@aws-sdk/util-user-agent-browser': 3.515.0 + '@aws-sdk/util-user-agent-node': 3.515.0 + '@smithy/config-resolver': 2.1.1 + '@smithy/core': 1.3.2 + '@smithy/fetch-http-handler': 2.4.1 + '@smithy/hash-node': 2.1.1 + '@smithy/invalid-dependency': 2.1.1 + '@smithy/middleware-content-length': 2.1.1 + '@smithy/middleware-endpoint': 2.4.1 + '@smithy/middleware-retry': 2.1.1 + '@smithy/middleware-serde': 2.1.1 + '@smithy/middleware-stack': 2.1.1 + '@smithy/node-config-provider': 2.2.1 + '@smithy/node-http-handler': 2.3.1 + '@smithy/protocol-http': 3.1.1 + '@smithy/smithy-client': 2.3.1 + '@smithy/types': 2.10.0 + '@smithy/url-parser': 2.1.1 + '@smithy/util-base64': 2.1.1 + '@smithy/util-body-length-browser': 2.1.1 + '@smithy/util-body-length-node': 2.2.1 + '@smithy/util-defaults-mode-browser': 2.1.1 + '@smithy/util-defaults-mode-node': 2.2.0 + '@smithy/util-endpoints': 1.1.1 + '@smithy/util-middleware': 2.1.1 + '@smithy/util-retry': 2.1.1 + '@smithy/util-utf8': 2.1.1 + tslib: 2.6.2 + transitivePeerDependencies: + - aws-crt /@aws-sdk/client-sts@3.511.0(@aws-sdk/credential-provider-node@3.511.0): resolution: {integrity: sha512-lwVEEXK+1auEwmBuTv35m2GvbxPthi8SjNUpU4pRetZPVbGhnhCN6H7JqeMDP6GLf81Io2eySXRsmLMt7l/fjg==} @@ -848,29 +1027,144 @@ packages: tslib: 2.6.2 transitivePeerDependencies: - aws-crt - dev: true - /@aws-sdk/core@3.511.0: - resolution: {integrity: sha512-0gbDvQhToyLxPyr/7KP6uavrBYKh7exld2lju1Lp65U61XgEjTVP/thJmHTvH4BAKGSqeIz/rrwJ0KrC8nwBtw==} + /@aws-sdk/client-sts@3.511.0(@aws-sdk/credential-provider-node@3.515.0): + resolution: {integrity: sha512-lwVEEXK+1auEwmBuTv35m2GvbxPthi8SjNUpU4pRetZPVbGhnhCN6H7JqeMDP6GLf81Io2eySXRsmLMt7l/fjg==} engines: {node: '>=14.0.0'} + peerDependencies: + '@aws-sdk/credential-provider-node': ^3.511.0 dependencies: + '@aws-crypto/sha256-browser': 3.0.0 + '@aws-crypto/sha256-js': 3.0.0 + '@aws-sdk/core': 3.511.0 + '@aws-sdk/credential-provider-node': 3.515.0 + '@aws-sdk/middleware-host-header': 3.511.0 + '@aws-sdk/middleware-logger': 3.511.0 + '@aws-sdk/middleware-recursion-detection': 3.511.0 + '@aws-sdk/middleware-user-agent': 3.511.0 + '@aws-sdk/region-config-resolver': 3.511.0 + '@aws-sdk/types': 3.511.0 + '@aws-sdk/util-endpoints': 3.511.0 + '@aws-sdk/util-user-agent-browser': 3.511.0 + '@aws-sdk/util-user-agent-node': 3.511.0 + '@smithy/config-resolver': 2.1.1 '@smithy/core': 1.3.2 + '@smithy/fetch-http-handler': 2.4.1 + '@smithy/hash-node': 2.1.1 + '@smithy/invalid-dependency': 2.1.1 + '@smithy/middleware-content-length': 2.1.1 + '@smithy/middleware-endpoint': 2.4.1 + '@smithy/middleware-retry': 2.1.1 + '@smithy/middleware-serde': 2.1.1 + '@smithy/middleware-stack': 2.1.1 + '@smithy/node-config-provider': 2.2.1 + '@smithy/node-http-handler': 2.3.1 '@smithy/protocol-http': 3.1.1 - '@smithy/signature-v4': 2.1.1 '@smithy/smithy-client': 2.3.1 '@smithy/types': 2.9.1 + '@smithy/url-parser': 2.1.1 + '@smithy/util-base64': 2.1.1 + '@smithy/util-body-length-browser': 2.1.1 + '@smithy/util-body-length-node': 2.2.1 + '@smithy/util-defaults-mode-browser': 2.1.1 + '@smithy/util-defaults-mode-node': 2.2.0 + '@smithy/util-endpoints': 1.1.1 + '@smithy/util-middleware': 2.1.1 + '@smithy/util-retry': 2.1.1 + '@smithy/util-utf8': 2.1.1 + fast-xml-parser: 4.2.5 tslib: 2.6.2 - dev: true + transitivePeerDependencies: + - aws-crt - /@aws-sdk/credential-provider-env@3.511.0: - resolution: {integrity: sha512-4VUsnLRox8YzxnZwnFrfZM4bL5KKLhsjjjX7oiuLyzFkhauI4HFYt7rTB8YNGphpqAg/Wzw5DBZfO3Bw1iR1HA==} + /@aws-sdk/client-sts@3.515.0(@aws-sdk/credential-provider-node@3.515.0): + resolution: {integrity: sha512-ScYuvaIDgip3atOJIA1FU2n0gJkEdveu1KrrCPathoUCV5zpK8qQmO/n+Fj/7hKFxeKdFbB+4W4CsJWYH94nlg==} engines: {node: '>=14.0.0'} + peerDependencies: + '@aws-sdk/credential-provider-node': ^3.515.0 dependencies: - '@aws-sdk/types': 3.511.0 - '@smithy/property-provider': 2.1.1 - '@smithy/types': 2.9.1 - tslib: 2.6.2 - dev: true + '@aws-crypto/sha256-browser': 3.0.0 + '@aws-crypto/sha256-js': 3.0.0 + '@aws-sdk/core': 3.513.0 + '@aws-sdk/credential-provider-node': 3.515.0 + '@aws-sdk/middleware-host-header': 3.515.0 + '@aws-sdk/middleware-logger': 3.515.0 + '@aws-sdk/middleware-recursion-detection': 3.515.0 + '@aws-sdk/middleware-user-agent': 3.515.0 + '@aws-sdk/region-config-resolver': 3.515.0 + '@aws-sdk/types': 3.515.0 + '@aws-sdk/util-endpoints': 3.515.0 + '@aws-sdk/util-user-agent-browser': 3.515.0 + '@aws-sdk/util-user-agent-node': 3.515.0 + '@smithy/config-resolver': 2.1.1 + '@smithy/core': 1.3.2 + '@smithy/fetch-http-handler': 2.4.1 + '@smithy/hash-node': 2.1.1 + '@smithy/invalid-dependency': 2.1.1 + '@smithy/middleware-content-length': 2.1.1 + '@smithy/middleware-endpoint': 2.4.1 + '@smithy/middleware-retry': 2.1.1 + '@smithy/middleware-serde': 2.1.1 + '@smithy/middleware-stack': 2.1.1 + '@smithy/node-config-provider': 2.2.1 + '@smithy/node-http-handler': 2.3.1 + '@smithy/protocol-http': 3.1.1 + '@smithy/smithy-client': 2.3.1 + '@smithy/types': 2.10.0 + '@smithy/url-parser': 2.1.1 + '@smithy/util-base64': 2.1.1 + '@smithy/util-body-length-browser': 2.1.1 + '@smithy/util-body-length-node': 2.2.1 + '@smithy/util-defaults-mode-browser': 2.1.1 + '@smithy/util-defaults-mode-node': 2.2.0 + '@smithy/util-endpoints': 1.1.1 + '@smithy/util-middleware': 2.1.1 + '@smithy/util-retry': 2.1.1 + '@smithy/util-utf8': 2.1.1 + fast-xml-parser: 4.2.5 + tslib: 2.6.2 + transitivePeerDependencies: + - aws-crt + + /@aws-sdk/core@3.511.0: + resolution: {integrity: sha512-0gbDvQhToyLxPyr/7KP6uavrBYKh7exld2lju1Lp65U61XgEjTVP/thJmHTvH4BAKGSqeIz/rrwJ0KrC8nwBtw==} + engines: {node: '>=14.0.0'} + dependencies: + '@smithy/core': 1.3.2 + '@smithy/protocol-http': 3.1.1 + '@smithy/signature-v4': 2.1.1 + '@smithy/smithy-client': 2.3.1 + '@smithy/types': 2.9.1 + tslib: 2.6.2 + + /@aws-sdk/core@3.513.0: + resolution: {integrity: sha512-L+9DL4apWuqNKVOMJ8siAuWoRM9rZf9w1iPv8S2o83WO2jVK7E/m+rNW1dFo9HsA5V1ccDl2H2qLXx24HiHmOw==} + engines: {node: '>=14.0.0'} + dependencies: + '@smithy/core': 1.3.2 + '@smithy/protocol-http': 3.1.1 + '@smithy/signature-v4': 2.1.1 + '@smithy/smithy-client': 2.3.1 + '@smithy/types': 2.10.0 + tslib: 2.6.2 + + /@aws-sdk/credential-provider-env@3.511.0: + resolution: {integrity: sha512-4VUsnLRox8YzxnZwnFrfZM4bL5KKLhsjjjX7oiuLyzFkhauI4HFYt7rTB8YNGphpqAg/Wzw5DBZfO3Bw1iR1HA==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/types': 3.511.0 + '@smithy/property-provider': 2.1.1 + '@smithy/types': 2.9.1 + tslib: 2.6.2 + + /@aws-sdk/credential-provider-env@3.515.0: + resolution: {integrity: sha512-45vxdyqhTAaUMERYVWOziG3K8L2TV9G4ryQS/KZ84o7NAybE9GMdoZRVmGHAO7mJJ1wQiYCM/E+i5b3NW9JfNA==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/types': 3.515.0 + '@smithy/property-provider': 2.1.1 + '@smithy/types': 2.10.0 + tslib: 2.6.2 /@aws-sdk/credential-provider-http@3.511.0: resolution: {integrity: sha512-y83Gt8GPpgMe/lMFxIq+0G2rbzLTC6lhrDocHUzqcApLD6wet8Esy2iYckSRlJgYY+qsVAzpLrSMtt85DwRPTw==} @@ -885,7 +1179,20 @@ packages: '@smithy/types': 2.9.1 '@smithy/util-stream': 2.1.1 tslib: 2.6.2 - dev: true + + /@aws-sdk/credential-provider-http@3.515.0: + resolution: {integrity: sha512-Ba6FXK77vU4WyheiamNjEuTFmir0eAXuJGPO27lBaA8g+V/seXGHScsbOG14aQGDOr2P02OPwKGZrWWA7BFpfQ==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/types': 3.515.0 + '@smithy/fetch-http-handler': 2.4.1 + '@smithy/node-http-handler': 2.3.1 + '@smithy/property-provider': 2.1.1 + '@smithy/protocol-http': 3.1.1 + '@smithy/smithy-client': 2.3.1 + '@smithy/types': 2.10.0 + '@smithy/util-stream': 2.1.1 + tslib: 2.6.2 /@aws-sdk/credential-provider-ini@3.511.0(@aws-sdk/credential-provider-node@3.511.0): resolution: {integrity: sha512-AgIOCtYzm61jbTQCY/2Vf/yu7DeLG0TLZa05a3VVRN9XE4ERtEnMn7TdbxM+hS24MTX8xI0HbMcWxCBkXRIg9w==} @@ -905,7 +1212,25 @@ packages: transitivePeerDependencies: - '@aws-sdk/credential-provider-node' - aws-crt - dev: true + + /@aws-sdk/credential-provider-ini@3.515.0(@aws-sdk/credential-provider-node@3.515.0): + resolution: {integrity: sha512-ouDlNZdv2TKeVEA/YZk2+XklTXyAAGdbWnl4IgN9ItaodWI+lZjdIoNC8BAooVH+atIV/cZgoGTGQL7j2TxJ9A==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/client-sts': 3.515.0(@aws-sdk/credential-provider-node@3.515.0) + '@aws-sdk/credential-provider-env': 3.515.0 + '@aws-sdk/credential-provider-process': 3.515.0 + '@aws-sdk/credential-provider-sso': 3.515.0(@aws-sdk/credential-provider-node@3.515.0) + '@aws-sdk/credential-provider-web-identity': 3.515.0(@aws-sdk/credential-provider-node@3.515.0) + '@aws-sdk/types': 3.515.0 + '@smithy/credential-provider-imds': 2.2.1 + '@smithy/property-provider': 2.1.1 + '@smithy/shared-ini-file-loader': 2.3.1 + '@smithy/types': 2.10.0 + tslib: 2.6.2 + transitivePeerDependencies: + - '@aws-sdk/credential-provider-node' + - aws-crt /@aws-sdk/credential-provider-node@3.511.0: resolution: {integrity: sha512-5JDZXsSluliJmxOF+lYYFgJdSKQfVLQyic5NxScHULTERGoEwEHMgucFGwJ9MV9FoINjNTQLfAiWlJL/kGkCEQ==} @@ -925,7 +1250,25 @@ packages: tslib: 2.6.2 transitivePeerDependencies: - aws-crt - dev: true + + /@aws-sdk/credential-provider-node@3.515.0: + resolution: {integrity: sha512-Y4kHSpbxksiCZZNcvsiKUd8Fb2XlyUuONEwqWFNL82ZH6TCCjBGS31wJQCSxBHqYcOL3tiORUEJkoO7uS30uQA==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/credential-provider-env': 3.515.0 + '@aws-sdk/credential-provider-http': 3.515.0 + '@aws-sdk/credential-provider-ini': 3.515.0(@aws-sdk/credential-provider-node@3.515.0) + '@aws-sdk/credential-provider-process': 3.515.0 + '@aws-sdk/credential-provider-sso': 3.515.0(@aws-sdk/credential-provider-node@3.515.0) + '@aws-sdk/credential-provider-web-identity': 3.515.0(@aws-sdk/credential-provider-node@3.515.0) + '@aws-sdk/types': 3.515.0 + '@smithy/credential-provider-imds': 2.2.1 + '@smithy/property-provider': 2.1.1 + '@smithy/shared-ini-file-loader': 2.3.1 + '@smithy/types': 2.10.0 + tslib: 2.6.2 + transitivePeerDependencies: + - aws-crt /@aws-sdk/credential-provider-process@3.511.0: resolution: {integrity: sha512-88hLUPqcTwjSubPS+34ZfmglnKeLny8GbmZsyllk96l26PmDTAqo5RScSA8BWxL0l5pRRWGtcrFyts+oibHIuQ==} @@ -936,7 +1279,16 @@ packages: '@smithy/shared-ini-file-loader': 2.3.1 '@smithy/types': 2.9.1 tslib: 2.6.2 - dev: true + + /@aws-sdk/credential-provider-process@3.515.0: + resolution: {integrity: sha512-pSjiOA2FM63LHRKNDvEpBRp80FVGT0Mw/gzgbqFXP+sewk0WVonYbEcMDTJptH3VsLPGzqH/DQ1YL/aEIBuXFQ==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/types': 3.515.0 + '@smithy/property-provider': 2.1.1 + '@smithy/shared-ini-file-loader': 2.3.1 + '@smithy/types': 2.10.0 + tslib: 2.6.2 /@aws-sdk/credential-provider-sso@3.511.0(@aws-sdk/credential-provider-node@3.511.0): resolution: {integrity: sha512-aEei9UdXYEE2e0Htf28/IcuHcWk3VkUkpcg3KDR/AyzXA3i/kxmixtAgRmHOForC5CMqoJjzVPFUITNkAscyag==} @@ -952,7 +1304,21 @@ packages: transitivePeerDependencies: - '@aws-sdk/credential-provider-node' - aws-crt - dev: true + + /@aws-sdk/credential-provider-sso@3.515.0(@aws-sdk/credential-provider-node@3.515.0): + resolution: {integrity: sha512-j7vUkiSmuhpBvZYoPTRTI4ePnQbiZMFl6TNhg9b9DprC1zHkucsZnhRhqjOVlrw/H6J4jmcPGcHHTZ5WQNI5xQ==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/client-sso': 3.515.0 + '@aws-sdk/token-providers': 3.515.0(@aws-sdk/credential-provider-node@3.515.0) + '@aws-sdk/types': 3.515.0 + '@smithy/property-provider': 2.1.1 + '@smithy/shared-ini-file-loader': 2.3.1 + '@smithy/types': 2.10.0 + tslib: 2.6.2 + transitivePeerDependencies: + - '@aws-sdk/credential-provider-node' + - aws-crt /@aws-sdk/credential-provider-web-identity@3.511.0(@aws-sdk/credential-provider-node@3.511.0): resolution: {integrity: sha512-/3XMyN7YYefAsES/sMMY5zZGRmZ5QJisJw798DdMYmYMsb1dt0Qy8kZTu+59ZzOiVIcznsjSTCEB81QmGtDKcA==} @@ -966,7 +1332,19 @@ packages: transitivePeerDependencies: - '@aws-sdk/credential-provider-node' - aws-crt - dev: true + + /@aws-sdk/credential-provider-web-identity@3.515.0(@aws-sdk/credential-provider-node@3.515.0): + resolution: {integrity: sha512-66+2g4z3fWwdoGReY8aUHvm6JrKZMTRxjuizljVmMyOBttKPeBYXvUTop/g3ZGUx1f8j+C5qsGK52viYBvtjuQ==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/client-sts': 3.515.0(@aws-sdk/credential-provider-node@3.515.0) + '@aws-sdk/types': 3.515.0 + '@smithy/property-provider': 2.1.1 + '@smithy/types': 2.10.0 + tslib: 2.6.2 + transitivePeerDependencies: + - '@aws-sdk/credential-provider-node' + - aws-crt /@aws-sdk/middleware-host-header@3.511.0: resolution: {integrity: sha512-DbBzQP/6woSHR/+g9dHN3YiYaLIqFw9u8lQFMxi3rT3hqITFVYLzzXtEaHjDD6/is56pNT84CIKbyJ6/gY5d1Q==} @@ -976,7 +1354,15 @@ packages: '@smithy/protocol-http': 3.1.1 '@smithy/types': 2.9.1 tslib: 2.6.2 - dev: true + + /@aws-sdk/middleware-host-header@3.515.0: + resolution: {integrity: sha512-I1MwWPzdRKM1luvdDdjdGsDjNVPhj9zaIytEchjTY40NcKOg+p2evLD2y69ozzg8pyXK63r8DdvDGOo9QPuh0A==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/types': 3.515.0 + '@smithy/protocol-http': 3.1.1 + '@smithy/types': 2.10.0 + tslib: 2.6.2 /@aws-sdk/middleware-logger@3.511.0: resolution: {integrity: sha512-EYU9dBlJXvQcCsM2Tfgi0NQoXrqovfDv/fDy8oGJgZFrgNuHDti8tdVVxeJTUJNEAF67xlDl5o+rWEkKthkYGQ==} @@ -985,7 +1371,14 @@ packages: '@aws-sdk/types': 3.511.0 '@smithy/types': 2.9.1 tslib: 2.6.2 - dev: true + + /@aws-sdk/middleware-logger@3.515.0: + resolution: {integrity: sha512-qXomJzg2m/5seQOxHi/yOXOKfSjwrrJSmEmfwJKJyQgdMbBcjz3Cz0H/1LyC6c5hHm6a/SZgSTzDAbAoUmyL+Q==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/types': 3.515.0 + '@smithy/types': 2.10.0 + tslib: 2.6.2 /@aws-sdk/middleware-recursion-detection@3.511.0: resolution: {integrity: sha512-PlNPCV/6zpDVdNx1K69xDTh/wPNU4WyP4qa6hUo2/+4/PNG5HI9xbCWtpb4RjhdTRw6qDtkBNcPICHbtWx5aHg==} @@ -995,7 +1388,15 @@ packages: '@smithy/protocol-http': 3.1.1 '@smithy/types': 2.9.1 tslib: 2.6.2 - dev: true + + /@aws-sdk/middleware-recursion-detection@3.515.0: + resolution: {integrity: sha512-dokHLbTV3IHRIBrw9mGoxcNTnQsjlm7TpkJhPdGT9T4Mq399EyQo51u6IsVMm07RXLl2Zw7u+u9p+qWBFzmFRA==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/types': 3.515.0 + '@smithy/protocol-http': 3.1.1 + '@smithy/types': 2.10.0 + tslib: 2.6.2 /@aws-sdk/middleware-signing@3.511.0: resolution: {integrity: sha512-IMijFLfm+QQHD6NNDX9k3op9dpBSlWKnqjcMU38Tytl2nbqV4gktkarOK1exHAmH7CdoYR5BufVtBzbASNSF/A==} @@ -1008,7 +1409,6 @@ packages: '@smithy/types': 2.9.1 '@smithy/util-middleware': 2.1.1 tslib: 2.6.2 - dev: true /@aws-sdk/middleware-user-agent@3.511.0: resolution: {integrity: sha512-eLs+CxP2QCXh3tCGYCdAml3oyWj8MSIwKbH+8rKw0k/5vmY1YJDBy526whOxx61ivhz2e0muuijN4X5EZZ2Pnw==} @@ -1019,7 +1419,16 @@ packages: '@smithy/protocol-http': 3.1.1 '@smithy/types': 2.9.1 tslib: 2.6.2 - dev: true + + /@aws-sdk/middleware-user-agent@3.515.0: + resolution: {integrity: sha512-nOqZjGA/GkjuJ5fUshec9Fv6HFd7ovOTxMJbw3MfAhqXuVZ6dKF41lpVJ4imNsgyFt3shUg9WDY8zGFjlYMB3g==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/types': 3.515.0 + '@aws-sdk/util-endpoints': 3.515.0 + '@smithy/protocol-http': 3.1.1 + '@smithy/types': 2.10.0 + tslib: 2.6.2 /@aws-sdk/region-config-resolver@3.511.0: resolution: {integrity: sha512-RzBLSNaRd4iEkQyEGfiSNvSnWU/x23rsiFgA9tqYFA0Vqx7YmzSWC8QBUxpwybB8HkbbL9wNVKQqTbhI3mYneQ==} @@ -1031,7 +1440,17 @@ packages: '@smithy/util-config-provider': 2.2.1 '@smithy/util-middleware': 2.1.1 tslib: 2.6.2 - dev: true + + /@aws-sdk/region-config-resolver@3.515.0: + resolution: {integrity: sha512-RIRx9loxMgEAc/r1wPfnfShOuzn4RBi8pPPv6/jhhITEeMnJe6enAh2k5y9DdiVDDgCWZgVFSv0YkAIfzAFsnQ==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/types': 3.515.0 + '@smithy/node-config-provider': 2.2.1 + '@smithy/types': 2.10.0 + '@smithy/util-config-provider': 2.2.1 + '@smithy/util-middleware': 2.1.1 + tslib: 2.6.2 /@aws-sdk/token-providers@3.511.0(@aws-sdk/credential-provider-node@3.511.0): resolution: {integrity: sha512-92dXjMHBJcRoUkJHc0Bvtsz7Sal8t6VASRJ5vfs5c2ZpTVgLpVnM4dBmwUgGUdnvHov0cZTXbbadTJ/qOWx5Zw==} @@ -1046,7 +1465,20 @@ packages: transitivePeerDependencies: - '@aws-sdk/credential-provider-node' - aws-crt - dev: true + + /@aws-sdk/token-providers@3.515.0(@aws-sdk/credential-provider-node@3.515.0): + resolution: {integrity: sha512-MQuf04rIcTXqwDzmyHSpFPF1fKEzRl64oXtCRUF3ddxTdK6wxXkePfK6wNCuL+GEbEcJAoCtIGIRpzGPJvQjHA==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/client-sso-oidc': 3.515.0(@aws-sdk/credential-provider-node@3.515.0) + '@aws-sdk/types': 3.515.0 + '@smithy/property-provider': 2.1.1 + '@smithy/shared-ini-file-loader': 2.3.1 + '@smithy/types': 2.10.0 + tslib: 2.6.2 + transitivePeerDependencies: + - '@aws-sdk/credential-provider-node' + - aws-crt /@aws-sdk/types@3.511.0: resolution: {integrity: sha512-P03ufufxmkvd7nO46oOeEqYIMPJ8qMCKxAsfJk1JBVPQ1XctVntbail4/UFnrnzij8DTl4Mk/D62uGo7+RolXA==} @@ -1054,7 +1486,13 @@ packages: dependencies: '@smithy/types': 2.9.1 tslib: 2.6.2 - dev: true + + /@aws-sdk/types@3.515.0: + resolution: {integrity: sha512-B3gUpiMlpT6ERaLvZZ61D0RyrQPsFYDkCncLPVkZOKkCOoFU46zi1o6T5JcYiz8vkx1q9RGloQ5exh79s5pU/w==} + engines: {node: '>=14.0.0'} + dependencies: + '@smithy/types': 2.10.0 + tslib: 2.6.2 /@aws-sdk/util-endpoints@3.511.0: resolution: {integrity: sha512-J/5hsscJkg2pAOdLx1YKlyMCk5lFRxRxEtup9xipzOxVBlqOIE72Tuu31fbxSlF8XzO/AuCJcZL4m1v098K9oA==} @@ -1064,14 +1502,21 @@ packages: '@smithy/types': 2.9.1 '@smithy/util-endpoints': 1.1.1 tslib: 2.6.2 - dev: true + + /@aws-sdk/util-endpoints@3.515.0: + resolution: {integrity: sha512-UJi+jdwcGFV/F7d3+e2aQn5yZOVpDiAgfgNhPnEtgV0WozJ5/ZUeZBgWvSc/K415N4A4D/9cbBc7+I+35qzcDQ==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/types': 3.515.0 + '@smithy/types': 2.10.0 + '@smithy/util-endpoints': 1.1.1 + tslib: 2.6.2 /@aws-sdk/util-locate-window@3.495.0: resolution: {integrity: sha512-MfaPXT0kLX2tQaR90saBT9fWQq2DHqSSJRzW+MZWsmF+y5LGCOhO22ac/2o6TKSQm7h0HRc2GaADqYYYor62yg==} engines: {node: '>=14.0.0'} dependencies: tslib: 2.6.2 - dev: true /@aws-sdk/util-user-agent-browser@3.511.0: resolution: {integrity: sha512-5LuESdwtIcA10aHcX7pde7aCIijcyTPBXFuXmFlDTgm/naAayQxelQDpvgbzuzGLgePf8eTyyhDKhzwPZ2EqiQ==} @@ -1080,7 +1525,14 @@ packages: '@smithy/types': 2.9.1 bowser: 2.11.0 tslib: 2.6.2 - dev: true + + /@aws-sdk/util-user-agent-browser@3.515.0: + resolution: {integrity: sha512-pTWQb0JCafTmLHLDv3Qqs/nAAJghcPdGQIBpsCStb0YEzg3At/dOi2AIQ683yYnXmeOxLXJDzmlsovfVObJScw==} + dependencies: + '@aws-sdk/types': 3.515.0 + '@smithy/types': 2.10.0 + bowser: 2.11.0 + tslib: 2.6.2 /@aws-sdk/util-user-agent-node@3.511.0: resolution: {integrity: sha512-UopdlRvYY5mxlS4wwFv+QAWL6/T302wmoQj7i+RY+c/D3Ej3PKBb/mW3r2wEOgZLJmPpeeM1SYMk+rVmsW1rqw==} @@ -1095,13 +1547,25 @@ packages: '@smithy/node-config-provider': 2.2.1 '@smithy/types': 2.9.1 tslib: 2.6.2 - dev: true + + /@aws-sdk/util-user-agent-node@3.515.0: + resolution: {integrity: sha512-A/KJ+/HTohHyVXLH+t/bO0Z2mPrQgELbQO8tX+B2nElo8uklj70r5cT7F8ETsI9oOy+HDVpiL5/v45ZgpUOiPg==} + engines: {node: '>=14.0.0'} + peerDependencies: + aws-crt: '>=1.0.0' + peerDependenciesMeta: + aws-crt: + optional: true + dependencies: + '@aws-sdk/types': 3.515.0 + '@smithy/node-config-provider': 2.2.1 + '@smithy/types': 2.10.0 + tslib: 2.6.2 /@aws-sdk/util-utf8-browser@3.259.0: resolution: {integrity: sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw==} dependencies: tslib: 2.6.2 - dev: true /@babel/code-frame@7.23.5: resolution: {integrity: sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==} @@ -1110,6 +1574,34 @@ packages: '@babel/highlight': 7.23.4 chalk: 2.4.2 + /@babel/compat-data@7.23.5: + resolution: {integrity: sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/core@7.23.9: + resolution: {integrity: sha512-5q0175NOjddqpvvzU+kDiSOAk4PfdO6FvwCWoQ6RO7rTzEe8vlo+4HVfcnAREhD4npMs0e9uZypjTwzZPCf/cw==} + engines: {node: '>=6.9.0'} + dependencies: + '@ampproject/remapping': 2.2.1 + '@babel/code-frame': 7.23.5 + '@babel/generator': 7.23.6 + '@babel/helper-compilation-targets': 7.23.6 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.9) + '@babel/helpers': 7.23.9 + '@babel/parser': 7.23.9 + '@babel/template': 7.23.9 + '@babel/traverse': 7.23.9 + '@babel/types': 7.23.9 + convert-source-map: 2.0.0 + debug: 4.3.4(supports-color@8.1.1) + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + dev: true + /@babel/generator@7.17.7: resolution: {integrity: sha512-oLcVCTeIFadUoArDTwpluncplrYBmTCCZZgXCbgNGvOBBiSDDK3eWO4b/+eOTli5tKv1lg+a5/NAXg+nTcei1w==} engines: {node: '>=6.9.0'} @@ -1127,12 +1619,21 @@ packages: '@jridgewell/gen-mapping': 0.3.3 '@jridgewell/trace-mapping': 0.3.22 jsesc: 2.5.2 - dev: false + + /@babel/helper-compilation-targets@7.23.6: + resolution: {integrity: sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/compat-data': 7.23.5 + '@babel/helper-validator-option': 7.23.5 + browserslist: 4.23.0 + lru-cache: 5.1.1 + semver: 6.3.1 + dev: true /@babel/helper-environment-visitor@7.22.20: resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==} engines: {node: '>=6.9.0'} - dev: false /@babel/helper-function-name@7.23.0: resolution: {integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==} @@ -1140,31 +1641,76 @@ packages: dependencies: '@babel/template': 7.23.9 '@babel/types': 7.23.9 - dev: false /@babel/helper-hoist-variables@7.22.5: resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.23.9 - dev: false + + /@babel/helper-module-imports@7.22.15: + resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.9 + dev: true + + /@babel/helper-module-transforms@7.23.3(@babel/core@7.23.9): + resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-module-imports': 7.22.15 + '@babel/helper-simple-access': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/helper-validator-identifier': 7.22.20 + dev: true + + /@babel/helper-plugin-utils@7.22.5: + resolution: {integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/helper-simple-access@7.22.5: + resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.9 + dev: true /@babel/helper-split-export-declaration@7.22.6: resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.23.9 - dev: false /@babel/helper-string-parser@7.23.4: resolution: {integrity: sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==} engines: {node: '>=6.9.0'} - dev: false /@babel/helper-validator-identifier@7.22.20: resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} engines: {node: '>=6.9.0'} + /@babel/helper-validator-option@7.23.5: + resolution: {integrity: sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/helpers@7.23.9: + resolution: {integrity: sha512-87ICKgU5t5SzOT7sBMfCOZQ2rHjRU+Pcb9BoILMYz600W6DkVRLFBPwQ18gwUVvggqXivaUakpnxWQGbpywbBQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/template': 7.23.9 + '@babel/traverse': 7.23.9 + '@babel/types': 7.23.9 + transitivePeerDependencies: + - supports-color + dev: true + /@babel/highlight@7.23.4: resolution: {integrity: sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==} engines: {node: '>=6.9.0'} @@ -1179,13 +1725,142 @@ packages: hasBin: true dependencies: '@babel/types': 7.23.9 - dev: false - /@babel/runtime@7.23.9: - resolution: {integrity: sha512-0CX6F+BI2s9dkUqr08KFrAIZgNFj75rdBU/DjCyYLIaV/quFjkk6T+EJ2LkZHyZTbEV4L5p97mNkUsHl2wLFAw==} - engines: {node: '>=6.9.0'} + /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.23.9): + resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.23.9): + resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.23.9): + resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.23.9): + resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.23.9): + resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-jsx@7.23.3(@babel/core@7.23.9): + resolution: {integrity: sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.23.9): + resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.23.9): + resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.23.9): + resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.23.9): + resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.23.9): + resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.23.9): + resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.23.9): + resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-typescript@7.23.3(@babel/core@7.23.9): + resolution: {integrity: sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/runtime@7.23.9: + resolution: {integrity: sha512-0CX6F+BI2s9dkUqr08KFrAIZgNFj75rdBU/DjCyYLIaV/quFjkk6T+EJ2LkZHyZTbEV4L5p97mNkUsHl2wLFAw==} + engines: {node: '>=6.9.0'} dependencies: regenerator-runtime: 0.14.1 + dev: false /@babel/template@7.23.9: resolution: {integrity: sha512-+xrD2BWLpvHKNmX2QbpdpsBaWnRxahMwJjO+KZk2JOElj5nSmKezyS1B4u+QbHMTX69t4ukm6hh9lsYQ7GHCKA==} @@ -1194,7 +1869,6 @@ packages: '@babel/code-frame': 7.23.5 '@babel/parser': 7.23.9 '@babel/types': 7.23.9 - dev: false /@babel/traverse@7.23.2: resolution: {integrity: sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==} @@ -1214,6 +1888,24 @@ packages: - supports-color dev: false + /@babel/traverse@7.23.9: + resolution: {integrity: sha512-I/4UJ9vs90OkBtY6iiiTORVMyIhJ4kAVmsKo9KFc8UOxMeUfi2hvtIBsET5u9GizXE6/GFSuKCTNfgCswuEjRg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.23.5 + '@babel/generator': 7.23.6 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-function-name': 7.23.0 + '@babel/helper-hoist-variables': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/parser': 7.23.9 + '@babel/types': 7.23.9 + debug: 4.3.4(supports-color@8.1.1) + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + dev: true + /@babel/types@7.17.0: resolution: {integrity: sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==} engines: {node: '>=6.9.0'} @@ -1229,7 +1921,10 @@ packages: '@babel/helper-string-parser': 7.23.4 '@babel/helper-validator-identifier': 7.22.20 to-fast-properties: 2.0.0 - dev: false + + /@bcoe/v8-coverage@0.2.3: + resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} + dev: true /@corex/deepmerge@4.0.43: resolution: {integrity: sha512-N8uEMrMPL0cu/bdboEWpQYb/0i2K5Qn8eCsxzOmxSggJbbQte7ljMRoXm917AbntqTGOzdTu+vP3KOOzoC70HQ==} @@ -1829,50 +2524,50 @@ packages: dependencies: '@hapi/boom': 10.0.1 '@hapi/hoek': 11.0.4 - dev: true + dev: false /@hapi/ammo@6.0.1: resolution: {integrity: sha512-pmL+nPod4g58kXrMcsGLp05O2jF4P2Q3GiL8qYV7nKYEh3cGf+rV4P5Jyi2Uq0agGhVU63GtaSAfBEZOlrJn9w==} dependencies: '@hapi/hoek': 11.0.4 - dev: true + dev: false /@hapi/b64@6.0.1: resolution: {integrity: sha512-ZvjX4JQReUmBheeCq+S9YavcnMMHWqx3S0jHNXWIM1kQDxB9cyfSycpVvjfrKcIS8Mh5N3hmu/YKo4Iag9g2Kw==} dependencies: '@hapi/hoek': 11.0.4 - dev: true + dev: false /@hapi/boom@10.0.1: resolution: {integrity: sha512-ERcCZaEjdH3OgSJlyjVk8pHIFeus91CjKP3v+MpgBNp5IvGzP2l/bRiD78nqYcKPaZdbKkK5vDBVPd2ohHBlsA==} dependencies: '@hapi/hoek': 11.0.4 - dev: true + dev: false /@hapi/bounce@3.0.1: resolution: {integrity: sha512-G+/Pp9c1Ha4FDP+3Sy/Xwg2O4Ahaw3lIZFSX+BL4uWi64CmiETuZPxhKDUD4xBMOUZbBlzvO8HjiK8ePnhBadA==} dependencies: '@hapi/boom': 10.0.1 '@hapi/hoek': 11.0.4 - dev: true + dev: false /@hapi/bourne@3.0.0: resolution: {integrity: sha512-Waj1cwPXJDucOib4a3bAISsKJVb15MKi9IvmTI/7ssVEm6sywXGjVJDhl6/umt1pK1ZS7PacXU3A1PmFKHEZ2w==} - dev: true + dev: false /@hapi/call@9.0.1: resolution: {integrity: sha512-uPojQRqEL1GRZR4xXPqcLMujQGaEpyVPRyBlD8Pp5rqgIwLhtveF9PkixiKru2THXvuN8mUrLeet5fqxKAAMGg==} dependencies: '@hapi/boom': 10.0.1 '@hapi/hoek': 11.0.4 - dev: true + dev: false /@hapi/catbox-memory@6.0.1: resolution: {integrity: sha512-sVb+/ZxbZIvaMtJfAbdyY+QJUQg9oKTwamXpEg/5xnfG5WbJLTjvEn4kIGKz9pN3ENNbIL/bIdctmHmqi/AdGA==} dependencies: '@hapi/boom': 10.0.1 '@hapi/hoek': 11.0.4 - dev: true + dev: false /@hapi/catbox@12.1.1: resolution: {integrity: sha512-hDqYB1J+R0HtZg4iPH3LEnldoaBsar6bYp0EonBmNQ9t5CO+1CqgCul2ZtFveW1ReA5SQuze9GPSU7/aecERhw==} @@ -1881,24 +2576,24 @@ packages: '@hapi/hoek': 11.0.4 '@hapi/podium': 5.0.1 '@hapi/validate': 2.0.1 - dev: true + dev: false /@hapi/content@6.0.0: resolution: {integrity: sha512-CEhs7j+H0iQffKfe5Htdak5LBOz/Qc8TRh51cF+BFv0qnuph3Em4pjGVzJMkI2gfTDdlJKWJISGWS1rK34POGA==} dependencies: '@hapi/boom': 10.0.1 - dev: true + dev: false /@hapi/cryptiles@6.0.1: resolution: {integrity: sha512-9GM9ECEHfR8lk5ASOKG4+4ZsEzFqLfhiryIJ2ISePVB92OHLp/yne4m+zn7z9dgvM98TLpiFebjDFQ0UHcqxXQ==} engines: {node: '>=14.0.0'} dependencies: '@hapi/boom': 10.0.1 - dev: true + dev: false /@hapi/file@3.0.0: resolution: {integrity: sha512-w+lKW+yRrLhJu620jT3y+5g2mHqnKfepreykvdOcl9/6up8GrQQn+l3FRTsjHTKbkbfQFkuksHpdv2EcpKcJ4Q==} - dev: true + dev: false /@hapi/h2o2@10.0.4: resolution: {integrity: sha512-dvD8+Y/Okc0fh0blqaYCLIrcy0+1LqIhMr7hjk8elLQZ9mkw2hKFB9dFKuRfWf+1nvHpGlW+PwccqkdebynQbg==} @@ -1908,7 +2603,7 @@ packages: '@hapi/hoek': 11.0.4 '@hapi/validate': 2.0.1 '@hapi/wreck': 18.0.1 - dev: true + dev: false /@hapi/hapi@21.3.3: resolution: {integrity: sha512-6pgwWVl/aSKSNVn86n+mWa06jRqCAKi2adZp/Hti19A0u5x3/6eiKz8UTBPMzfrdGf9WcrYbFBYzWr/qd2s28g==} @@ -1932,7 +2627,7 @@ packages: '@hapi/teamwork': 6.0.0 '@hapi/topo': 6.0.2 '@hapi/validate': 2.0.1 - dev: true + dev: false /@hapi/heavy@8.0.1: resolution: {integrity: sha512-gBD/NANosNCOp6RsYTsjo2vhr5eYA3BEuogk6cxY0QdhllkkTaJFYtTXv46xd6qhBVMbMMqcSdtqey+UQU3//w==} @@ -1940,11 +2635,11 @@ packages: '@hapi/boom': 10.0.1 '@hapi/hoek': 11.0.4 '@hapi/validate': 2.0.1 - dev: true + dev: false /@hapi/hoek@11.0.4: resolution: {integrity: sha512-PnsP5d4q7289pS2T2EgGz147BFJ2Jpb4yrEdkpz2IhgEUzos1S7HTl7ezWh1yfYzYlj89KzLdCRkqsP6SIryeQ==} - dev: true + dev: false /@hapi/iron@7.0.1: resolution: {integrity: sha512-tEZnrOujKpS6jLKliyWBl3A9PaE+ppuL/+gkbyPPDb/l2KSKQyH4lhMkVb+sBhwN+qaxxlig01JRqB8dk/mPxQ==} @@ -1954,14 +2649,14 @@ packages: '@hapi/bourne': 3.0.0 '@hapi/cryptiles': 6.0.1 '@hapi/hoek': 11.0.4 - dev: true + dev: false /@hapi/mimos@7.0.1: resolution: {integrity: sha512-b79V+BrG0gJ9zcRx1VGcCI6r6GEzzZUgiGEJVoq5gwzuB2Ig9Cax8dUuBauQCFKvl2YWSWyOc8mZ8HDaJOtkew==} dependencies: '@hapi/hoek': 11.0.4 mime-db: 1.52.0 - dev: true + dev: false /@hapi/nigel@5.0.1: resolution: {integrity: sha512-uv3dtYuB4IsNaha+tigWmN8mQw/O9Qzl5U26Gm4ZcJVtDdB1AVJOwX3X5wOX+A07qzpEZnOMBAm8jjSqGsU6Nw==} @@ -1969,7 +2664,7 @@ packages: dependencies: '@hapi/hoek': 11.0.4 '@hapi/vise': 5.0.1 - dev: true + dev: false /@hapi/pez@6.1.0: resolution: {integrity: sha512-+FE3sFPYuXCpuVeHQ/Qag1b45clR2o54QoonE/gKHv9gukxQ8oJJZPR7o3/ydDTK6racnCJXxOyT1T93FCJMIg==} @@ -1979,7 +2674,7 @@ packages: '@hapi/content': 6.0.0 '@hapi/hoek': 11.0.4 '@hapi/nigel': 5.0.1 - dev: true + dev: false /@hapi/podium@5.0.1: resolution: {integrity: sha512-eznFTw6rdBhAijXFIlBOMJJd+lXTvqbrBIS4Iu80r2KTVIo4g+7fLy4NKp/8+UnSt5Ox6mJtAlKBU/Sf5080TQ==} @@ -1987,21 +2682,21 @@ packages: '@hapi/hoek': 11.0.4 '@hapi/teamwork': 6.0.0 '@hapi/validate': 2.0.1 - dev: true + dev: false /@hapi/shot@6.0.1: resolution: {integrity: sha512-s5ynMKZXYoDd3dqPw5YTvOR/vjHvMTxc388+0qL0jZZP1+uwXuUD32o9DuuuLsmTlyXCWi02BJl1pBpwRuUrNA==} dependencies: '@hapi/hoek': 11.0.4 '@hapi/validate': 2.0.1 - dev: true + dev: false /@hapi/somever@4.1.1: resolution: {integrity: sha512-lt3QQiDDOVRatS0ionFDNrDIv4eXz58IibQaZQDOg4DqqdNme8oa0iPWcE0+hkq/KTeBCPtEOjDOBKBKwDumVg==} dependencies: '@hapi/bounce': 3.0.1 '@hapi/hoek': 11.0.4 - dev: true + dev: false /@hapi/statehood@8.1.1: resolution: {integrity: sha512-YbK7PSVUA59NArAW5Np0tKRoIZ5VNYUicOk7uJmWZF6XyH5gGL+k62w77SIJb0AoAJ0QdGQMCQ/WOGL1S3Ydow==} @@ -2013,7 +2708,7 @@ packages: '@hapi/hoek': 11.0.4 '@hapi/iron': 7.0.1 '@hapi/validate': 2.0.1 - dev: true + dev: false /@hapi/subtext@8.1.0: resolution: {integrity: sha512-PyaN4oSMtqPjjVxLny1k0iYg4+fwGusIhaom9B2StinBclHs7v46mIW706Y+Wo21lcgulGyXbQrmT/w4dus6ww==} @@ -2025,31 +2720,31 @@ packages: '@hapi/hoek': 11.0.4 '@hapi/pez': 6.1.0 '@hapi/wreck': 18.0.1 - dev: true + dev: false /@hapi/teamwork@6.0.0: resolution: {integrity: sha512-05HumSy3LWfXpmJ9cr6HzwhAavrHkJ1ZRCmNE2qJMihdM5YcWreWPfyN0yKT2ZjCM92au3ZkuodjBxOibxM67A==} engines: {node: '>=14.0.0'} - dev: true + dev: false /@hapi/topo@6.0.2: resolution: {integrity: sha512-KR3rD5inZbGMrHmgPxsJ9dbi6zEK+C3ZwUwTa+eMwWLz7oijWUTWD2pMSNNYJAU6Qq+65NkxXjqHr/7LM2Xkqg==} dependencies: '@hapi/hoek': 11.0.4 - dev: true + dev: false /@hapi/validate@2.0.1: resolution: {integrity: sha512-NZmXRnrSLK8MQ9y/CMqE9WSspgB9xA41/LlYR0k967aSZebWr4yNrpxIbov12ICwKy4APSlWXZga9jN5p6puPA==} dependencies: '@hapi/hoek': 11.0.4 '@hapi/topo': 6.0.2 - dev: true + dev: false /@hapi/vise@5.0.1: resolution: {integrity: sha512-XZYWzzRtINQLedPYlIkSkUr7m5Ddwlu99V9elh8CSygXstfv3UnWIXT0QD+wmR0VAG34d2Vx3olqcEhRRoTu9A==} dependencies: '@hapi/hoek': 11.0.4 - dev: true + dev: false /@hapi/wreck@18.0.1: resolution: {integrity: sha512-OLHER70+rZxvDl75xq3xXOfd3e8XIvz8fWY0dqg92UvhZ29zo24vQgfqgHSYhB5ZiuFpSLeriOisAlxAo/1jWg==} @@ -2057,7 +2752,7 @@ packages: '@hapi/boom': 10.0.1 '@hapi/bourne': 3.0.0 '@hapi/hoek': 11.0.4 - dev: true + dev: false /@humanwhocodes/config-array@0.11.14: resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} @@ -2275,6 +2970,236 @@ packages: wrap-ansi: 8.1.0 wrap-ansi-cjs: /wrap-ansi@7.0.0 + /@istanbuljs/load-nyc-config@1.1.0: + resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} + engines: {node: '>=8'} + dependencies: + camelcase: 5.3.1 + find-up: 4.1.0 + get-package-type: 0.1.0 + js-yaml: 3.14.1 + resolve-from: 5.0.0 + dev: true + + /@istanbuljs/schema@0.1.3: + resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} + engines: {node: '>=8'} + dev: true + + /@jest/console@29.7.0: + resolution: {integrity: sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/types': 29.6.3 + '@types/node': 20.11.16 + chalk: 4.1.2 + jest-message-util: 29.7.0 + jest-util: 29.7.0 + slash: 3.0.0 + dev: true + + /@jest/core@29.7.0: + resolution: {integrity: sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + dependencies: + '@jest/console': 29.7.0 + '@jest/reporters': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 20.11.16 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + ci-info: 3.9.0 + exit: 0.1.2 + graceful-fs: 4.2.11 + jest-changed-files: 29.7.0 + jest-config: 29.7.0(@types/node@20.11.16) + jest-haste-map: 29.7.0 + jest-message-util: 29.7.0 + jest-regex-util: 29.6.3 + jest-resolve: 29.7.0 + jest-resolve-dependencies: 29.7.0 + jest-runner: 29.7.0 + jest-runtime: 29.7.0 + jest-snapshot: 29.7.0 + jest-util: 29.7.0 + jest-validate: 29.7.0 + jest-watcher: 29.7.0 + micromatch: 4.0.5 + pretty-format: 29.7.0 + slash: 3.0.0 + strip-ansi: 6.0.1 + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + - ts-node + dev: true + + /@jest/environment@29.7.0: + resolution: {integrity: sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/fake-timers': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 20.11.16 + jest-mock: 29.7.0 + dev: true + + /@jest/expect-utils@29.7.0: + resolution: {integrity: sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + jest-get-type: 29.6.3 + dev: true + + /@jest/expect@29.7.0: + resolution: {integrity: sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + expect: 29.7.0 + jest-snapshot: 29.7.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@jest/fake-timers@29.7.0: + resolution: {integrity: sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/types': 29.6.3 + '@sinonjs/fake-timers': 10.3.0 + '@types/node': 20.11.16 + jest-message-util: 29.7.0 + jest-mock: 29.7.0 + jest-util: 29.7.0 + dev: true + + /@jest/globals@29.7.0: + resolution: {integrity: sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/environment': 29.7.0 + '@jest/expect': 29.7.0 + '@jest/types': 29.6.3 + jest-mock: 29.7.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@jest/reporters@29.7.0: + resolution: {integrity: sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + dependencies: + '@bcoe/v8-coverage': 0.2.3 + '@jest/console': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + '@jridgewell/trace-mapping': 0.3.22 + '@types/node': 20.11.16 + chalk: 4.1.2 + collect-v8-coverage: 1.0.2 + exit: 0.1.2 + glob: 7.2.3 + graceful-fs: 4.2.11 + istanbul-lib-coverage: 3.2.2 + istanbul-lib-instrument: 6.0.2 + istanbul-lib-report: 3.0.1 + istanbul-lib-source-maps: 4.0.1 + istanbul-reports: 3.1.7 + jest-message-util: 29.7.0 + jest-util: 29.7.0 + jest-worker: 29.7.0 + slash: 3.0.0 + string-length: 4.0.2 + strip-ansi: 6.0.1 + v8-to-istanbul: 9.2.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@jest/schemas@29.6.3: + resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@sinclair/typebox': 0.27.8 + dev: true + + /@jest/source-map@29.6.3: + resolution: {integrity: sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jridgewell/trace-mapping': 0.3.22 + callsites: 3.1.0 + graceful-fs: 4.2.11 + dev: true + + /@jest/test-result@29.7.0: + resolution: {integrity: sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/console': 29.7.0 + '@jest/types': 29.6.3 + '@types/istanbul-lib-coverage': 2.0.6 + collect-v8-coverage: 1.0.2 + dev: true + + /@jest/test-sequencer@29.7.0: + resolution: {integrity: sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/test-result': 29.7.0 + graceful-fs: 4.2.11 + jest-haste-map: 29.7.0 + slash: 3.0.0 + dev: true + + /@jest/transform@29.7.0: + resolution: {integrity: sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@babel/core': 7.23.9 + '@jest/types': 29.6.3 + '@jridgewell/trace-mapping': 0.3.22 + babel-plugin-istanbul: 6.1.1 + chalk: 4.1.2 + convert-source-map: 2.0.0 + fast-json-stable-stringify: 2.1.0 + graceful-fs: 4.2.11 + jest-haste-map: 29.7.0 + jest-regex-util: 29.6.3 + jest-util: 29.7.0 + micromatch: 4.0.5 + pirates: 4.0.6 + slash: 3.0.0 + write-file-atomic: 4.0.2 + transitivePeerDependencies: + - supports-color + dev: true + + /@jest/types@29.6.3: + resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/schemas': 29.6.3 + '@types/istanbul-lib-coverage': 2.0.6 + '@types/istanbul-reports': 3.0.4 + '@types/node': 20.11.16 + '@types/yargs': 17.0.32 + chalk: 4.1.2 + dev: true + /@jridgewell/gen-mapping@0.3.3: resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} engines: {node: '>=6.0.0'} @@ -2306,11 +3231,9 @@ packages: debug: 4.3.4(supports-color@8.1.1) transitivePeerDependencies: - supports-color - dev: true /@kwsites/promise-deferred@1.1.1: resolution: {integrity: sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw==} - dev: true /@mongodb-js/saslprep@1.1.4: resolution: {integrity: sha512-8zJ8N1x51xo9hwPh6AWnKdLGEC5N3lDa6kms1YHmFBoRhTpJR6HG8wWk0td1MVCu9cD4YBrvjZEtd5Obw0Fbnw==} @@ -2330,7 +3253,7 @@ packages: resolution: {integrity: sha512-x4FavbNEeXx/baD/zC/SdrvkjSby8nBn8KcCREqk6UuwvwoAPZmaV8TFCAuo/cpovBRTIY67mHhe86MQQm/68Q==} dependencies: glob: 10.3.10 - dev: true + dev: false /@next/swc-darwin-arm64@14.1.0: resolution: {integrity: sha512-nUDn7TOGcIeyQni6lZHfzNoo9S0euXnu0jhsbMOmMJUBfgsnESdjN97kM7cBqQxZa8L/bM9om/S5/1dzCrW6wQ==} @@ -2554,92 +3477,92 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: false - /@rollup/rollup-android-arm-eabi@4.9.6: - resolution: {integrity: sha512-MVNXSSYN6QXOulbHpLMKYi60ppyO13W9my1qogeiAqtjb2yR4LSmfU2+POvDkLzhjYLXz9Rf9+9a3zFHW1Lecg==} + /@rollup/rollup-android-arm-eabi@4.12.0: + resolution: {integrity: sha512-+ac02NL/2TCKRrJu2wffk1kZ+RyqxVUlbjSagNgPm94frxtr+XDL12E5Ll1enWskLrtrZ2r8L3wED1orIibV/w==} cpu: [arm] os: [android] requiresBuild: true optional: true - /@rollup/rollup-android-arm64@4.9.6: - resolution: {integrity: sha512-T14aNLpqJ5wzKNf5jEDpv5zgyIqcpn1MlwCrUXLrwoADr2RkWA0vOWP4XxbO9aiO3dvMCQICZdKeDrFl7UMClw==} + /@rollup/rollup-android-arm64@4.12.0: + resolution: {integrity: sha512-OBqcX2BMe6nvjQ0Nyp7cC90cnumt8PXmO7Dp3gfAju/6YwG0Tj74z1vKrfRz7qAv23nBcYM8BCbhrsWqO7PzQQ==} cpu: [arm64] os: [android] requiresBuild: true optional: true - /@rollup/rollup-darwin-arm64@4.9.6: - resolution: {integrity: sha512-CqNNAyhRkTbo8VVZ5R85X73H3R5NX9ONnKbXuHisGWC0qRbTTxnF1U4V9NafzJbgGM0sHZpdO83pLPzq8uOZFw==} + /@rollup/rollup-darwin-arm64@4.12.0: + resolution: {integrity: sha512-X64tZd8dRE/QTrBIEs63kaOBG0b5GVEd3ccoLtyf6IdXtHdh8h+I56C2yC3PtC9Ucnv0CpNFJLqKFVgCYe0lOQ==} cpu: [arm64] os: [darwin] requiresBuild: true optional: true - /@rollup/rollup-darwin-x64@4.9.6: - resolution: {integrity: sha512-zRDtdJuRvA1dc9Mp6BWYqAsU5oeLixdfUvkTHuiYOHwqYuQ4YgSmi6+/lPvSsqc/I0Omw3DdICx4Tfacdzmhog==} + /@rollup/rollup-darwin-x64@4.12.0: + resolution: {integrity: sha512-cc71KUZoVbUJmGP2cOuiZ9HSOP14AzBAThn3OU+9LcA1+IUqswJyR1cAJj3Mg55HbjZP6OLAIscbQsQLrpgTOg==} cpu: [x64] os: [darwin] requiresBuild: true optional: true - /@rollup/rollup-linux-arm-gnueabihf@4.9.6: - resolution: {integrity: sha512-oNk8YXDDnNyG4qlNb6is1ojTOGL/tRhbbKeE/YuccItzerEZT68Z9gHrY3ROh7axDc974+zYAPxK5SH0j/G+QQ==} + /@rollup/rollup-linux-arm-gnueabihf@4.12.0: + resolution: {integrity: sha512-a6w/Y3hyyO6GlpKL2xJ4IOh/7d+APaqLYdMf86xnczU3nurFTaVN9s9jOXQg97BE4nYm/7Ga51rjec5nfRdrvA==} cpu: [arm] os: [linux] requiresBuild: true optional: true - /@rollup/rollup-linux-arm64-gnu@4.9.6: - resolution: {integrity: sha512-Z3O60yxPtuCYobrtzjo0wlmvDdx2qZfeAWTyfOjEDqd08kthDKexLpV97KfAeUXPosENKd8uyJMRDfFMxcYkDQ==} + /@rollup/rollup-linux-arm64-gnu@4.12.0: + resolution: {integrity: sha512-0fZBq27b+D7Ar5CQMofVN8sggOVhEtzFUwOwPppQt0k+VR+7UHMZZY4y+64WJ06XOhBTKXtQB/Sv0NwQMXyNAA==} cpu: [arm64] os: [linux] requiresBuild: true optional: true - /@rollup/rollup-linux-arm64-musl@4.9.6: - resolution: {integrity: sha512-gpiG0qQJNdYEVad+1iAsGAbgAnZ8j07FapmnIAQgODKcOTjLEWM9sRb+MbQyVsYCnA0Im6M6QIq6ax7liws6eQ==} + /@rollup/rollup-linux-arm64-musl@4.12.0: + resolution: {integrity: sha512-eTvzUS3hhhlgeAv6bfigekzWZjaEX9xP9HhxB0Dvrdbkk5w/b+1Sxct2ZuDxNJKzsRStSq1EaEkVSEe7A7ipgQ==} cpu: [arm64] os: [linux] requiresBuild: true optional: true - /@rollup/rollup-linux-riscv64-gnu@4.9.6: - resolution: {integrity: sha512-+uCOcvVmFUYvVDr27aiyun9WgZk0tXe7ThuzoUTAukZJOwS5MrGbmSlNOhx1j80GdpqbOty05XqSl5w4dQvcOA==} + /@rollup/rollup-linux-riscv64-gnu@4.12.0: + resolution: {integrity: sha512-ix+qAB9qmrCRiaO71VFfY8rkiAZJL8zQRXveS27HS+pKdjwUfEhqo2+YF2oI+H/22Xsiski+qqwIBxVewLK7sw==} cpu: [riscv64] os: [linux] requiresBuild: true optional: true - /@rollup/rollup-linux-x64-gnu@4.9.6: - resolution: {integrity: sha512-HUNqM32dGzfBKuaDUBqFB7tP6VMN74eLZ33Q9Y1TBqRDn+qDonkAUyKWwF9BR9unV7QUzffLnz9GrnKvMqC/fw==} + /@rollup/rollup-linux-x64-gnu@4.12.0: + resolution: {integrity: sha512-TenQhZVOtw/3qKOPa7d+QgkeM6xY0LtwzR8OplmyL5LrgTWIXpTQg2Q2ycBf8jm+SFW2Wt/DTn1gf7nFp3ssVA==} cpu: [x64] os: [linux] requiresBuild: true optional: true - /@rollup/rollup-linux-x64-musl@4.9.6: - resolution: {integrity: sha512-ch7M+9Tr5R4FK40FHQk8VnML0Szi2KRujUgHXd/HjuH9ifH72GUmw6lStZBo3c3GB82vHa0ZoUfjfcM7JiiMrQ==} + /@rollup/rollup-linux-x64-musl@4.12.0: + resolution: {integrity: sha512-LfFdRhNnW0zdMvdCb5FNuWlls2WbbSridJvxOvYWgSBOYZtgBfW9UGNJG//rwMqTX1xQE9BAodvMH9tAusKDUw==} cpu: [x64] os: [linux] requiresBuild: true optional: true - /@rollup/rollup-win32-arm64-msvc@4.9.6: - resolution: {integrity: sha512-VD6qnR99dhmTQ1mJhIzXsRcTBvTjbfbGGwKAHcu+52cVl15AC/kplkhxzW/uT0Xl62Y/meBKDZvoJSJN+vTeGA==} + /@rollup/rollup-win32-arm64-msvc@4.12.0: + resolution: {integrity: sha512-JPDxovheWNp6d7AHCgsUlkuCKvtu3RB55iNEkaQcf0ttsDU/JZF+iQnYcQJSk/7PtT4mjjVG8N1kpwnI9SLYaw==} cpu: [arm64] os: [win32] requiresBuild: true optional: true - /@rollup/rollup-win32-ia32-msvc@4.9.6: - resolution: {integrity: sha512-J9AFDq/xiRI58eR2NIDfyVmTYGyIZmRcvcAoJ48oDld/NTR8wyiPUu2X/v1navJ+N/FGg68LEbX3Ejd6l8B7MQ==} + /@rollup/rollup-win32-ia32-msvc@4.12.0: + resolution: {integrity: sha512-fjtuvMWRGJn1oZacG8IPnzIV6GF2/XG+h71FKn76OYFqySXInJtseAqdprVTDTyqPxQOG9Exak5/E9Z3+EJ8ZA==} cpu: [ia32] os: [win32] requiresBuild: true optional: true - /@rollup/rollup-win32-x64-msvc@4.9.6: - resolution: {integrity: sha512-jqzNLhNDvIZOrt69Ce4UjGRpXJBzhUBzawMwnaDAwyHriki3XollsewxWzOzz+4yOFDkuJHtTsZFwMxhYJWmLQ==} + /@rollup/rollup-win32-x64-msvc@4.12.0: + resolution: {integrity: sha512-ZYmr5mS2wd4Dew/JjT0Fqi2NPB/ZhZ2VvPp7SmvPZb4Y1CG/LRcS6tcRo2cYU7zLK5A7cdbhWnnWmUjoI4qapg==} cpu: [x64] os: [win32] requiresBuild: true @@ -2647,7 +3570,7 @@ packages: /@rushstack/eslint-patch@1.7.2: resolution: {integrity: sha512-RbhOOTCNoCrbfkRyoXODZp75MlpiHMgbE5MEBZAnnnLyQNgrigEj4p0lzsMDyc1zVsJDLrivB58tgg3emX0eEA==} - dev: true + dev: false /@sapphire/async-queue@1.5.2: resolution: {integrity: sha512-7X7FFAA4DngXUl95+hYbUF19bp1LGiffjJtu7ygrZrbdCSsdDDBaSjB7Akw0ZbOu6k0xpXyljnJ6/RZUvLfRdg==} @@ -2712,7 +3635,7 @@ packages: engines: {node: '>=v18', npm: '>=7'} dependencies: '@types/ws': 8.5.10 - tldts: 6.1.9 + tldts: 6.1.11 tslib: 2.6.2 undici: 6.6.2 dev: false @@ -2770,12 +3693,12 @@ packages: engines: {node: '>=v14.0.0'} dev: false - /@serverless/dashboard-plugin@7.2.0(@aws-sdk/credential-provider-node@3.511.0)(supports-color@8.1.1): + /@serverless/dashboard-plugin@7.2.0(@aws-sdk/credential-provider-node@3.515.0)(supports-color@8.1.1): resolution: {integrity: sha512-Gqzgef+KmrX1OxJW9aubrIN6AvPrtDARMv+NegMNEe+pfkZA/IMuZiSyYUaHgARokdw2/IALOysTLgdFJIrXvA==} engines: {node: '>=12.0'} dependencies: '@aws-sdk/client-cloudformation': 3.511.0 - '@aws-sdk/client-sts': 3.511.0(@aws-sdk/credential-provider-node@3.511.0) + '@aws-sdk/client-sts': 3.511.0(@aws-sdk/credential-provider-node@3.515.0) '@serverless/event-mocks': 1.1.1 '@serverless/platform-client': 4.5.1(supports-color@8.1.1) '@serverless/utils': 6.15.0 @@ -2805,14 +3728,12 @@ packages: - encoding - supports-color - utf-8-validate - dev: true /@serverless/event-mocks@1.1.1: resolution: {integrity: sha512-YAV5V/y+XIOfd+HEVeXfPWZb8C6QLruFk9tBivoX2roQLWVq145s4uxf8D0QioCueuRzkukHUS4JIj+KVoS34A==} dependencies: '@types/lodash': 4.14.202 lodash: 4.17.21 - dev: true /@serverless/platform-client@4.5.1(supports-color@8.1.1): resolution: {integrity: sha512-XltmO/029X76zi0LUFmhsnanhE2wnqH1xf+WBt5K8gumQA9LnrfwLgPxj+VA+mm6wQhy+PCp7H5SS0ZPu7F2Cw==} @@ -2838,7 +3759,6 @@ packages: - debug - supports-color - utf-8-validate - dev: true /@serverless/utils@6.15.0: resolution: {integrity: sha512-7eDbqKv/OBd11jjdZjUwFGN8sHWkeUqLeHXHQxQ1azja2IM7WIH+z/aLgzR6LhB3/MINNwtjesDpjGqTMj2JKQ==} @@ -2879,11 +3799,25 @@ packages: write-file-atomic: 4.0.2 transitivePeerDependencies: - encoding + + /@sinclair/typebox@0.27.8: + resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} dev: true /@sindresorhus/is@4.6.0: resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==} engines: {node: '>=10'} + + /@sinonjs/commons@3.0.1: + resolution: {integrity: sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==} + dependencies: + type-detect: 4.0.8 + dev: true + + /@sinonjs/fake-timers@10.3.0: + resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==} + dependencies: + '@sinonjs/commons': 3.0.1 dev: true /@smithy/abort-controller@2.1.1: @@ -2892,7 +3826,6 @@ packages: dependencies: '@smithy/types': 2.9.1 tslib: 2.6.2 - dev: true /@smithy/config-resolver@2.1.1: resolution: {integrity: sha512-lxfLDpZm+AWAHPFZps5JfDoO9Ux1764fOgvRUBpHIO8HWHcSN1dkgsago1qLRVgm1BZ8RCm8cgv99QvtaOWIhw==} @@ -2903,7 +3836,6 @@ packages: '@smithy/util-config-provider': 2.2.1 '@smithy/util-middleware': 2.1.1 tslib: 2.6.2 - dev: true /@smithy/core@1.3.2: resolution: {integrity: sha512-tYDmTp0f2TZVE18jAOH1PnmkngLQ+dOGUlMd1u67s87ieueNeyqhja6z/Z4MxhybEiXKOWFOmGjfTZWFxljwJw==} @@ -2917,7 +3849,6 @@ packages: '@smithy/types': 2.9.1 '@smithy/util-middleware': 2.1.1 tslib: 2.6.2 - dev: true /@smithy/credential-provider-imds@2.2.1: resolution: {integrity: sha512-7XHjZUxmZYnONheVQL7j5zvZXga+EWNgwEAP6OPZTi7l8J4JTeNh9aIOfE5fKHZ/ee2IeNOh54ZrSna+Vc6TFA==} @@ -2928,7 +3859,6 @@ packages: '@smithy/types': 2.9.1 '@smithy/url-parser': 2.1.1 tslib: 2.6.2 - dev: true /@smithy/eventstream-codec@2.1.1: resolution: {integrity: sha512-E8KYBxBIuU4c+zrpR22VsVrOPoEDzk35bQR3E+xm4k6Pa6JqzkDOdMyf9Atac5GPNKHJBdVaQ4JtjdWX2rl/nw==} @@ -2937,42 +3867,50 @@ packages: '@smithy/types': 2.9.1 '@smithy/util-hex-encoding': 2.1.1 tslib: 2.6.2 - dev: true - /@smithy/eventstream-serde-browser@2.1.1: - resolution: {integrity: sha512-JvEdCmGlZUay5VtlT8/kdR6FlvqTDUiJecMjXsBb0+k1H/qc9ME5n2XKPo8q/MZwEIA1GmGgYMokKGjVvMiDow==} + /@smithy/eventstream-codec@2.1.2: + resolution: {integrity: sha512-2PHrVRixITHSOj3bxfZmY93apGf8/DFiyhRh9W0ukfi07cvlhlRonZ0fjgcqryJjUZ5vYHqqmfIE/Qe1HM9mlw==} + dependencies: + '@aws-crypto/crc32': 3.0.0 + '@smithy/types': 2.10.0 + '@smithy/util-hex-encoding': 2.1.1 + tslib: 2.6.2 + dev: false + + /@smithy/eventstream-serde-browser@2.1.2: + resolution: {integrity: sha512-2N11IFHvOmKuwK6hLVkqM8ge8oiQsFkflr4h07LToxo3rX+njkx/5eRn6RVcyNmpbdbxYYt0s0Pf8u+yhHmOKg==} engines: {node: '>=14.0.0'} dependencies: - '@smithy/eventstream-serde-universal': 2.1.1 - '@smithy/types': 2.9.1 + '@smithy/eventstream-serde-universal': 2.1.2 + '@smithy/types': 2.10.0 tslib: 2.6.2 - dev: true + dev: false - /@smithy/eventstream-serde-config-resolver@2.1.1: - resolution: {integrity: sha512-EqNqXYp3+dk//NmW3NAgQr9bEQ7fsu/CcxQmTiq07JlaIcne/CBWpMZETyXm9w5LXkhduBsdXdlMscfDUDn2fA==} + /@smithy/eventstream-serde-config-resolver@2.1.2: + resolution: {integrity: sha512-nD/+k3mK+lMMwf2AItl7uWma+edHLqiE6LyIYXYnIBlCJcIQnA/vTHjHFoSJFCfG30sBJnU/7u4X5j/mbs9uKg==} engines: {node: '>=14.0.0'} dependencies: - '@smithy/types': 2.9.1 + '@smithy/types': 2.10.0 tslib: 2.6.2 - dev: true + dev: false - /@smithy/eventstream-serde-node@2.1.1: - resolution: {integrity: sha512-LF882q/aFidFNDX7uROAGxq3H0B7rjyPkV6QDn6/KDQ+CG7AFkRccjxRf1xqajq/Pe4bMGGr+VKAaoF6lELIQw==} + /@smithy/eventstream-serde-node@2.1.2: + resolution: {integrity: sha512-zNE6DhbwDEWTKl4mELkrdgXBGC7UsFg1LDkTwizSOFB/gd7G7la083wb0JgU+xPt+TYKK0AuUlOM0rUZSJzqeA==} engines: {node: '>=14.0.0'} dependencies: - '@smithy/eventstream-serde-universal': 2.1.1 - '@smithy/types': 2.9.1 + '@smithy/eventstream-serde-universal': 2.1.2 + '@smithy/types': 2.10.0 tslib: 2.6.2 - dev: true + dev: false - /@smithy/eventstream-serde-universal@2.1.1: - resolution: {integrity: sha512-LR0mMT+XIYTxk4k2fIxEA1BPtW3685QlqufUEUAX1AJcfFfxNDKEvuCRZbO8ntJb10DrIFVJR9vb0MhDCi0sAQ==} + /@smithy/eventstream-serde-universal@2.1.2: + resolution: {integrity: sha512-Upd/zy+dNvvIDPU1HGhW9ivNjvJQ0W4UkkQOzr5Mo0hz2lqnZAyOuit4TK2JAEg/oo+V1gUY4XywDc7zNbCF0g==} engines: {node: '>=14.0.0'} dependencies: - '@smithy/eventstream-codec': 2.1.1 - '@smithy/types': 2.9.1 + '@smithy/eventstream-codec': 2.1.2 + '@smithy/types': 2.10.0 tslib: 2.6.2 - dev: true + dev: false /@smithy/fetch-http-handler@2.4.1: resolution: {integrity: sha512-VYGLinPsFqH68lxfRhjQaSkjXM7JysUOJDTNjHBuN/ykyRb2f1gyavN9+VhhPTWCy32L4yZ2fdhpCs/nStEicg==} @@ -2982,7 +3920,6 @@ packages: '@smithy/types': 2.9.1 '@smithy/util-base64': 2.1.1 tslib: 2.6.2 - dev: true /@smithy/hash-node@2.1.1: resolution: {integrity: sha512-Qhoq0N8f2OtCnvUpCf+g1vSyhYQrZjhSwvJ9qvR8BUGOtTXiyv2x1OD2e6jVGmlpC4E4ax1USHoyGfV9JFsACg==} @@ -2992,21 +3929,18 @@ packages: '@smithy/util-buffer-from': 2.1.1 '@smithy/util-utf8': 2.1.1 tslib: 2.6.2 - dev: true /@smithy/invalid-dependency@2.1.1: resolution: {integrity: sha512-7WTgnKw+VPg8fxu2v9AlNOQ5yaz6RA54zOVB4f6vQuR0xFKd+RzlCpt0WidYTsye7F+FYDIaS/RnJW4pxjNInw==} dependencies: '@smithy/types': 2.9.1 tslib: 2.6.2 - dev: true /@smithy/is-array-buffer@2.1.1: resolution: {integrity: sha512-xozSQrcUinPpNPNPds4S7z/FakDTh1MZWtRP/2vQtYB/u3HYrX2UXuZs+VhaKBd6Vc7g2XPr2ZtwGBNDN6fNKQ==} engines: {node: '>=14.0.0'} dependencies: tslib: 2.6.2 - dev: true /@smithy/middleware-content-length@2.1.1: resolution: {integrity: sha512-rSr9ezUl9qMgiJR0UVtVOGEZElMdGFyl8FzWEF5iEKTlcWxGr2wTqGfDwtH3LAB7h+FPkxqv4ZU4cpuCN9Kf/g==} @@ -3015,7 +3949,6 @@ packages: '@smithy/protocol-http': 3.1.1 '@smithy/types': 2.9.1 tslib: 2.6.2 - dev: true /@smithy/middleware-endpoint@2.4.1: resolution: {integrity: sha512-XPZTb1E2Oav60Ven3n2PFx+rX9EDsU/jSTA8VDamt7FXks67ekjPY/XrmmPDQaFJOTUHJNKjd8+kZxVO5Ael4Q==} @@ -3028,7 +3961,6 @@ packages: '@smithy/url-parser': 2.1.1 '@smithy/util-middleware': 2.1.1 tslib: 2.6.2 - dev: true /@smithy/middleware-retry@2.1.1: resolution: {integrity: sha512-eMIHOBTXro6JZ+WWzZWd/8fS8ht5nS5KDQjzhNMHNRcG5FkNTqcKpYhw7TETMYzbLfhO5FYghHy1vqDWM4FLDA==} @@ -3043,7 +3975,6 @@ packages: '@smithy/util-retry': 2.1.1 tslib: 2.6.2 uuid: 8.3.2 - dev: true /@smithy/middleware-serde@2.1.1: resolution: {integrity: sha512-D8Gq0aQBeE1pxf3cjWVkRr2W54t+cdM2zx78tNrVhqrDykRA7asq8yVJij1u5NDtKzKqzBSPYh7iW0svUKg76g==} @@ -3051,7 +3982,6 @@ packages: dependencies: '@smithy/types': 2.9.1 tslib: 2.6.2 - dev: true /@smithy/middleware-stack@2.1.1: resolution: {integrity: sha512-KPJhRlhsl8CjgGXK/DoDcrFGfAqoqvuwlbxy+uOO4g2Azn1dhH+GVfC3RAp+6PoL5PWPb+vt6Z23FP+Mr6qeCw==} @@ -3059,7 +3989,6 @@ packages: dependencies: '@smithy/types': 2.9.1 tslib: 2.6.2 - dev: true /@smithy/node-config-provider@2.2.1: resolution: {integrity: sha512-epzK3x1xNxA9oJgHQ5nz+2j6DsJKdHfieb+YgJ7ATWxzNcB7Hc+Uya2TUck5MicOPhDV8HZImND7ZOecVr+OWg==} @@ -3069,7 +3998,6 @@ packages: '@smithy/shared-ini-file-loader': 2.3.1 '@smithy/types': 2.9.1 tslib: 2.6.2 - dev: true /@smithy/node-http-handler@2.3.1: resolution: {integrity: sha512-gLA8qK2nL9J0Rk/WEZSvgin4AppvuCYRYg61dcUo/uKxvMZsMInL5I5ZdJTogOvdfVug3N2dgI5ffcUfS4S9PA==} @@ -3080,7 +4008,6 @@ packages: '@smithy/querystring-builder': 2.1.1 '@smithy/types': 2.9.1 tslib: 2.6.2 - dev: true /@smithy/property-provider@2.1.1: resolution: {integrity: sha512-FX7JhhD/o5HwSwg6GLK9zxrMUrGnb3PzNBrcthqHKBc3dH0UfgEAU24xnJ8F0uow5mj17UeBEOI6o3CF2k7Mhw==} @@ -3088,7 +4015,6 @@ packages: dependencies: '@smithy/types': 2.9.1 tslib: 2.6.2 - dev: true /@smithy/protocol-http@3.1.1: resolution: {integrity: sha512-6ZRTSsaXuSL9++qEwH851hJjUA0OgXdQFCs+VDw4tGH256jQ3TjYY/i34N4vd24RV3nrjNsgd1yhb57uMoKbzQ==} @@ -3096,7 +4022,6 @@ packages: dependencies: '@smithy/types': 2.9.1 tslib: 2.6.2 - dev: true /@smithy/querystring-builder@2.1.1: resolution: {integrity: sha512-C/ko/CeEa8jdYE4gt6nHO5XDrlSJ3vdCG0ZAc6nD5ZIE7LBp0jCx4qoqp7eoutBu7VrGMXERSRoPqwi1WjCPbg==} @@ -3105,7 +4030,6 @@ packages: '@smithy/types': 2.9.1 '@smithy/util-uri-escape': 2.1.1 tslib: 2.6.2 - dev: true /@smithy/querystring-parser@2.1.1: resolution: {integrity: sha512-H4+6jKGVhG1W4CIxfBaSsbm98lOO88tpDWmZLgkJpt8Zkk/+uG0FmmqMuCAc3HNM2ZDV+JbErxr0l5BcuIf/XQ==} @@ -3113,14 +4037,12 @@ packages: dependencies: '@smithy/types': 2.9.1 tslib: 2.6.2 - dev: true /@smithy/service-error-classification@2.1.1: resolution: {integrity: sha512-txEdZxPUgM1PwGvDvHzqhXisrc5LlRWYCf2yyHfvITWioAKat7srQvpjMAvgzf0t6t7j8yHrryXU9xt7RZqFpw==} engines: {node: '>=14.0.0'} dependencies: '@smithy/types': 2.9.1 - dev: true /@smithy/shared-ini-file-loader@2.3.1: resolution: {integrity: sha512-2E2kh24igmIznHLB6H05Na4OgIEilRu0oQpYXo3LCNRrawHAcfDKq9004zJs+sAMt2X5AbY87CUCJ7IpqpSgdw==} @@ -3128,7 +4050,6 @@ packages: dependencies: '@smithy/types': 2.9.1 tslib: 2.6.2 - dev: true /@smithy/signature-v4@2.1.1: resolution: {integrity: sha512-Hb7xub0NHuvvQD3YwDSdanBmYukoEkhqBjqoxo+bSdC0ryV9cTfgmNjuAQhTPYB6yeU7hTR+sPRiFMlxqv6kmg==} @@ -3142,7 +4063,6 @@ packages: '@smithy/util-uri-escape': 2.1.1 '@smithy/util-utf8': 2.1.1 tslib: 2.6.2 - dev: true /@smithy/smithy-client@2.3.1: resolution: {integrity: sha512-YsTdU8xVD64r2pLEwmltrNvZV6XIAC50LN6ivDopdt+YiF/jGH6PY9zUOu0CXD/d8GMB8gbhnpPsdrjAXHS9QA==} @@ -3154,14 +4074,18 @@ packages: '@smithy/types': 2.9.1 '@smithy/util-stream': 2.1.1 tslib: 2.6.2 - dev: true + + /@smithy/types@2.10.0: + resolution: {integrity: sha512-QYXQmpIebS8/jYXgyJjCanKZbI4Rr8tBVGBAIdDhA35f025TVjJNW69FJ0TGiDqt+lIGo037YIswq2t2Y1AYZQ==} + engines: {node: '>=14.0.0'} + dependencies: + tslib: 2.6.2 /@smithy/types@2.9.1: resolution: {integrity: sha512-vjXlKNXyprDYDuJ7UW5iobdmyDm6g8dDG+BFUncAg/3XJaN45Gy5RWWWUVgrzIK7S4R1KWgIX5LeJcfvSI24bw==} engines: {node: '>=14.0.0'} dependencies: tslib: 2.6.2 - dev: true /@smithy/url-parser@2.1.1: resolution: {integrity: sha512-qC9Bv8f/vvFIEkHsiNrUKYNl8uKQnn4BdhXl7VzQRP774AwIjiSMMwkbT+L7Fk8W8rzYVifzJNYxv1HwvfBo3Q==} @@ -3169,7 +4093,6 @@ packages: '@smithy/querystring-parser': 2.1.1 '@smithy/types': 2.9.1 tslib: 2.6.2 - dev: true /@smithy/util-base64@2.1.1: resolution: {integrity: sha512-UfHVpY7qfF/MrgndI5PexSKVTxSZIdz9InghTFa49QOvuu9I52zLPLUHXvHpNuMb1iD2vmc6R+zbv/bdMipR/g==} @@ -3177,20 +4100,17 @@ packages: dependencies: '@smithy/util-buffer-from': 2.1.1 tslib: 2.6.2 - dev: true /@smithy/util-body-length-browser@2.1.1: resolution: {integrity: sha512-ekOGBLvs1VS2d1zM2ER4JEeBWAvIOUKeaFch29UjjJsxmZ/f0L3K3x0dEETgh3Q9bkZNHgT+rkdl/J/VUqSRag==} dependencies: tslib: 2.6.2 - dev: true /@smithy/util-body-length-node@2.2.1: resolution: {integrity: sha512-/ggJG+ta3IDtpNVq4ktmEUtOkH1LW64RHB5B0hcr5ZaWBmo96UX2cIOVbjCqqDickTXqBWZ4ZO0APuaPrD7Abg==} engines: {node: '>=14.0.0'} dependencies: tslib: 2.6.2 - dev: true /@smithy/util-buffer-from@2.1.1: resolution: {integrity: sha512-clhNjbyfqIv9Md2Mg6FffGVrJxw7bgK7s3Iax36xnfVj6cg0fUG7I4RH0XgXJF8bxi+saY5HR21g2UPKSxVCXg==} @@ -3198,14 +4118,12 @@ packages: dependencies: '@smithy/is-array-buffer': 2.1.1 tslib: 2.6.2 - dev: true /@smithy/util-config-provider@2.2.1: resolution: {integrity: sha512-50VL/tx9oYYcjJn/qKqNy7sCtpD0+s8XEBamIFo4mFFTclKMNp+rsnymD796uybjiIquB7VCB/DeafduL0y2kw==} engines: {node: '>=14.0.0'} dependencies: tslib: 2.6.2 - dev: true /@smithy/util-defaults-mode-browser@2.1.1: resolution: {integrity: sha512-lqLz/9aWRO6mosnXkArtRuQqqZBhNpgI65YDpww4rVQBuUT7qzKbDLG5AmnQTCiU4rOquaZO/Kt0J7q9Uic7MA==} @@ -3216,7 +4134,6 @@ packages: '@smithy/types': 2.9.1 bowser: 2.11.0 tslib: 2.6.2 - dev: true /@smithy/util-defaults-mode-node@2.2.0: resolution: {integrity: sha512-iFJp/N4EtkanFpBUtSrrIbtOIBf69KNuve03ic1afhJ9/korDxdM0c6cCH4Ehj/smI9pDCfVv+bqT3xZjF2WaA==} @@ -3229,7 +4146,6 @@ packages: '@smithy/smithy-client': 2.3.1 '@smithy/types': 2.9.1 tslib: 2.6.2 - dev: true /@smithy/util-endpoints@1.1.1: resolution: {integrity: sha512-sI4d9rjoaekSGEtq3xSb2nMjHMx8QXcz2cexnVyRWsy4yQ9z3kbDpX+7fN0jnbdOp0b3KSTZJZ2Yb92JWSanLw==} @@ -3238,14 +4154,12 @@ packages: '@smithy/node-config-provider': 2.2.1 '@smithy/types': 2.9.1 tslib: 2.6.2 - dev: true /@smithy/util-hex-encoding@2.1.1: resolution: {integrity: sha512-3UNdP2pkYUUBGEXzQI9ODTDK+Tcu1BlCyDBaRHwyxhA+8xLP8agEKQq4MGmpjqb4VQAjq9TwlCQX0kP6XDKYLg==} engines: {node: '>=14.0.0'} dependencies: tslib: 2.6.2 - dev: true /@smithy/util-middleware@2.1.1: resolution: {integrity: sha512-mKNrk8oz5zqkNcbcgAAepeJbmfUW6ogrT2Z2gDbIUzVzNAHKJQTYmH9jcy0jbWb+m7ubrvXKb6uMjkSgAqqsFA==} @@ -3253,7 +4167,6 @@ packages: dependencies: '@smithy/types': 2.9.1 tslib: 2.6.2 - dev: true /@smithy/util-retry@2.1.1: resolution: {integrity: sha512-Mg+xxWPTeSPrthpC5WAamJ6PW4Kbo01Fm7lWM1jmGRvmrRdsd3192Gz2fBXAMURyXpaNxyZf6Hr/nQ4q70oVEA==} @@ -3262,7 +4175,6 @@ packages: '@smithy/service-error-classification': 2.1.1 '@smithy/types': 2.9.1 tslib: 2.6.2 - dev: true /@smithy/util-stream@2.1.1: resolution: {integrity: sha512-J7SMIpUYvU4DQN55KmBtvaMc7NM3CZ2iWICdcgaovtLzseVhAqFRYqloT3mh0esrFw+3VEK6nQFteFsTqZSECQ==} @@ -3276,14 +4188,12 @@ packages: '@smithy/util-hex-encoding': 2.1.1 '@smithy/util-utf8': 2.1.1 tslib: 2.6.2 - dev: true /@smithy/util-uri-escape@2.1.1: resolution: {integrity: sha512-saVzI1h6iRBUVSqtnlOnc9ssU09ypo7n+shdQ8hBTZno/9rZ3AuRYvoHInV57VF7Qn7B+pFJG7qTzFiHxWlWBw==} engines: {node: '>=14.0.0'} dependencies: tslib: 2.6.2 - dev: true /@smithy/util-utf8@2.1.1: resolution: {integrity: sha512-BqTpzYEcUMDwAKr7/mVRUtHDhs6ZoXDi9NypMvMfOr/+u1NW7JgqodPDECiiLboEm6bobcPcECxzjtQh865e9A==} @@ -3291,7 +4201,6 @@ packages: dependencies: '@smithy/util-buffer-from': 2.1.1 tslib: 2.6.2 - dev: true /@smithy/util-waiter@2.1.1: resolution: {integrity: sha512-kYy6BLJJNif+uqNENtJqWdXcpqo1LS+nj1AfXcDhOpqpSHJSAkVySLyZV9fkmuVO21lzGoxjvd1imGGJHph/IA==} @@ -3300,7 +4209,6 @@ packages: '@smithy/abort-controller': 2.1.1 '@smithy/types': 2.9.1 tslib: 2.6.2 - dev: true /@swc/helpers@0.5.2: resolution: {integrity: sha512-E4KcWTpoLHqwPHLxidpOqQbcrZVgi0rsmmZXUle1jXmJfuIf/UWpczUJ7MZZ5tlxytgJXyp0w4PGkkeLiuIdZw==} @@ -3313,11 +4221,9 @@ packages: engines: {node: '>=10'} dependencies: defer-to-connect: 2.0.1 - dev: true /@tokenizer/token@0.3.0: resolution: {integrity: sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==} - dev: true /@trivago/prettier-plugin-sort-imports@4.3.0(prettier@3.2.5): resolution: {integrity: sha512-r3n0onD3BTOVUNPhR4lhVK4/pABGpbA7bW3eumZnYdKaHkf1qEC+Mag6DPbGNuuh0eG8AaYj+YqmVHSiGslaTQ==} @@ -3343,11 +4249,33 @@ packages: resolution: {integrity: sha512-sr852MAL/79rjDelXP6ZuJ6GwOvXIRrFAoC8a+w91mZ5XR71CuzSgo1d0+pG1qgfPhjFgaibu7SWaoC5BA7pyQ==} dev: true - /@types/body-parser@1.19.5: - resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==} + /@types/babel__core@7.20.5: + resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} dependencies: - '@types/connect': 3.4.38 - '@types/node': 20.11.16 + '@babel/parser': 7.23.9 + '@babel/types': 7.23.9 + '@types/babel__generator': 7.6.8 + '@types/babel__template': 7.4.4 + '@types/babel__traverse': 7.20.5 + dev: true + + /@types/babel__generator@7.6.8: + resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} + dependencies: + '@babel/types': 7.23.9 + dev: true + + /@types/babel__template@7.4.4: + resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} + dependencies: + '@babel/parser': 7.23.9 + '@babel/types': 7.23.9 + dev: true + + /@types/babel__traverse@7.20.5: + resolution: {integrity: sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ==} + dependencies: + '@babel/types': 7.23.9 dev: true /@types/cacheable-request@6.0.3: @@ -3357,13 +4285,6 @@ packages: '@types/keyv': 3.1.4 '@types/node': 20.11.16 '@types/responselike': 1.0.3 - dev: true - - /@types/connect@3.4.38: - resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} - dependencies: - '@types/node': 20.11.16 - dev: true /@types/cookie@0.6.0: resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==} @@ -3371,30 +4292,29 @@ packages: /@types/estree@1.0.5: resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} - /@types/express-serve-static-core@4.17.43: - resolution: {integrity: sha512-oaYtiBirUOPQGSWNGPWnzyAFJ0BP3cwvN4oWZQY+zUBwpVIGsKUkpBpSztp74drYcjavs7SKFZ4DX1V2QeN8rg==} + /@types/graceful-fs@4.1.9: + resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} dependencies: '@types/node': 20.11.16 - '@types/qs': 6.9.11 - '@types/range-parser': 1.2.7 - '@types/send': 0.17.4 - dev: true - - /@types/express@4.17.21: - resolution: {integrity: sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==} - dependencies: - '@types/body-parser': 1.19.5 - '@types/express-serve-static-core': 4.17.43 - '@types/qs': 6.9.11 - '@types/serve-static': 1.15.5 dev: true /@types/http-cache-semantics@4.0.4: resolution: {integrity: sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==} + + /@types/istanbul-lib-coverage@2.0.6: + resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} + dev: true + + /@types/istanbul-lib-report@3.0.3: + resolution: {integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==} + dependencies: + '@types/istanbul-lib-coverage': 2.0.6 dev: true - /@types/http-errors@2.0.4: - resolution: {integrity: sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==} + /@types/istanbul-reports@3.0.4: + resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==} + dependencies: + '@types/istanbul-lib-report': 3.0.3 dev: true /@types/json-schema@7.0.15: @@ -3403,24 +4323,15 @@ packages: /@types/json5@0.0.29: resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} + dev: false /@types/keyv@3.1.4: resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==} dependencies: '@types/node': 20.11.16 - dev: true /@types/lodash@4.14.202: resolution: {integrity: sha512-OvlIYQK9tNneDlS0VN54LLd5uiPCBOp7gS5Z0f1mjoJYBrtStzgmJBxONW3U6OZqdtNzZPmn9BS/7WI7BFFcFQ==} - dev: true - - /@types/mime@1.3.5: - resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==} - dev: true - - /@types/mime@3.0.4: - resolution: {integrity: sha512-iJt33IQnVRkqeqC7PzBHPTC6fDlRNRW8vjrgqtScAhrmMwe8c4Eo7+fUGTa+XdWrpEgpyKWMYmi2dIwMAYRzPw==} - dev: true /@types/node@20.11.16: resolution: {integrity: sha512-gKb0enTmRCzXSSUJDq6/sPcqrfCv2mkkG6Jt/clpn5eiCbKTY+SgZUxo+p8ZKMof5dCp9vHQUAB7wOUTod22wQ==} @@ -3431,14 +4342,6 @@ packages: resolution: {integrity: sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==} dev: false - /@types/qs@6.9.11: - resolution: {integrity: sha512-oGk0gmhnEJK4Yyk+oI7EfXsLayXatCWPHary1MtcmbAifkobT9cM9yutG/hZKIseOU0MqbIwQ/u2nn/Gb+ltuQ==} - dev: true - - /@types/range-parser@1.2.7: - resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==} - dev: true - /@types/react-dom@18.2.19: resolution: {integrity: sha512-aZvQL6uUbIJpjZk4U8JZGbau9KDeAwMfmhyWorxgBkqDIEf6ROjRozcmPIicqsUwPUjbkDfHKgGee1Lq65APcA==} dependencies: @@ -3457,11 +4360,10 @@ packages: resolution: {integrity: sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==} dependencies: '@types/node': 20.11.16 - dev: true /@types/retry@0.12.2: resolution: {integrity: sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow==} - dev: true + dev: false /@types/scheduler@0.16.8: resolution: {integrity: sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==} @@ -3471,19 +4373,8 @@ packages: resolution: {integrity: sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==} dev: false - /@types/send@0.17.4: - resolution: {integrity: sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==} - dependencies: - '@types/mime': 1.3.5 - '@types/node': 20.11.16 - dev: true - - /@types/serve-static@1.15.5: - resolution: {integrity: sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ==} - dependencies: - '@types/http-errors': 2.0.4 - '@types/mime': 3.0.4 - '@types/node': 20.11.16 + /@types/stack-utils@2.0.3: + resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} dev: true /@types/webidl-conversions@7.0.3: @@ -3508,6 +4399,16 @@ packages: '@types/node': 20.11.16 dev: false + /@types/yargs-parser@21.0.3: + resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} + dev: true + + /@types/yargs@17.0.32: + resolution: {integrity: sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==} + dependencies: + '@types/yargs-parser': 21.0.3 + dev: true + /@typescript-eslint/eslint-plugin@6.20.0(@typescript-eslint/parser@6.20.0)(eslint@8.56.0)(typescript@5.3.3): resolution: {integrity: sha512-fTwGQUnjhoYHeSF6m5pWNkzmDDdsKELYrOBxhjMrofPqCkoC2k3B2wvGHFxa1CTIqkEn88nlW1HVMztjo2K8Hg==} engines: {node: ^16.0.0 || >=18.0.0} @@ -3556,6 +4457,7 @@ packages: typescript: 5.3.3 transitivePeerDependencies: - supports-color + dev: false /@typescript-eslint/scope-manager@6.20.0: resolution: {integrity: sha512-p4rvHQRDTI1tGGMDFQm+GtxP1ZHyAh64WANVoyEcNMpaTFn3ox/3CcgtIlELnRfKzSs/DwYlDccJEtr3O6qBvA==} @@ -3563,6 +4465,7 @@ packages: dependencies: '@typescript-eslint/types': 6.20.0 '@typescript-eslint/visitor-keys': 6.20.0 + dev: false /@typescript-eslint/type-utils@6.20.0(eslint@8.56.0)(typescript@5.3.3): resolution: {integrity: sha512-qnSobiJQb1F5JjN0YDRPHruQTrX7ICsmltXhkV536mp4idGAYrIyr47zF/JmkJtEcAVnIz4gUYJ7gOZa6SmN4g==} @@ -3587,6 +4490,7 @@ packages: /@typescript-eslint/types@6.20.0: resolution: {integrity: sha512-MM9mfZMAhiN4cOEcUOEx+0HmuaW3WBfukBZPCfwSqFnQy0grXYtngKCqpQN339X3RrwtzspWJrpbrupKYUSBXQ==} engines: {node: ^16.0.0 || >=18.0.0} + dev: false /@typescript-eslint/typescript-estree@6.20.0(typescript@5.3.3): resolution: {integrity: sha512-RnRya9q5m6YYSpBN7IzKu9FmLcYtErkDkc8/dKv81I9QiLLtVBHrjz+Ev/crAqgMNW2FCsoZF4g2QUylMnJz+g==} @@ -3608,6 +4512,7 @@ packages: typescript: 5.3.3 transitivePeerDependencies: - supports-color + dev: false /@typescript-eslint/utils@6.20.0(eslint@8.56.0)(typescript@5.3.3): resolution: {integrity: sha512-/EKuw+kRu2vAqCoDwDCBtDRU6CTKbUmwwI7SH7AashZ+W+7o8eiyy6V2cdOqN49KsTcASWsC5QeghYuRDTyOOg==} @@ -3634,10 +4539,27 @@ packages: dependencies: '@typescript-eslint/types': 6.20.0 eslint-visitor-keys: 3.4.3 + dev: false /@ungap/structured-clone@1.2.0: resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} + /@vercel/analytics@1.2.2(next@14.1.0)(react@18.2.0): + resolution: {integrity: sha512-X0rctVWkQV1e5Y300ehVNqpOfSOufo7ieA5PIdna8yX/U7Vjz0GFsGf4qvAhxV02uQ2CVt7GYcrFfddXXK2Y4A==} + peerDependencies: + next: '>= 13' + react: ^18 || ^19 + peerDependenciesMeta: + next: + optional: true + react: + optional: true + dependencies: + next: 14.1.0(react-dom@18.2.0)(react@18.2.0) + react: 18.2.0 + server-only: 0.0.1 + dev: false + /@vladfrangu/async_event_emitter@2.2.4: resolution: {integrity: sha512-ButUPz9E9cXMLgvAW8aLAKKJJsPu1dY1/l/E8xzLFuysowXygs6GBcyunK9rnGC4zTsnIc2mQo71rGw9U+Ykug==} engines: {node: '>=v14.0.0', npm: '>=7.0.0'} @@ -3648,15 +4570,6 @@ packages: engines: {node: '>=6.5'} dependencies: event-target-shim: 5.0.1 - dev: true - - /accepts@1.3.8: - resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} - engines: {node: '>= 0.6'} - dependencies: - mime-types: 2.1.35 - negotiator: 0.6.3 - dev: false /acorn-jsx@5.3.2(acorn@8.11.3): resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} @@ -3678,7 +4591,6 @@ packages: /adm-zip@0.5.10: resolution: {integrity: sha512-x0HvcHqVJNTPk/Bw8JbLWlWoo6Wwnsug0fnYYro1HBrjxZ3G7/AZk7Ahv8JwDe1uIcz8eBqvu86FuF1POiG7vQ==} engines: {node: '>=6.0'} - dev: true /agent-base@6.0.2(supports-color@8.1.1): resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} @@ -3687,7 +4599,6 @@ packages: debug: 4.3.4(supports-color@8.1.1) transitivePeerDependencies: - supports-color - dev: true /agent-base@7.1.0: resolution: {integrity: sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==} @@ -3715,7 +4626,6 @@ packages: optional: true dependencies: ajv: 8.12.0 - dev: true /ajv@6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} @@ -3732,13 +4642,12 @@ packages: json-schema-traverse: 1.0.0 require-from-string: 2.0.2 uri-js: 4.4.1 - dev: true /ansi-align@3.0.1: resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==} dependencies: string-width: 4.2.3 - dev: true + dev: false /ansi-colors@4.1.3: resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} @@ -3750,7 +4659,6 @@ packages: engines: {node: '>=8'} dependencies: type-fest: 0.21.3 - dev: true /ansi-escapes@6.2.0: resolution: {integrity: sha512-kzRaCqXnpzWs+3z5ABPQiVke+iq0KXkHo8xiWV4RPTi5Yli0l97BEQuhXV1s7+aSU/fu1kUuxgS4MsQ0fRuygw==} @@ -3770,6 +4678,7 @@ packages: /ansi-styles@3.2.1: resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} engines: {node: '>=4'} + requiresBuild: true dependencies: color-convert: 1.9.3 @@ -3779,6 +4688,11 @@ packages: dependencies: color-convert: 2.0.1 + /ansi-styles@5.2.0: + resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} + engines: {node: '>=10'} + dev: true + /ansi-styles@6.2.1: resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} engines: {node: '>=12'} @@ -3859,7 +4773,6 @@ packages: engines: {node: '>=4'} dependencies: file-type: 4.4.0 - dev: true /archiver-utils@2.1.0: resolution: {integrity: sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==} @@ -3875,7 +4788,6 @@ packages: lodash.union: 4.6.0 normalize-path: 3.0.0 readable-stream: 2.3.8 - dev: true /archiver-utils@3.0.4: resolution: {integrity: sha512-KVgf4XQVrTjhyWmx6cte4RxonPLR9onExufI1jhvw/MQ4BB6IsZD5gT8Lq+u/+pRkWna/6JoHpiQioaqFP5Rzw==} @@ -3891,7 +4803,6 @@ packages: lodash.union: 4.6.0 normalize-path: 3.0.0 readable-stream: 3.6.2 - dev: true /archiver@5.3.2: resolution: {integrity: sha512-+25nxyyznAXF7Nef3y0EbBeqmGZgeN/BxHX29Rs39djAfaFalmQ89SE6CWyDCHzGL0yt/ycBtNOmGTW0FyGWNw==} @@ -3904,13 +4815,11 @@ packages: readdir-glob: 1.1.3 tar-stream: 2.2.0 zip-stream: 4.1.1 - dev: true /argparse@1.0.10: resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} dependencies: sprintf-js: 1.0.3 - dev: true /argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} @@ -3919,7 +4828,7 @@ packages: resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==} dependencies: dequal: 2.0.3 - dev: true + dev: false /array-buffer-byte-length@1.0.1: resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==} @@ -3927,9 +4836,6 @@ packages: dependencies: call-bind: 1.0.6 is-array-buffer: 3.0.4 - - /array-flatten@1.1.1: - resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} dev: false /array-includes@3.1.7: @@ -3941,6 +4847,7 @@ packages: es-abstract: 1.22.3 get-intrinsic: 1.2.4 is-string: 1.0.7 + dev: false /array-tree-filter@2.1.0: resolution: {integrity: sha512-4ROwICNlNw/Hqa9v+rk5h22KjmzB1JGTMVKP2AKJBOCgb0yL0ASf0+YvCcLNNwquOHNX48jkeZIJ3a+oOQqKcw==} @@ -3949,7 +4856,7 @@ packages: /array-unflat-js@0.1.3: resolution: {integrity: sha512-8pljkLj4vfz2i7Tf3yB31tRrszjP8/kwIyABGfcZ1GcHlvdUB0Sbx0WzQkOPMqUBxa/bu4+/NAyHEpDtZJzlJw==} engines: {node: '>=14.18.0'} - dev: true + dev: false /array-union@2.1.0: resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} @@ -3964,6 +4871,7 @@ packages: es-abstract: 1.22.3 es-shim-unscopables: 1.0.2 get-intrinsic: 1.2.4 + dev: false /array.prototype.flat@1.3.2: resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} @@ -3973,6 +4881,7 @@ packages: define-properties: 1.2.1 es-abstract: 1.22.3 es-shim-unscopables: 1.0.2 + dev: false /array.prototype.flatmap@1.3.2: resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} @@ -3982,6 +4891,7 @@ packages: define-properties: 1.2.1 es-abstract: 1.22.3 es-shim-unscopables: 1.0.2 + dev: false /array.prototype.tosorted@1.1.3: resolution: {integrity: sha512-/DdH4TiTmOKzyQbp/eadcCVexiCb36xJg7HshYOYJnNZFDj33GEv0P7GxsynpShhq4OLYJzbGcBDkLsDt7MnNg==} @@ -3991,7 +4901,7 @@ packages: es-abstract: 1.22.3 es-errors: 1.3.0 es-shim-unscopables: 1.0.2 - dev: true + dev: false /arraybuffer.prototype.slice@1.0.2: resolution: {integrity: sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==} @@ -4004,14 +4914,14 @@ packages: get-intrinsic: 1.2.4 is-array-buffer: 3.0.4 is-shared-array-buffer: 1.0.2 + dev: false /asap@2.0.6: resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} - dev: true /ast-types-flow@0.0.8: resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==} - dev: true + dev: false /async-validator@4.2.5: resolution: {integrity: sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==} @@ -4019,13 +4929,12 @@ packages: /async@3.2.5: resolution: {integrity: sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==} - dev: true /asynciterator.prototype@1.0.0: resolution: {integrity: sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==} dependencies: has-symbols: 1.0.3 - dev: true + dev: false /asynckit@0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} @@ -4033,7 +4942,11 @@ packages: /at-least-node@1.0.0: resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} engines: {node: '>= 4.0.0'} - dev: true + + /atomic-sleep@1.0.0: + resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==} + engines: {node: '>=8.0.0'} + dev: false /available-typed-arrays@1.0.6: resolution: {integrity: sha512-j1QzY8iPNPG4o4xmO3ptzpRxTciqD3MgEHtifP/YnJpIo58Xu+ne4BejlbkuaLfXn/nz6HFiw29bLpj2PNMdGg==} @@ -4053,12 +4966,11 @@ packages: util: 0.12.5 uuid: 8.0.0 xml2js: 0.6.2 - dev: true /axe-core@4.7.0: resolution: {integrity: sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ==} engines: {node: '>=4'} - dev: true + dev: false /axios@1.6.7: resolution: {integrity: sha512-/hDJGff6/c7u0hDkvkGxR/oy6CbCs8ziCsC7SqmhjfozqiJGc8Z11wrv9z9lYfY4K8l+H9TpjcMDX0xOZmx+RA==} @@ -4073,6 +4985,78 @@ packages: resolution: {integrity: sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==} dependencies: dequal: 2.0.3 + dev: false + + /babel-jest@29.7.0(@babel/core@7.23.9): + resolution: {integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@babel/core': ^7.8.0 + dependencies: + '@babel/core': 7.23.9 + '@jest/transform': 29.7.0 + '@types/babel__core': 7.20.5 + babel-plugin-istanbul: 6.1.1 + babel-preset-jest: 29.6.3(@babel/core@7.23.9) + chalk: 4.1.2 + graceful-fs: 4.2.11 + slash: 3.0.0 + transitivePeerDependencies: + - supports-color + dev: true + + /babel-plugin-istanbul@6.1.1: + resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} + engines: {node: '>=8'} + dependencies: + '@babel/helper-plugin-utils': 7.22.5 + '@istanbuljs/load-nyc-config': 1.1.0 + '@istanbuljs/schema': 0.1.3 + istanbul-lib-instrument: 5.2.1 + test-exclude: 6.0.0 + transitivePeerDependencies: + - supports-color + dev: true + + /babel-plugin-jest-hoist@29.6.3: + resolution: {integrity: sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@babel/template': 7.23.9 + '@babel/types': 7.23.9 + '@types/babel__core': 7.20.5 + '@types/babel__traverse': 7.20.5 + dev: true + + /babel-preset-current-node-syntax@1.0.1(@babel/core@7.23.9): + resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.9 + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.9) + '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.23.9) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.23.9) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.23.9) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.9) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.9) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.9) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.9) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.9) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.9) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.9) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.23.9) + dev: true + + /babel-preset-jest@29.6.3(@babel/core@7.23.9): + resolution: {integrity: sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.9 + babel-plugin-jest-hoist: 29.6.3 + babel-preset-current-node-syntax: 1.0.1(@babel/core@7.23.9) dev: true /balanced-match@1.0.2: @@ -4106,7 +5090,6 @@ packages: dependencies: readable-stream: 2.3.8 safe-buffer: 5.2.1 - dev: true /bl@4.1.0: resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} @@ -4114,36 +5097,14 @@ packages: buffer: 5.7.1 inherits: 2.0.4 readable-stream: 3.6.2 - dev: true /bluebird@3.7.2: resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==} - dev: true /bmp-js@0.1.0: resolution: {integrity: sha512-vHdS19CnY3hwiNdkaqk93DvjVLfbEcI8mys4UjuWrlX1haDmroo8o4xCzh4wD6DGV6HxRCyauwhHRqMTfERtjw==} dev: false - /body-parser@1.20.1: - resolution: {integrity: sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==} - engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} - dependencies: - bytes: 3.1.2 - content-type: 1.0.5 - debug: 2.6.9 - depd: 2.0.0 - destroy: 1.2.0 - http-errors: 2.0.0 - iconv-lite: 0.4.24 - on-finished: 2.4.1 - qs: 6.11.0 - raw-body: 2.5.1 - type-is: 1.6.18 - unpipe: 1.0.0 - transitivePeerDependencies: - - supports-color - dev: false - /bootstrap@5.3.2(@popperjs/core@2.11.8): resolution: {integrity: sha512-D32nmNWiQHo94BKHLmOrdjlL05q1c8oxbtBphQFb9Z5to6eGRDCm0QgeaZ4zFBHzfg2++rqa2JkqCcxDy0sH0g==} peerDependencies: @@ -4154,7 +5115,6 @@ packages: /bowser@2.11.0: resolution: {integrity: sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==} - dev: true /boxen@7.1.1: resolution: {integrity: sha512-2hCgjEmP8YLWQ130n2FerGv7rYpfBmnmp9Uy2Le1vge6X3gZIfSmEzP5QTDElFxcvVcXlEn8Aq6MU/PZygIOog==} @@ -4168,7 +5128,7 @@ packages: type-fest: 2.19.0 widest-line: 4.0.1 wrap-ansi: 8.1.0 - dev: true + dev: false /brace-expansion@1.1.11: resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} @@ -4187,6 +5147,30 @@ packages: dependencies: fill-range: 7.0.1 + /browserslist@4.23.0: + resolution: {integrity: sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + dependencies: + caniuse-lite: 1.0.30001587 + electron-to-chromium: 1.4.676 + node-releases: 2.0.14 + update-browserslist-db: 1.0.13(browserslist@4.23.0) + dev: true + + /bs-logger@0.2.6: + resolution: {integrity: sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==} + engines: {node: '>= 6'} + dependencies: + fast-json-stable-stringify: 2.1.0 + dev: true + + /bser@2.1.1: + resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} + dependencies: + node-int64: 0.4.0 + dev: true + /bson@6.3.0: resolution: {integrity: sha512-balJfqwwTBddxfnidJZagCBPP/f48zj9Sdp3OJswREOgsJzHiQSaOIAtApSgDQFYgHqAvFkp53AFSqjMDZoTFw==} engines: {node: '>=16.20.1'} @@ -4194,18 +5178,15 @@ packages: /buffer-alloc-unsafe@1.1.0: resolution: {integrity: sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==} - dev: true /buffer-alloc@1.2.0: resolution: {integrity: sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==} dependencies: buffer-alloc-unsafe: 1.1.0 buffer-fill: 1.0.0 - dev: true /buffer-crc32@0.2.13: resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} - dev: true /buffer-equal-constant-time@1.0.1: resolution: {integrity: sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==} @@ -4213,6 +5194,9 @@ packages: /buffer-fill@1.0.0: resolution: {integrity: sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==} + + /buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} dev: true /buffer@4.9.2: @@ -4221,23 +5205,26 @@ packages: base64-js: 1.5.1 ieee754: 1.2.1 isarray: 1.0.0 - dev: true /buffer@5.7.1: resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} dependencies: base64-js: 1.5.1 ieee754: 1.2.1 - dev: true + + /buffer@6.0.3: + resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + dev: false /builtin-modules@3.3.0: resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} engines: {node: '>=6'} - dev: true /builtins@1.0.3: resolution: {integrity: sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ==} - dev: true /builtins@5.0.1: resolution: {integrity: sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==} @@ -4261,11 +5248,6 @@ packages: streamsearch: 1.1.0 dev: false - /bytes@3.1.2: - resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} - engines: {node: '>= 0.8'} - dev: false - /cac@6.7.14: resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} engines: {node: '>=8'} @@ -4273,7 +5255,6 @@ packages: /cacheable-lookup@5.0.4: resolution: {integrity: sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==} engines: {node: '>=10.6.0'} - dev: true /cacheable-request@7.0.4: resolution: {integrity: sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==} @@ -4286,12 +5267,10 @@ packages: lowercase-keys: 2.0.0 normalize-url: 6.1.0 responselike: 2.0.1 - dev: true /cachedir@2.4.0: resolution: {integrity: sha512-9EtFOZR8g22CL7BWjJ9BUx1+A/djkofnyW3aOXZORNW2kxoUpx2h+uN2cOqwPmFhnpVmxg+KW2OjOSgChTEvsQ==} engines: {node: '>=6'} - dev: true /call-bind@1.0.6: resolution: {integrity: sha512-Mj50FLHtlsoVfRfnHaZvyrooHcrlceNZdL/QBvJJVd9Ta55qCQK0gs4ss2oZDeV9zFCs6ewzYgVE5yfVmfFpVg==} @@ -4306,14 +5285,23 @@ packages: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} + /camelcase@5.3.1: + resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} + engines: {node: '>=6'} + dev: true + + /camelcase@6.3.0: + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} + engines: {node: '>=10'} + dev: true + /camelcase@7.0.1: resolution: {integrity: sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==} engines: {node: '>=14.16'} - dev: true + dev: false /caniuse-lite@1.0.30001587: resolution: {integrity: sha512-HMFNotUmLXn71BQxg8cijvqxnIAofforZOwGsxyXJ0qugTdspUF4sPSJ2vhgprHCB996tIDzEq1ubumPDV8ULA==} - dev: false /chalk@2.4.2: resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} @@ -4333,11 +5321,14 @@ packages: /chalk@5.3.0: resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + + /char-regex@1.0.2: + resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} + engines: {node: '>=10'} dev: true /chardet@0.7.0: resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} - dev: true /child-process-ext@2.1.1: resolution: {integrity: sha512-0UQ55f51JBkOFa+fvR76ywRzxiPwQS3Xe8oe5bZRphpv+dIMeerW5Zn5e4cUy4COJwVtJyU0R79RMnw+aCqmGA==} @@ -4347,7 +5338,6 @@ packages: log: 6.3.1 split2: 3.2.2 stream-promise: 3.2.0 - dev: true /child-process-ext@3.0.2: resolution: {integrity: sha512-oBePsLbQpTJFxzwyCvs9yWWF0OEM6vGGepHwt1stqmX7QQqOuDc8j2ywdvAs9Tvi44TT7d9ackqhR4Q10l1u8w==} @@ -4358,7 +5348,6 @@ packages: log: 6.3.1 split2: 3.2.2 stream-promise: 3.2.0 - dev: true /chokidar@3.5.3: resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} @@ -4377,11 +5366,13 @@ packages: /chownr@2.0.0: resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} engines: {node: '>=10'} - dev: true /ci-info@3.9.0: resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} engines: {node: '>=8'} + + /cjs-module-lexer@1.2.3: + resolution: {integrity: sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==} dev: true /classnames@2.5.1: @@ -4396,7 +5387,7 @@ packages: /cli-boxes@3.0.0: resolution: {integrity: sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==} engines: {node: '>=10'} - dev: true + dev: false /cli-color@2.0.3: resolution: {integrity: sha512-OkoZnxyC4ERN3zLzZaY9Emb7f/MhBOIpePv0Ycok0fJYT+Ouo00UBEIwsVsr0yoow++n5YWlSUgST9GKhNHiRQ==} @@ -4407,14 +5398,12 @@ packages: es6-iterator: 2.0.3 memoizee: 0.4.15 timers-ext: 0.1.7 - dev: true /cli-cursor@3.1.0: resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} engines: {node: '>=8'} dependencies: restore-cursor: 3.1.0 - dev: true /cli-cursor@4.0.0: resolution: {integrity: sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==} @@ -4434,12 +5423,10 @@ packages: process-utils: 4.0.0 timers-ext: 0.1.7 type: 2.7.2 - dev: true /cli-spinners@2.9.2: resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} engines: {node: '>=6'} - dev: true /cli-sprintf-format@1.1.1: resolution: {integrity: sha512-BbEjY9BEdA6wagVwTqPvmAwGB24U93rQPBFZUT8lNCDxXzre5LFHQUTJc70czjgUomVg8u8R5kW8oY9DYRFNeg==} @@ -4449,7 +5436,6 @@ packages: es5-ext: 0.10.62 sprintf-kit: 2.0.1 supports-color: 6.1.0 - dev: true /cli-truncate@4.0.0: resolution: {integrity: sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==} @@ -4462,7 +5448,6 @@ packages: /cli-width@3.0.0: resolution: {integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==} engines: {node: '>= 10'} - dev: true /client-only@0.0.1: resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} @@ -4476,19 +5461,36 @@ packages: wrap-ansi: 7.0.0 dev: true + /cliui@8.0.1: + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + dev: true + /clone-response@1.0.3: resolution: {integrity: sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==} dependencies: mimic-response: 1.0.1 - dev: true /clone@1.0.4: resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} engines: {node: '>=0.8'} + + /co@4.6.0: + resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} + engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} + dev: true + + /collect-v8-coverage@1.0.2: + resolution: {integrity: sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==} dev: true /color-convert@1.9.3: resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + requiresBuild: true dependencies: color-name: 1.1.3 @@ -4500,6 +5502,7 @@ packages: /color-name@1.1.3: resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + requiresBuild: true /color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} @@ -4535,7 +5538,6 @@ packages: /commander@2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} - dev: true /commander@4.1.1: resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} @@ -4543,7 +5545,6 @@ packages: /component-emitter@1.3.1: resolution: {integrity: sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==} - dev: true /compress-commons@4.1.2: resolution: {integrity: sha512-D3uMHtGc/fcO1Gt1/L7i1e33VOvD4A9hfQLP+6ewd+BvG/gQ84Yh4oftEhAdjSMgBgwGL+jsppT7JYNpo6MHHg==} @@ -4553,7 +5554,6 @@ packages: crc32-stream: 4.0.3 normalize-path: 3.0.0 readable-stream: 3.6.2 - dev: true /compute-scroll-into-view@3.1.0: resolution: {integrity: sha512-rj8l8pD4bJ1nx+dAkMhV1xB5RuZEyVysfxJqB1pRchh1KVvwOv9b7CGB8ZfjTImVv2oF+sYMUkMZq6Na5Ftmbg==} @@ -4568,19 +5568,9 @@ packages: dependencies: safe-buffer: 5.2.1 - /content-type@1.0.5: - resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} - engines: {node: '>= 0.6'} - dev: false - - /cookie-signature@1.0.6: - resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} - dev: false - - /cookie@0.5.0: - resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==} - engines: {node: '>= 0.6'} - dev: false + /convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + dev: true /cookie@0.6.0: resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==} @@ -4589,7 +5579,6 @@ packages: /cookiejar@2.1.4: resolution: {integrity: sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==} - dev: true /copy-to-clipboard@3.3.3: resolution: {integrity: sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==} @@ -4599,7 +5588,6 @@ packages: /core-util-is@1.0.3: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} - dev: true /cosmiconfig@9.0.0: resolution: {integrity: sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==} @@ -4620,7 +5608,6 @@ packages: resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} engines: {node: '>=0.8'} hasBin: true - dev: true /crc32-stream@4.0.3: resolution: {integrity: sha512-NT7w2JVU7DFroFdYkeq8cywxrgjPHWkdX1wjpRQXPX5Asews3tA+Ght6lddQO5Mkumffp3X7GEqku3epj2toIw==} @@ -4628,6 +5615,24 @@ packages: dependencies: crc-32: 1.2.2 readable-stream: 3.6.2 + + /create-jest@29.7.0: + resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true + dependencies: + '@jest/types': 29.6.3 + chalk: 4.1.2 + exit: 0.1.2 + graceful-fs: 4.2.11 + jest-config: 29.7.0(@types/node@20.11.16) + jest-util: 29.7.0 + prompts: 2.4.2 + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node dev: true /cron-parser@4.9.0: @@ -4635,7 +5640,7 @@ packages: engines: {node: '>=12.0.0'} dependencies: luxon: 3.4.4 - dev: true + dev: false /cross-spawn@6.0.5: resolution: {integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==} @@ -4646,7 +5651,6 @@ packages: semver: 5.7.2 shebang-command: 1.2.0 which: 1.3.1 - dev: true /cross-spawn@7.0.3: resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} @@ -4669,26 +5673,14 @@ packages: dependencies: es5-ext: 0.10.62 type: 1.2.0 - dev: true /damerau-levenshtein@1.0.8: resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} - dev: true + dev: false /dayjs@1.11.10: resolution: {integrity: sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==} - /debug@2.6.9: - resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - dependencies: - ms: 2.0.0 - dev: false - /debug@3.2.7: resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} peerDependencies: @@ -4698,6 +5690,7 @@ packages: optional: true dependencies: ms: 2.1.3 + dev: false /debug@4.3.4(supports-color@8.1.1): resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} @@ -4716,7 +5709,6 @@ packages: engines: {node: '>=10'} dependencies: mimic-response: 3.1.0 - dev: true /decompress-tar@4.1.1: resolution: {integrity: sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==} @@ -4725,7 +5717,6 @@ packages: file-type: 5.2.0 is-stream: 1.1.0 tar-stream: 1.6.2 - dev: true /decompress-tarbz2@4.1.1: resolution: {integrity: sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==} @@ -4736,7 +5727,6 @@ packages: is-stream: 1.1.0 seek-bzip: 1.0.6 unbzip2-stream: 1.4.3 - dev: true /decompress-targz@4.1.1: resolution: {integrity: sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==} @@ -4745,7 +5735,6 @@ packages: decompress-tar: 4.1.1 file-type: 5.2.0 is-stream: 1.1.0 - dev: true /decompress-unzip@4.0.1: resolution: {integrity: sha512-1fqeluvxgnn86MOh66u8FjbtJpAFv5wgCT9Iw8rcBqQcCo5tO8eiJw7NNTrvt9n4CRBVq7CstiS922oPgyGLrw==} @@ -4755,7 +5744,6 @@ packages: get-stream: 2.3.1 pify: 2.3.0 yauzl: 2.10.0 - dev: true /decompress@4.2.1: resolution: {integrity: sha512-e48kc2IjU+2Zw8cTb6VZcJQ3lgVbS4uuB1TfCHbiZIP/haNXm+SVyhu+87jts5/3ROpd82GSVCoNs/z8l4ZOaQ==} @@ -4769,21 +5757,32 @@ packages: make-dir: 1.3.0 pify: 2.3.0 strip-dirs: 2.1.0 + + /dedent@1.5.1: + resolution: {integrity: sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==} + peerDependencies: + babel-plugin-macros: ^3.1.0 + peerDependenciesMeta: + babel-plugin-macros: + optional: true dev: true /deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + /deepmerge@4.3.1: + resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} + engines: {node: '>=0.10.0'} + dev: true + /defaults@1.0.4: resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} dependencies: clone: 1.0.4 - dev: true /defer-to-connect@2.0.1: resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==} engines: {node: '>=10'} - dev: true /deferred@0.7.11: resolution: {integrity: sha512-8eluCl/Blx4YOGwMapBvXRKxHXhA8ejDXYzEaK8+/gtcm8hRMhSLmXSqDmNUKNc/C8HNSmuyyp/hflhqDAvK2A==} @@ -4793,7 +5792,6 @@ packages: event-emitter: 0.3.5 next-tick: 1.1.0 timers-ext: 0.1.7 - dev: true /define-data-property@1.1.1: resolution: {integrity: sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==} @@ -4806,7 +5804,6 @@ packages: /define-lazy-prop@2.0.0: resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} engines: {node: '>=8'} - dev: true /define-properties@1.2.1: resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} @@ -4815,28 +5812,19 @@ packages: define-data-property: 1.1.1 has-property-descriptors: 1.0.1 object-keys: 1.1.1 + dev: false /delayed-stream@1.0.0: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} - /depd@2.0.0: - resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} - engines: {node: '>= 0.8'} - dev: false - /dequal@2.0.3: resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} engines: {node: '>=6'} - dev: true + dev: false /desm@1.3.1: resolution: {integrity: sha512-vgTAOosB1aHrmzjGnzFCbjvXbk8QAOC/36JxJhcBkeAuUy8QwRFxAWBHemiDpUB3cbrBruFUdzpUS21aocvaWg==} - dev: true - - /destroy@1.2.0: - resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} - engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} dev: false /detect-libc@2.0.2: @@ -4844,11 +5832,20 @@ packages: engines: {node: '>=8'} dev: false + /detect-newline@3.1.0: + resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} + engines: {node: '>=8'} + dev: true + /dezalgo@1.0.4: resolution: {integrity: sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==} dependencies: asap: 2.0.6 wrappy: 1.0.2 + + /diff-sequences@29.6.3: + resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dev: true /dir-glob@3.0.1: @@ -4893,6 +5890,7 @@ packages: engines: {node: '>=0.10.0'} dependencies: esutils: 2.0.3 + dev: false /doctrine@3.0.0: resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} @@ -4903,7 +5901,6 @@ packages: /dotenv-expand@10.0.0: resolution: {integrity: sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A==} engines: {node: '>=12'} - dev: true /dotenv@16.0.3: resolution: {integrity: sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==} @@ -4919,7 +5916,6 @@ packages: dependencies: d: 1.0.1 es5-ext: 0.10.62 - dev: true /eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} @@ -4930,13 +5926,18 @@ packages: safe-buffer: 5.2.1 dev: false - /ee-first@1.1.1: - resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} - dev: false - /effect@2.0.0-next.62: resolution: {integrity: sha512-fJhLzf5oouL4WZP314ZJgZz5Bel7OHTY+YFxO06sW1mSvqJz0s28y7jDHr5zhtTNM1YRvzbeLYUYfNaJYKqx1A==} + /electron-to-chromium@1.4.676: + resolution: {integrity: sha512-uHt4FB8SeYdhcOsj2ix/C39S7sPSNFJpzShjxGOm1KdF4MHyGqGi389+T5cErsodsijojXilYaHIKKqJfqh7uQ==} + dev: true + + /emittery@0.13.1: + resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} + engines: {node: '>=12'} + dev: true + /emoji-regex@10.3.0: resolution: {integrity: sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==} dev: true @@ -4947,16 +5948,10 @@ packages: /emoji-regex@9.2.2: resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} - /encodeurl@1.0.2: - resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} - engines: {node: '>= 0.8'} - dev: false - /end-of-stream@1.4.4: resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} dependencies: once: 1.4.0 - dev: true /enhanced-resolve@5.15.0: resolution: {integrity: sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==} @@ -4964,6 +5959,7 @@ packages: dependencies: graceful-fs: 4.2.11 tapable: 2.2.1 + dev: false /enquirer@2.4.1: resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==} @@ -5027,6 +6023,7 @@ packages: typed-array-length: 1.0.4 unbox-primitive: 1.0.2 which-typed-array: 1.1.14 + dev: false /es-errors@1.3.0: resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} @@ -5051,7 +6048,7 @@ packages: internal-slot: 1.0.7 iterator.prototype: 1.1.2 safe-array-concat: 1.1.0 - dev: true + dev: false /es-set-tostringtag@2.0.2: resolution: {integrity: sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==} @@ -5060,11 +6057,13 @@ packages: get-intrinsic: 1.2.4 has-tostringtag: 1.0.2 hasown: 2.0.0 + dev: false /es-shim-unscopables@1.0.2: resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} dependencies: hasown: 2.0.0 + dev: false /es-to-primitive@1.2.1: resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} @@ -5073,6 +6072,7 @@ packages: is-callable: 1.2.7 is-date-object: 1.0.5 is-symbol: 1.0.4 + dev: false /es5-ext@0.10.62: resolution: {integrity: sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==} @@ -5082,7 +6082,6 @@ packages: es6-iterator: 2.0.3 es6-symbol: 3.1.3 next-tick: 1.1.0 - dev: true /es6-iterator@2.0.3: resolution: {integrity: sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==} @@ -5090,7 +6089,6 @@ packages: d: 1.0.1 es5-ext: 0.10.62 es6-symbol: 3.1.3 - dev: true /es6-set@0.1.6: resolution: {integrity: sha512-TE3LgGLDIBX332jq3ypv6bcOpkLO0AslAQo7p2VqX/1N46YNsvIWgvjojjSEnWEGWMhr1qUbYeTSir5J6mFHOw==} @@ -5102,14 +6100,12 @@ packages: es6-symbol: 3.1.3 event-emitter: 0.3.5 type: 2.7.2 - dev: true /es6-symbol@3.1.3: resolution: {integrity: sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==} dependencies: d: 1.0.1 ext: 1.7.0 - dev: true /es6-weak-map@2.0.3: resolution: {integrity: sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==} @@ -5118,7 +6114,6 @@ packages: es5-ext: 0.10.62 es6-iterator: 2.0.3 es6-symbol: 3.1.3 - dev: true /esbuild@0.19.12: resolution: {integrity: sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==} @@ -5185,14 +6180,15 @@ packages: engines: {node: '>=6'} dev: true - /escape-html@1.0.3: - resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} - dev: false - /escape-string-regexp@1.0.5: resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} engines: {node: '>=0.8.0'} + /escape-string-regexp@2.0.0: + resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} + engines: {node: '>=8'} + dev: true + /escape-string-regexp@4.0.0: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} @@ -5220,7 +6216,7 @@ packages: transitivePeerDependencies: - eslint-import-resolver-webpack - supports-color - dev: true + dev: false /eslint-config-prettier@9.1.0(eslint@8.56.0): resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==} @@ -5248,6 +6244,7 @@ packages: resolve: 1.22.8 transitivePeerDependencies: - supports-color + dev: false /eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.20.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.56.0): resolution: {integrity: sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==} @@ -5270,6 +6267,7 @@ packages: - eslint-import-resolver-node - eslint-import-resolver-webpack - supports-color + dev: false /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.20.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0): resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} @@ -5299,6 +6297,7 @@ packages: eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.20.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.56.0) transitivePeerDependencies: - supports-color + dev: false /eslint-plugin-import-esm@1.2.1(eslint@8.56.0): resolution: {integrity: sha512-7SbavWNrzkCjgGEUXM2eP6XNOD9zSvzTUOvibbtQBO44EIB8LCD8OPItt1KeEbpvSpxs4CGxNsh3oGFMYn887Q==} @@ -5342,6 +6341,7 @@ packages: - eslint-import-resolver-typescript - eslint-import-resolver-webpack - supports-color + dev: false /eslint-plugin-jsx-a11y@6.8.0(eslint@8.56.0): resolution: {integrity: sha512-Hdh937BS3KdwwbBaKd5+PLCOmYY6U4f2h9Z2ktwtNKvIdIEu137rjYbcb9ApSbVJfWxANNuiKTD/9tOKjK9qOA==} @@ -5366,7 +6366,7 @@ packages: minimatch: 3.1.2 object.entries: 1.1.7 object.fromentries: 2.0.7 - dev: true + dev: false /eslint-plugin-prettier@5.1.3(eslint-config-prettier@9.1.0)(eslint@8.56.0)(prettier@3.2.5): resolution: {integrity: sha512-C9GCVAs4Eq7ZC/XFQHITLiHJxQngdtraXaM+LoUFoFp/lHNl2Zn8f3WQbe9HvTBBQ9YnKFB0/2Ajdqwo5D1EAw==} @@ -5396,7 +6396,7 @@ packages: eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 dependencies: eslint: 8.56.0 - dev: true + dev: false /eslint-plugin-react@7.33.2(eslint@8.56.0): resolution: {integrity: sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==} @@ -5421,7 +6421,7 @@ packages: resolve: 2.0.0-next.5 semver: 6.3.1 string.prototype.matchall: 4.0.10 - dev: true + dev: false /eslint-plugin-turbo@1.12.2(eslint@8.56.0): resolution: {integrity: sha512-/l0aGvZRzK1LMRTibRd6ZbEEuD5TtGotDTkZpxSIWA1FI764pWVvQduQMKBaRuz7aTuAo0WxatD8v1scK+qRWw==} @@ -5495,7 +6495,6 @@ packages: dependencies: d: 1.0.1 es5-ext: 0.10.62 - dev: true /espree@9.6.1: resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} @@ -5509,7 +6508,6 @@ packages: resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} engines: {node: '>=4'} hasBin: true - dev: true /esquery@1.5.0: resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} @@ -5527,7 +6525,6 @@ packages: resolution: {integrity: sha512-kP/j7Iw7KeNE8b/o7+tr9uX2s1wegElGOoGZ2Xm35qBr4BbbEcH3/bxR2nfH9l9JANCq9AUrvKw+gRuHtZp0HQ==} dependencies: uni-global: 1.0.0 - dev: true /estraverse@5.3.0: resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} @@ -5537,22 +6534,15 @@ packages: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} - /etag@1.8.1: - resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} - engines: {node: '>= 0.6'} - dev: false - /event-emitter@0.3.5: resolution: {integrity: sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==} dependencies: d: 1.0.1 es5-ext: 0.10.62 - dev: true /event-target-shim@5.0.1: resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} engines: {node: '>=6'} - dev: true /eventemitter3@5.0.1: resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} @@ -5560,7 +6550,11 @@ packages: /events@1.1.1: resolution: {integrity: sha512-kEcvvCBByWXGnZy6JUlgAp2gBIUjfCAV6P6TgT1/aaQKcmuAEC4OZTV1I4EWQLz2gxZw76atuVyvHhTxvi0Flw==} engines: {node: '>=0.4.x'} - dev: true + + /events@3.3.0: + resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} + engines: {node: '>=0.8.x'} + dev: false /execa@5.1.1: resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} @@ -5589,53 +6583,28 @@ packages: onetime: 6.0.0 signal-exit: 4.1.0 strip-final-newline: 3.0.0 + + /exit@0.1.2: + resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==} + engines: {node: '>= 0.8.0'} dev: true - /express@4.18.2: - resolution: {integrity: sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==} - engines: {node: '>= 0.10.0'} + /expect@29.7.0: + resolution: {integrity: sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - accepts: 1.3.8 - array-flatten: 1.1.1 - body-parser: 1.20.1 - content-disposition: 0.5.4 - content-type: 1.0.5 - cookie: 0.5.0 - cookie-signature: 1.0.6 - debug: 2.6.9 - depd: 2.0.0 - encodeurl: 1.0.2 - escape-html: 1.0.3 - etag: 1.8.1 - finalhandler: 1.2.0 - fresh: 0.5.2 - http-errors: 2.0.0 - merge-descriptors: 1.0.1 - methods: 1.1.2 - on-finished: 2.4.1 - parseurl: 1.3.3 - path-to-regexp: 0.1.7 - proxy-addr: 2.0.7 - qs: 6.11.0 - range-parser: 1.2.1 - safe-buffer: 5.2.1 - send: 0.18.0 - serve-static: 1.15.0 - setprototypeof: 1.2.0 - statuses: 2.0.1 - type-is: 1.6.18 - utils-merge: 1.0.1 - vary: 1.1.2 - transitivePeerDependencies: - - supports-color - dev: false + '@jest/expect-utils': 29.7.0 + jest-get-type: 29.6.3 + jest-matcher-utils: 29.7.0 + jest-message-util: 29.7.0 + jest-util: 29.7.0 + dev: true /ext-list@2.2.2: resolution: {integrity: sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA==} engines: {node: '>=0.10.0'} dependencies: mime-db: 1.52.0 - dev: true /ext-name@5.0.0: resolution: {integrity: sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ==} @@ -5643,13 +6612,11 @@ packages: dependencies: ext-list: 2.2.2 sort-keys-length: 1.0.1 - dev: true /ext@1.7.0: resolution: {integrity: sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==} dependencies: type: 2.7.2 - dev: true /extend@3.0.2: resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} @@ -5662,7 +6629,6 @@ packages: chardet: 0.7.0 iconv-lite: 0.4.24 tmp: 0.0.33 - dev: true /fast-check@3.15.0: resolution: {integrity: sha512-iBz6c+EXL6+nI931x/sbZs1JYTZtLG6Cko0ouS8LRTikhDR7+wZk4TYzdRavlnByBs2G6+nuuJ7NYL9QplNt8Q==} @@ -5694,39 +6660,45 @@ packages: /fast-levenshtein@2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + /fast-redact@3.3.0: + resolution: {integrity: sha512-6T5V1QK1u4oF+ATxs1lWUmlEk6P2T9HqJG3e2DnHOdVgZy2rFJBoEnrIedcTXlkAHU/zKC+7KETJ+KGGKwxgMQ==} + engines: {node: '>=6'} + dev: false + /fast-safe-stringify@2.1.1: resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==} - dev: true /fast-xml-parser@4.2.5: resolution: {integrity: sha512-B9/wizE4WngqQftFPmdaMYlXoJlJOYxGQOanC77fq9k8+Z0v5dDSVh+3glErdIROP//s/jgb7ZuxKfB8nVyo0g==} hasBin: true dependencies: strnum: 1.0.5 - dev: true /fastest-levenshtein@1.0.16: resolution: {integrity: sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==} engines: {node: '>= 4.9.1'} - dev: true /fastq@1.17.0: resolution: {integrity: sha512-zGygtijUMT7jnk3h26kUms3BkSDp4IfIKjmnqI2tvx6nuBfiF1UqOxbnLfzdv+apBy+53oaImsKtMw/xYbW+1w==} dependencies: reusify: 1.0.4 + /fb-watchman@2.0.2: + resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} + dependencies: + bser: 2.1.1 + dev: true + /fd-slicer@1.1.0: resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==} dependencies: pend: 1.2.0 - dev: true /figures@3.2.0: resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} engines: {node: '>=8'} dependencies: escape-string-regexp: 1.0.5 - dev: true /file-entry-cache@6.0.1: resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} @@ -5741,32 +6713,26 @@ packages: readable-web-to-node-stream: 3.0.2 strtok3: 6.3.0 token-types: 4.2.1 - dev: true /file-type@3.9.0: resolution: {integrity: sha512-RLoqTXE8/vPmMuTI88DAzhMYC99I8BWv7zYP4A1puo5HIjEJ5EX48ighy4ZyKMG9EDXxBgW6e++cn7d1xuFghA==} engines: {node: '>=0.10.0'} - dev: true /file-type@4.4.0: resolution: {integrity: sha512-f2UbFQEk7LXgWpi5ntcO86OeA/cC80fuDDDaX/fZ2ZGel+AF7leRQqBBW1eJNiiQkrZlAoM6P+VYP5P6bOlDEQ==} engines: {node: '>=4'} - dev: true /file-type@5.2.0: resolution: {integrity: sha512-Iq1nJ6D2+yIO4c8HHg4fyVb8mAJieo1Oloy1mLLaB2PvezNedhBVm+QU7g0qM42aiMbRXTxKKwGD17rjKNJYVQ==} engines: {node: '>=4'} - dev: true /file-type@6.2.0: resolution: {integrity: sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg==} engines: {node: '>=4'} - dev: true /filename-reserved-regex@2.0.0: resolution: {integrity: sha512-lc1bnsSr4L4Bdif8Xb/qrtokGbq5zlsms/CYH8PP+WtCkGNF65DPiQY8vG3SakEdRn8Dlnm+gW/qWKKjS5sZzQ==} engines: {node: '>=4'} - dev: true /filenamify@4.3.0: resolution: {integrity: sha512-hcFKyUG57yWGAzu1CMt/dPzYZuv+jAJUT85bL8mrXvNe6hWj6yEHEc4EdcgiA6Z3oi1/9wXJdZPXF2dZNgwgOg==} @@ -5775,12 +6741,10 @@ packages: filename-reserved-regex: 2.0.0 strip-outer: 1.0.1 trim-repeated: 1.0.0 - dev: true /filesize@10.1.0: resolution: {integrity: sha512-GTLKYyBSDz3nPhlLVPjPWZCnhkd9TrrRArNcy8Z+J2cqScB7h2McAzR6NBX6nYOoWafql0roY8hrocxnZBv9CQ==} engines: {node: '>= 10.4.0'} - dev: true /fill-range@7.0.1: resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} @@ -5788,27 +6752,19 @@ packages: dependencies: to-regex-range: 5.0.1 - /finalhandler@1.2.0: - resolution: {integrity: sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==} - engines: {node: '>= 0.8'} - dependencies: - debug: 2.6.9 - encodeurl: 1.0.2 - escape-html: 1.0.3 - on-finished: 2.4.1 - parseurl: 1.3.3 - statuses: 2.0.1 - unpipe: 1.0.0 - transitivePeerDependencies: - - supports-color - dev: false - /find-requires@1.0.0: resolution: {integrity: sha512-UME7hNwBfzeISSFQcBEDemEEskpOjI/shPrpJM5PI4DSdn6hX0dmz+2dL70blZER2z8tSnTRL+2rfzlYgtbBoQ==} hasBin: true dependencies: es5-ext: 0.10.62 esniff: 1.1.3 + + /find-up@4.1.0: + resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} + engines: {node: '>=8'} + dependencies: + locate-path: 5.0.0 + path-exists: 4.0.0 dev: true /find-up@5.0.0: @@ -5829,7 +6785,6 @@ packages: /flat@5.0.2: resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} hasBin: true - dev: true /flatted@3.2.9: resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==} @@ -5870,25 +6825,13 @@ packages: hexoid: 1.0.0 once: 1.4.0 qs: 6.11.2 - dev: true - - /forwarded@0.2.0: - resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} - engines: {node: '>= 0.6'} - dev: false /fp-ts@2.16.2: resolution: {integrity: sha512-CkqAjnIKFqvo3sCyoBTqgJvF+bHrSik584S9nhTjtBESLx26cbtVMR/T9a6ApChOcSDAaM3JydDmWDUn4EEXng==} dev: true - /fresh@0.5.2: - resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} - engines: {node: '>= 0.6'} - dev: false - /fs-constants@1.0.0: resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} - dev: true /fs-extra@10.1.0: resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} @@ -5897,7 +6840,6 @@ packages: graceful-fs: 4.2.11 jsonfile: 6.1.0 universalify: 2.0.1 - dev: true /fs-extra@11.2.0: resolution: {integrity: sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==} @@ -5906,7 +6848,6 @@ packages: graceful-fs: 4.2.11 jsonfile: 6.1.0 universalify: 2.0.1 - dev: true /fs-extra@9.1.0: resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} @@ -5916,14 +6857,12 @@ packages: graceful-fs: 4.2.11 jsonfile: 6.1.0 universalify: 2.0.1 - dev: true /fs-minipass@2.1.0: resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} engines: {node: '>= 8'} dependencies: minipass: 3.3.6 - dev: true /fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} @@ -5939,7 +6878,6 @@ packages: ignore: 5.3.1 memoizee: 0.4.15 type: 2.7.2 - dev: true /fsevents@2.3.3: resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} @@ -5959,9 +6897,11 @@ packages: define-properties: 1.2.1 es-abstract: 1.22.3 functions-have-names: 1.2.3 + dev: false /functions-have-names@1.2.3: resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + dev: false /gaxios@6.2.0: resolution: {integrity: sha512-H6+bHeoEAU5D6XNc6mPKeN5dLZqEDs9Gpk6I+SZBEzK5So58JVrHPmevNi35fRl1J9Y5TaeLW0kYx3pCJ1U2mQ==} @@ -5987,6 +6927,11 @@ packages: - supports-color dev: false + /gensync@1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + dev: true + /get-caller-file@2.0.5: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} @@ -6007,10 +6952,14 @@ packages: has-symbols: 1.0.3 hasown: 2.0.0 + /get-package-type@0.1.0: + resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} + engines: {node: '>=8.0.0'} + dev: true + /get-stdin@8.0.0: resolution: {integrity: sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==} engines: {node: '>=10'} - dev: true /get-stream@2.3.1: resolution: {integrity: sha512-AUGhbbemXxrZJRD5cDvKtQxLuYaIbNtDTK8YqupCI393Q2KSTreEsLUN3ZxAWFGiKTzL6nKuzfcIvieflUX9qA==} @@ -6018,14 +6967,12 @@ packages: dependencies: object-assign: 4.1.1 pinkie-promise: 2.0.1 - dev: true /get-stream@5.2.0: resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} engines: {node: '>=8'} dependencies: pump: 3.0.0 - dev: true /get-stream@6.0.1: resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} @@ -6034,7 +6981,6 @@ packages: /get-stream@8.0.1: resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} engines: {node: '>=16'} - dev: true /get-symbol-description@1.0.0: resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} @@ -6042,11 +6988,13 @@ packages: dependencies: call-bind: 1.0.6 get-intrinsic: 1.2.4 + dev: false /get-tsconfig@4.7.2: resolution: {integrity: sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==} dependencies: resolve-pkg-maps: 1.0.0 + dev: false /glob-parent@5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} @@ -6084,7 +7032,6 @@ packages: /globals@11.12.0: resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} engines: {node: '>=4'} - dev: false /globals@13.24.0: resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} @@ -6097,6 +7044,7 @@ packages: engines: {node: '>= 0.4'} dependencies: define-properties: 1.2.1 + dev: false /globby@11.1.0: resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} @@ -6170,7 +7118,6 @@ packages: lowercase-keys: 2.0.0 p-cancelable: 2.1.1 responselike: 2.0.1 - dev: true /graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} @@ -6182,7 +7129,6 @@ packages: resolution: {integrity: sha512-jcLLfkpoVGmH7/InMC/1hIvOPSUh38oJtGhvrOFGzioE1DZ+0YW16RgmOJhHiuWTvGiJQ9Z1Ik43JvkRPRvE+A==} dependencies: lodash: 4.17.21 - dev: true /gtoken@7.1.0: resolution: {integrity: sha512-pCcEwRi+TKpMlxAQObHDQ56KawURgyAf6jtIY046fJ5tIv3zDe/LEIubckAO8fj6JnAxLdmWkUfNyulQ2iKdEw==} @@ -6197,6 +7143,7 @@ packages: /has-bigints@1.0.2: resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} + dev: false /has-flag@3.0.0: resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} @@ -6234,7 +7181,6 @@ packages: /hexoid@1.0.0: resolution: {integrity: sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==} engines: {node: '>=8'} - dev: true /hosted-git-info@7.0.1: resolution: {integrity: sha512-+K84LB1DYwMHoHSgaOY/Jfhw3ucPmSET5v98Ke/HdNSw4a0UktWzyW1mjhjpuxxTqOOsfWT/7iVshHmVZ4IpOA==} @@ -6243,20 +7189,12 @@ packages: lru-cache: 10.2.0 dev: true - /http-cache-semantics@4.1.1: - resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==} + /html-escaper@2.0.2: + resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} dev: true - /http-errors@2.0.0: - resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} - engines: {node: '>= 0.8'} - dependencies: - depd: 2.0.0 - inherits: 2.0.4 - setprototypeof: 1.2.0 - statuses: 2.0.1 - toidentifier: 1.0.1 - dev: false + /http-cache-semantics@4.1.1: + resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==} /http2-wrapper@1.0.3: resolution: {integrity: sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==} @@ -6264,7 +7202,6 @@ packages: dependencies: quick-lru: 5.1.1 resolve-alpn: 1.2.1 - dev: true /https-proxy-agent@5.0.1(supports-color@8.1.1): resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} @@ -6274,7 +7211,6 @@ packages: debug: 4.3.4(supports-color@8.1.1) transitivePeerDependencies: - supports-color - dev: true /https-proxy-agent@7.0.2: resolution: {integrity: sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==} @@ -6293,7 +7229,6 @@ packages: /human-signals@5.0.0: resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} engines: {node: '>=16.17.0'} - dev: true /husky@9.0.10: resolution: {integrity: sha512-TQGNknoiy6bURzIO77pPRu+XHi6zI7T93rX+QnJsoYFf3xdjKOur+IlfqzJGMHIK/wXrLg+GsvMs8Op7vI2jVA==} @@ -6313,11 +7248,9 @@ packages: /ieee754@1.1.13: resolution: {integrity: sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==} - dev: true /ieee754@1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} - dev: true /ignore@5.3.1: resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==} @@ -6325,7 +7258,6 @@ packages: /immediate@3.0.6: resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==} - dev: true /import-fresh@3.3.0: resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} @@ -6334,9 +7266,18 @@ packages: parent-module: 1.0.1 resolve-from: 4.0.0 - /imurmurhash@0.1.4: - resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} - engines: {node: '>=0.8.19'} + /import-local@3.1.0: + resolution: {integrity: sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==} + engines: {node: '>=8'} + hasBin: true + dependencies: + pkg-dir: 4.2.0 + resolve-cwd: 3.0.0 + dev: true + + /imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} /indent-string@4.0.0: resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} @@ -6371,7 +7312,6 @@ packages: strip-ansi: 6.0.1 through: 2.3.8 wrap-ansi: 6.2.0 - dev: true /internal-slot@1.0.7: resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==} @@ -6380,10 +7320,6 @@ packages: es-errors: 1.3.0 hasown: 2.0.0 side-channel: 1.0.4 - - /ipaddr.js@1.9.1: - resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} - engines: {node: '>= 0.10'} dev: false /is-arguments@1.1.1: @@ -6392,7 +7328,6 @@ packages: dependencies: call-bind: 1.0.6 has-tostringtag: 1.0.2 - dev: true /is-array-buffer@3.0.4: resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==} @@ -6400,6 +7335,7 @@ packages: dependencies: call-bind: 1.0.6 get-intrinsic: 1.2.4 + dev: false /is-arrayish@0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} @@ -6414,12 +7350,13 @@ packages: engines: {node: '>= 0.4'} dependencies: has-tostringtag: 1.0.2 - dev: true + dev: false /is-bigint@1.0.4: resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} dependencies: has-bigints: 1.0.2 + dev: false /is-binary-path@2.1.0: resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} @@ -6433,6 +7370,7 @@ packages: dependencies: call-bind: 1.0.6 has-tostringtag: 1.0.2 + dev: false /is-callable@1.2.7: resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} @@ -6448,18 +7386,18 @@ packages: engines: {node: '>= 0.4'} dependencies: has-tostringtag: 1.0.2 + dev: false /is-docker@2.2.1: resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} engines: {node: '>=8'} hasBin: true - dev: true /is-docker@3.0.0: resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} hasBin: true - dev: true + dev: false /is-electron@2.2.2: resolution: {integrity: sha512-FO/Rhvz5tuw4MCWkpMzHFKWD2LsfHzIb7i6MdPYZ/KW7AlxawyLkqdy+jPZP1WubqEADE3O4FUENlJHDfQASRg==} @@ -6473,7 +7411,7 @@ packages: resolution: {integrity: sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==} dependencies: call-bind: 1.0.6 - dev: true + dev: false /is-fullwidth-code-point@3.0.0: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} @@ -6491,12 +7429,16 @@ packages: get-east-asian-width: 1.2.0 dev: true + /is-generator-fn@2.1.0: + resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} + engines: {node: '>=6'} + dev: true + /is-generator-function@1.0.10: resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} engines: {node: '>= 0.4'} dependencies: has-tostringtag: 1.0.2 - dev: true /is-glob@4.0.3: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} @@ -6510,35 +7452,35 @@ packages: hasBin: true dependencies: is-docker: 3.0.0 - dev: true + dev: false /is-interactive@1.0.0: resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} engines: {node: '>=8'} - dev: true /is-map@2.0.2: resolution: {integrity: sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==} - dev: true + dev: false /is-natural-number@4.0.1: resolution: {integrity: sha512-Y4LTamMe0DDQIIAlaer9eKebAlDSV6huy+TWhJVPlzZh2o4tRP5SQWFlLn5N0To4mDD22/qdOq+veo1cSISLgQ==} - dev: true /is-negative-zero@2.0.2: resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} engines: {node: '>= 0.4'} + dev: false /is-network-error@1.0.1: resolution: {integrity: sha512-OwQXkwBJeESyhFw+OumbJVD58BFBJJI5OM5S1+eyrDKlgDZPX2XNT5gXS56GSD3NPbbwUuMlR1Q71SRp5SobuQ==} engines: {node: '>=16'} - dev: true + dev: false /is-number-object@1.0.7: resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} engines: {node: '>= 0.4'} dependencies: has-tostringtag: 1.0.2 + dev: false /is-number@7.0.0: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} @@ -6551,11 +7493,9 @@ packages: /is-plain-obj@1.1.0: resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==} engines: {node: '>=0.10.0'} - dev: true /is-promise@2.2.2: resolution: {integrity: sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==} - dev: true /is-regex@1.1.4: resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} @@ -6563,20 +7503,21 @@ packages: dependencies: call-bind: 1.0.6 has-tostringtag: 1.0.2 + dev: false /is-set@2.0.2: resolution: {integrity: sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==} - dev: true + dev: false /is-shared-array-buffer@1.0.2: resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} dependencies: call-bind: 1.0.6 + dev: false /is-stream@1.1.0: resolution: {integrity: sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==} engines: {node: '>=0.10.0'} - dev: true /is-stream@2.0.1: resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} @@ -6585,19 +7526,20 @@ packages: /is-stream@3.0.0: resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dev: true /is-string@1.0.7: resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} engines: {node: '>= 0.4'} dependencies: has-tostringtag: 1.0.2 + dev: false /is-symbol@1.0.4: resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} engines: {node: '>= 0.4'} dependencies: has-symbols: 1.0.3 + dev: false /is-typed-array@1.1.13: resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} @@ -6608,7 +7550,6 @@ packages: /is-unicode-supported@0.1.0: resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} engines: {node: '>=10'} - dev: true /is-url@1.2.4: resolution: {integrity: sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==} @@ -6616,87 +7557,550 @@ packages: /is-weakmap@2.0.1: resolution: {integrity: sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==} - dev: true + dev: false /is-weakref@1.0.2: resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} dependencies: call-bind: 1.0.6 + dev: false /is-weakset@2.0.2: resolution: {integrity: sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==} dependencies: call-bind: 1.0.6 get-intrinsic: 1.2.4 + dev: false + + /is-wsl@2.2.0: + resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} + engines: {node: '>=8'} + dependencies: + is-docker: 2.2.1 + + /is-wsl@3.1.0: + resolution: {integrity: sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==} + engines: {node: '>=16'} + dependencies: + is-inside-container: 1.0.0 + dev: false + + /isarray@1.0.0: + resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} + + /isarray@2.0.5: + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + dev: false + + /isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + /isomorphic-ws@4.0.1(ws@7.5.9): + resolution: {integrity: sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==} + peerDependencies: + ws: '*' + dependencies: + ws: 7.5.9 + + /istanbul-lib-coverage@3.2.2: + resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} + engines: {node: '>=8'} + dev: true + + /istanbul-lib-instrument@5.2.1: + resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} + engines: {node: '>=8'} + dependencies: + '@babel/core': 7.23.9 + '@babel/parser': 7.23.9 + '@istanbuljs/schema': 0.1.3 + istanbul-lib-coverage: 3.2.2 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + dev: true + + /istanbul-lib-instrument@6.0.2: + resolution: {integrity: sha512-1WUsZ9R1lA0HtBSohTkm39WTPlNKSJ5iFk7UwqXkBLoHQT+hfqPsfsTDVuZdKGaBwn7din9bS7SsnoAr943hvw==} + engines: {node: '>=10'} + dependencies: + '@babel/core': 7.23.9 + '@babel/parser': 7.23.9 + '@istanbuljs/schema': 0.1.3 + istanbul-lib-coverage: 3.2.2 + semver: 7.5.4 + transitivePeerDependencies: + - supports-color + dev: true + + /istanbul-lib-report@3.0.1: + resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} + engines: {node: '>=10'} + dependencies: + istanbul-lib-coverage: 3.2.2 + make-dir: 4.0.0 + supports-color: 7.2.0 + dev: true + + /istanbul-lib-source-maps@4.0.1: + resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} + engines: {node: '>=10'} + dependencies: + debug: 4.3.4(supports-color@8.1.1) + istanbul-lib-coverage: 3.2.2 + source-map: 0.6.1 + transitivePeerDependencies: + - supports-color + dev: true + + /istanbul-reports@3.1.7: + resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==} + engines: {node: '>=8'} + dependencies: + html-escaper: 2.0.2 + istanbul-lib-report: 3.0.1 + dev: true + + /iterator.prototype@1.1.2: + resolution: {integrity: sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==} + dependencies: + define-properties: 1.2.1 + get-intrinsic: 1.2.4 + has-symbols: 1.0.3 + reflect.getprototypeof: 1.0.5 + set-function-name: 2.0.1 + dev: false + + /jackspeak@2.3.6: + resolution: {integrity: sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==} + engines: {node: '>=14'} + dependencies: + '@isaacs/cliui': 8.0.2 + optionalDependencies: + '@pkgjs/parseargs': 0.11.0 + + /java-invoke-local@0.0.6: + resolution: {integrity: sha512-gZmQKe1QrfkkMjCn8Qv9cpyJFyogTYqkP5WCobX5RNaHsJzIV/6NvAnlnouOcwKr29QrxLGDGcqYuJ+ae98s1A==} + hasBin: true + dev: false + + /javascript-natural-sort@0.7.1: + resolution: {integrity: sha512-nO6jcEfZWQXDhOiBtG2KvKyEptz7RVbpGP4vTD2hLBdmNQSsCiicO2Ioinv6UI4y9ukqnBpy+XZ9H6uLNgJTlw==} + dev: false + + /jest-changed-files@29.7.0: + resolution: {integrity: sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + execa: 5.1.1 + jest-util: 29.7.0 + p-limit: 3.1.0 + dev: true + + /jest-circus@29.7.0: + resolution: {integrity: sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/environment': 29.7.0 + '@jest/expect': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 20.11.16 + chalk: 4.1.2 + co: 4.6.0 + dedent: 1.5.1 + is-generator-fn: 2.1.0 + jest-each: 29.7.0 + jest-matcher-utils: 29.7.0 + jest-message-util: 29.7.0 + jest-runtime: 29.7.0 + jest-snapshot: 29.7.0 + jest-util: 29.7.0 + p-limit: 3.1.0 + pretty-format: 29.7.0 + pure-rand: 6.0.4 + slash: 3.0.0 + stack-utils: 2.0.6 + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + dev: true + + /jest-cli@29.7.0: + resolution: {integrity: sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + dependencies: + '@jest/core': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/types': 29.6.3 + chalk: 4.1.2 + create-jest: 29.7.0 + exit: 0.1.2 + import-local: 3.1.0 + jest-config: 29.7.0(@types/node@20.11.16) + jest-util: 29.7.0 + jest-validate: 29.7.0 + yargs: 17.7.2 + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node + dev: true + + /jest-config@29.7.0(@types/node@20.11.16): + resolution: {integrity: sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@types/node': '*' + ts-node: '>=9.0.0' + peerDependenciesMeta: + '@types/node': + optional: true + ts-node: + optional: true + dependencies: + '@babel/core': 7.23.9 + '@jest/test-sequencer': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 20.11.16 + babel-jest: 29.7.0(@babel/core@7.23.9) + chalk: 4.1.2 + ci-info: 3.9.0 + deepmerge: 4.3.1 + glob: 7.2.3 + graceful-fs: 4.2.11 + jest-circus: 29.7.0 + jest-environment-node: 29.7.0 + jest-get-type: 29.6.3 + jest-regex-util: 29.6.3 + jest-resolve: 29.7.0 + jest-runner: 29.7.0 + jest-util: 29.7.0 + jest-validate: 29.7.0 + micromatch: 4.0.5 + parse-json: 5.2.0 + pretty-format: 29.7.0 + slash: 3.0.0 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + dev: true + + /jest-diff@29.7.0: + resolution: {integrity: sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + chalk: 4.1.2 + diff-sequences: 29.6.3 + jest-get-type: 29.6.3 + pretty-format: 29.7.0 + dev: true + + /jest-docblock@29.7.0: + resolution: {integrity: sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + detect-newline: 3.1.0 + dev: true + + /jest-each@29.7.0: + resolution: {integrity: sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/types': 29.6.3 + chalk: 4.1.2 + jest-get-type: 29.6.3 + jest-util: 29.7.0 + pretty-format: 29.7.0 + dev: true + + /jest-environment-node@29.7.0: + resolution: {integrity: sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/environment': 29.7.0 + '@jest/fake-timers': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 20.11.16 + jest-mock: 29.7.0 + jest-util: 29.7.0 + dev: true + + /jest-get-type@29.6.3: + resolution: {integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dev: true + + /jest-haste-map@29.7.0: + resolution: {integrity: sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/types': 29.6.3 + '@types/graceful-fs': 4.1.9 + '@types/node': 20.11.16 + anymatch: 3.1.3 + fb-watchman: 2.0.2 + graceful-fs: 4.2.11 + jest-regex-util: 29.6.3 + jest-util: 29.7.0 + jest-worker: 29.7.0 + micromatch: 4.0.5 + walker: 1.0.8 + optionalDependencies: + fsevents: 2.3.3 + dev: true + + /jest-leak-detector@29.7.0: + resolution: {integrity: sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + jest-get-type: 29.6.3 + pretty-format: 29.7.0 + dev: true + + /jest-matcher-utils@29.7.0: + resolution: {integrity: sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + chalk: 4.1.2 + jest-diff: 29.7.0 + jest-get-type: 29.6.3 + pretty-format: 29.7.0 + dev: true + + /jest-message-util@29.7.0: + resolution: {integrity: sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@babel/code-frame': 7.23.5 + '@jest/types': 29.6.3 + '@types/stack-utils': 2.0.3 + chalk: 4.1.2 + graceful-fs: 4.2.11 + micromatch: 4.0.5 + pretty-format: 29.7.0 + slash: 3.0.0 + stack-utils: 2.0.6 + dev: true + + /jest-mock@29.7.0: + resolution: {integrity: sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/types': 29.6.3 + '@types/node': 20.11.16 + jest-util: 29.7.0 + dev: true + + /jest-pnp-resolver@1.2.3(jest-resolve@29.7.0): + resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==} + engines: {node: '>=6'} + peerDependencies: + jest-resolve: '*' + peerDependenciesMeta: + jest-resolve: + optional: true + dependencies: + jest-resolve: 29.7.0 + dev: true + + /jest-regex-util@29.6.3: + resolution: {integrity: sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dev: true + + /jest-resolve-dependencies@29.7.0: + resolution: {integrity: sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + jest-regex-util: 29.6.3 + jest-snapshot: 29.7.0 + transitivePeerDependencies: + - supports-color + dev: true + + /jest-resolve@29.7.0: + resolution: {integrity: sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + chalk: 4.1.2 + graceful-fs: 4.2.11 + jest-haste-map: 29.7.0 + jest-pnp-resolver: 1.2.3(jest-resolve@29.7.0) + jest-util: 29.7.0 + jest-validate: 29.7.0 + resolve: 1.22.8 + resolve.exports: 2.0.2 + slash: 3.0.0 + dev: true + + /jest-runner@29.7.0: + resolution: {integrity: sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/console': 29.7.0 + '@jest/environment': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 20.11.16 + chalk: 4.1.2 + emittery: 0.13.1 + graceful-fs: 4.2.11 + jest-docblock: 29.7.0 + jest-environment-node: 29.7.0 + jest-haste-map: 29.7.0 + jest-leak-detector: 29.7.0 + jest-message-util: 29.7.0 + jest-resolve: 29.7.0 + jest-runtime: 29.7.0 + jest-util: 29.7.0 + jest-watcher: 29.7.0 + jest-worker: 29.7.0 + p-limit: 3.1.0 + source-map-support: 0.5.13 + transitivePeerDependencies: + - supports-color + dev: true + + /jest-runtime@29.7.0: + resolution: {integrity: sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/environment': 29.7.0 + '@jest/fake-timers': 29.7.0 + '@jest/globals': 29.7.0 + '@jest/source-map': 29.6.3 + '@jest/test-result': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 20.11.16 + chalk: 4.1.2 + cjs-module-lexer: 1.2.3 + collect-v8-coverage: 1.0.2 + glob: 7.2.3 + graceful-fs: 4.2.11 + jest-haste-map: 29.7.0 + jest-message-util: 29.7.0 + jest-mock: 29.7.0 + jest-regex-util: 29.6.3 + jest-resolve: 29.7.0 + jest-snapshot: 29.7.0 + jest-util: 29.7.0 + slash: 3.0.0 + strip-bom: 4.0.0 + transitivePeerDependencies: + - supports-color + dev: true + + /jest-snapshot@29.7.0: + resolution: {integrity: sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@babel/core': 7.23.9 + '@babel/generator': 7.23.6 + '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.23.9) + '@babel/plugin-syntax-typescript': 7.23.3(@babel/core@7.23.9) + '@babel/types': 7.23.9 + '@jest/expect-utils': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + babel-preset-current-node-syntax: 1.0.1(@babel/core@7.23.9) + chalk: 4.1.2 + expect: 29.7.0 + graceful-fs: 4.2.11 + jest-diff: 29.7.0 + jest-get-type: 29.6.3 + jest-matcher-utils: 29.7.0 + jest-message-util: 29.7.0 + jest-util: 29.7.0 + natural-compare: 1.4.0 + pretty-format: 29.7.0 + semver: 7.5.4 + transitivePeerDependencies: + - supports-color dev: true - /is-wsl@2.2.0: - resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} - engines: {node: '>=8'} + /jest-util@29.7.0: + resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - is-docker: 2.2.1 + '@jest/types': 29.6.3 + '@types/node': 20.11.16 + chalk: 4.1.2 + ci-info: 3.9.0 + graceful-fs: 4.2.11 + picomatch: 2.3.1 dev: true - /is-wsl@3.1.0: - resolution: {integrity: sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==} - engines: {node: '>=16'} + /jest-validate@29.7.0: + resolution: {integrity: sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - is-inside-container: 1.0.0 - dev: true - - /isarray@1.0.0: - resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} + '@jest/types': 29.6.3 + camelcase: 6.3.0 + chalk: 4.1.2 + jest-get-type: 29.6.3 + leven: 3.1.0 + pretty-format: 29.7.0 dev: true - /isarray@2.0.5: - resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} - - /isexe@2.0.0: - resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - - /isomorphic-ws@4.0.1(ws@7.5.9): - resolution: {integrity: sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==} - peerDependencies: - ws: '*' + /jest-watcher@29.7.0: + resolution: {integrity: sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - ws: 7.5.9 + '@jest/test-result': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 20.11.16 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + emittery: 0.13.1 + jest-util: 29.7.0 + string-length: 4.0.2 dev: true - /iterator.prototype@1.1.2: - resolution: {integrity: sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==} + /jest-worker@29.7.0: + resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - define-properties: 1.2.1 - get-intrinsic: 1.2.4 - has-symbols: 1.0.3 - reflect.getprototypeof: 1.0.5 - set-function-name: 2.0.1 + '@types/node': 20.11.16 + jest-util: 29.7.0 + merge-stream: 2.0.0 + supports-color: 8.1.1 dev: true - /jackspeak@2.3.6: - resolution: {integrity: sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==} - engines: {node: '>=14'} - dependencies: - '@isaacs/cliui': 8.0.2 - optionalDependencies: - '@pkgjs/parseargs': 0.11.0 - - /java-invoke-local@0.0.6: - resolution: {integrity: sha512-gZmQKe1QrfkkMjCn8Qv9cpyJFyogTYqkP5WCobX5RNaHsJzIV/6NvAnlnouOcwKr29QrxLGDGcqYuJ+ae98s1A==} + /jest@29.7.0: + resolution: {integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + dependencies: + '@jest/core': 29.7.0 + '@jest/types': 29.6.3 + import-local: 3.1.0 + jest-cli: 29.7.0 + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node dev: true - /javascript-natural-sort@0.7.1: - resolution: {integrity: sha512-nO6jcEfZWQXDhOiBtG2KvKyEptz7RVbpGP4vTD2hLBdmNQSsCiicO2Ioinv6UI4y9ukqnBpy+XZ9H6uLNgJTlw==} - dev: false - /jmespath@0.16.0: resolution: {integrity: sha512-9FzQjJ7MATs1tSpnco1K6ayiYE3figslrXA72G2HQ/n76RzvYlofyi5QM+iX4YRs/pu3yzxlVQSST23+dMDknw==} engines: {node: '>= 0.6.0'} - dev: true - - /jose@5.2.1: - resolution: {integrity: sha512-qiaQhtQRw6YrOaOj0v59h3R6hUY9NvxBmmnMfKemkqYmBB0tEc97NbLP7ix44VP5p9/0YHG8Vyhzuo5YBNwviA==} - dev: true /jose@5.2.2: resolution: {integrity: sha512-/WByRr4jDcsKlvMd1dRJnPfS1GVO3WuKyaurJ/vvXcOaUQO8rnNObCQMlv/5uCceVQIq5Q4WLF44ohsdiTohdg==} @@ -6709,7 +8113,7 @@ packages: /js-string-escape@1.0.1: resolution: {integrity: sha512-Smw4xcfIQ5LVjAOuJCvN/zIodzA/BBSsluuoSykP+lUvScIi4U6RJLfwHet5cxFnCswUjISV8oAXaqaJDY3chg==} engines: {node: '>= 0.8'} - dev: true + dev: false /js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} @@ -6720,7 +8124,6 @@ packages: dependencies: argparse: 1.0.10 esprima: 4.0.1 - dev: true /js-yaml@4.1.0: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} @@ -6732,7 +8135,6 @@ packages: resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} engines: {node: '>=4'} hasBin: true - dev: false /json-bigint@1.0.0: resolution: {integrity: sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==} @@ -6748,12 +8150,10 @@ packages: dependencies: chalk: 2.4.2 lodash.get: 4.4.2 - dev: true /json-cycle@1.5.0: resolution: {integrity: sha512-GOehvd5PO2FeZ5T4c+RxobeT5a1PiGpF4u9/3+UvrMU4bhnVqzJY7hm39wg8PDCqkU91fWGH8qjWR4bn+wgq9w==} engines: {node: '>= 4'} - dev: true /json-parse-even-better-errors@2.3.1: resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} @@ -6774,14 +8174,12 @@ packages: uri-js: 4.4.1 transitivePeerDependencies: - supports-color - dev: true /json-schema-traverse@0.4.1: resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} /json-schema-traverse@1.0.0: resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} - dev: true /json-stable-stringify-without-jsonify@1.0.1: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} @@ -6797,6 +8195,13 @@ packages: hasBin: true dependencies: minimist: 1.2.8 + dev: false + + /json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + dev: true /jsonfile@6.1.0: resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} @@ -6804,16 +8209,15 @@ packages: universalify: 2.0.1 optionalDependencies: graceful-fs: 4.2.11 - dev: true /jsonpath-plus@8.0.0: resolution: {integrity: sha512-+AOBHcQvRr8DcWVIkfOCCCLSlYgQuNZ+gFNqwkBrNpdUfdfkcrbO4ml3F587fWUMFOmoy6D9c+5wrghgjN3mbg==} engines: {node: '>=14.0.0'} - dev: true + dev: false /jsonschema@1.4.1: resolution: {integrity: sha512-S6cATIPVv1z0IlxdN+zUk5EPjkGCdnhN4wVSBlvoUO1tOLJootbo9CquNJmbIh4yikWHiUedhRYrNPn1arpEmQ==} - dev: true + dev: false /jsx-ast-utils@3.3.5: resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} @@ -6823,7 +8227,7 @@ packages: array.prototype.flat: 1.3.2 object.assign: 4.1.5 object.values: 1.1.7 - dev: true + dev: false /jszip@3.10.1: resolution: {integrity: sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==} @@ -6832,7 +8236,6 @@ packages: pako: 1.0.11 readable-stream: 2.3.8 setimmediate: 1.0.5 - dev: true /jwa@2.0.0: resolution: {integrity: sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==} @@ -6851,11 +8254,9 @@ packages: /jwt-decode@2.2.0: resolution: {integrity: sha512-86GgN2vzfUu7m9Wcj63iUkuDzFNYFVmjeDm2GzWpUk+opB0pEpMsw6ePCMrhYkumz2C1ihqtZzOMAg7FiXcNoQ==} - dev: true /jwt-decode@3.1.2: resolution: {integrity: sha512-UfpWE/VZn0iP50d8cz9NrZLM9lSWhcJ+0Gt/nm4by88UL+J1SiKN8/5dkjMmbEzwL2CAe+67GsegCbIKtbp75A==} - dev: true /kareem@2.5.1: resolution: {integrity: sha512-7jFxRVm+jD+rkq3kY0iZDJfsO2/t4BBPeEb2qKn2lR/9KhuksYk5hxzfRYWMPV8P/x2d0kHD306YyWLzjjH+uA==} @@ -6874,20 +8275,24 @@ packages: /language-subtag-registry@0.3.22: resolution: {integrity: sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==} - dev: true + dev: false /language-tags@1.0.9: resolution: {integrity: sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==} engines: {node: '>=0.10'} dependencies: language-subtag-registry: 0.3.22 - dev: true + dev: false /lazystream@1.0.1: resolution: {integrity: sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==} engines: {node: '>= 0.6.3'} dependencies: readable-stream: 2.3.8 + + /leven@3.1.0: + resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} + engines: {node: '>=6'} dev: true /levn@0.4.1: @@ -6901,7 +8306,6 @@ packages: resolution: {integrity: sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==} dependencies: immediate: 3.0.6 - dev: true /lilconfig@3.0.0: resolution: {integrity: sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g==} @@ -6945,6 +8349,13 @@ packages: resolution: {integrity: sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + /locate-path@5.0.0: + resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} + engines: {node: '>=8'} + dependencies: + p-locate: 4.1.0 + dev: true + /locate-path@6.0.0: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} engines: {node: '>=10'} @@ -6953,22 +8364,21 @@ packages: /lodash.defaults@4.2.0: resolution: {integrity: sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==} - dev: true /lodash.difference@4.5.0: resolution: {integrity: sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA==} - dev: true /lodash.flatten@4.4.0: resolution: {integrity: sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==} - dev: true /lodash.get@4.4.2: resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==} - dev: true /lodash.isplainobject@4.0.6: resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} + + /lodash.memoize@4.1.2: + resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} dev: true /lodash.merge@4.6.2: @@ -6983,7 +8393,6 @@ packages: /lodash.union@4.6.0: resolution: {integrity: sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw==} - dev: true /lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} @@ -7003,7 +8412,6 @@ packages: sprintf-kit: 2.0.1 supports-color: 8.1.1 type: 2.7.2 - dev: true /log-symbols@4.1.0: resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} @@ -7011,7 +8419,6 @@ packages: dependencies: chalk: 4.1.2 is-unicode-supported: 0.1.0 - dev: true /log-update@6.0.0: resolution: {integrity: sha512-niTvB4gqvtof056rRIrTZvjNYE4rCUzO6X/X+kYjd7WFxXeJ0NwEFnRxX6ehkvv3jTwrXnNdtAak5XYZuIyPFw==} @@ -7034,27 +8441,32 @@ packages: sprintf-kit: 2.0.1 type: 2.7.2 uni-global: 1.0.0 - dev: true /long-timeout@0.1.1: resolution: {integrity: sha512-BFRuQUqc7x2NWxfJBCyUrN8iYUYznzL9JROmRz1gZ6KlOIgmoD+njPVbb+VNn2nGMKggMsK79iUNErillsrx7w==} - dev: true + dev: false /loose-envify@1.4.0: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} hasBin: true dependencies: js-tokens: 4.0.0 + dev: false /lowercase-keys@2.0.0: resolution: {integrity: sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==} engines: {node: '>=8'} - dev: true /lru-cache@10.2.0: resolution: {integrity: sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==} engines: {node: 14 || >=16.14} + /lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + dependencies: + yallist: 3.1.1 + dev: true + /lru-cache@6.0.0: resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} engines: {node: '>=10'} @@ -7065,12 +8477,11 @@ packages: resolution: {integrity: sha512-BpdYkt9EvGl8OfWHDQPISVpcl5xZthb+XPsbELj5AQXxIC8IriDZIQYjBJPEm5rS420sjZ0TLEzRcq5KdBhYrQ==} dependencies: es5-ext: 0.10.62 - dev: true /luxon@3.4.4: resolution: {integrity: sha512-zobTr7akeGHnv7eBOXcRgMeCP6+uyYsczwmeRCauvpvaAltgNyTbLH/+VaEAPUeWBT+1GuNmz4wC/6jtQzbbVA==} engines: {node: '>=12'} - dev: true + dev: false /magic-bytes.js@1.8.0: resolution: {integrity: sha512-lyWpfvNGVb5lu8YUAbER0+UMBTdR63w2mcSUlhhBTyVbxJvjgqwyAf3AZD6MprgK0uHuBoWXSDAMWLupX83o3Q==} @@ -7081,19 +8492,22 @@ packages: engines: {node: '>=4'} dependencies: pify: 3.0.0 - dev: true /make-dir@4.0.0: resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} engines: {node: '>=10'} dependencies: semver: 7.5.4 + + /make-error@1.3.6: + resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} dev: true - /media-typer@0.3.0: - resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} - engines: {node: '>= 0.6'} - dev: false + /makeerror@1.0.12: + resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} + dependencies: + tmpl: 1.0.5 + dev: true /memoizee@0.4.15: resolution: {integrity: sha512-UBWmJpLZd5STPm7PMUlOw/TSy972M+z8gcyQ5veOnSDRREz/0bmpyTfKt3/51DhEBqCZQn1udM/5flcSPYhkdQ==} @@ -7106,16 +8520,11 @@ packages: lru-queue: 0.1.0 next-tick: 1.1.0 timers-ext: 0.1.7 - dev: true /memory-pager@1.5.0: resolution: {integrity: sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==} dev: false - /merge-descriptors@1.0.1: - resolution: {integrity: sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==} - dev: false - /merge-stream@2.0.0: resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} @@ -7144,17 +8553,10 @@ packages: dependencies: mime-db: 1.52.0 - /mime@1.6.0: - resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} - engines: {node: '>=4'} - hasBin: true - dev: false - /mime@2.6.0: resolution: {integrity: sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==} engines: {node: '>=4.0.0'} hasBin: true - dev: true /mimic-fn@2.1.0: resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} @@ -7163,17 +8565,14 @@ packages: /mimic-fn@4.0.0: resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} engines: {node: '>=12'} - dev: true /mimic-response@1.0.1: resolution: {integrity: sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==} engines: {node: '>=4'} - dev: true /mimic-response@3.1.0: resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} engines: {node: '>=10'} - dev: true /minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} @@ -7185,7 +8584,6 @@ packages: engines: {node: '>=10'} dependencies: brace-expansion: 2.0.1 - dev: true /minimatch@9.0.3: resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} @@ -7195,18 +8593,17 @@ packages: /minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + dev: false /minipass@3.3.6: resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} engines: {node: '>=8'} dependencies: yallist: 4.0.0 - dev: true /minipass@5.0.0: resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} engines: {node: '>=8'} - dev: true /minipass@7.0.4: resolution: {integrity: sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==} @@ -7218,13 +8615,11 @@ packages: dependencies: minipass: 3.3.6 yallist: 4.0.0 - dev: true /mkdirp@1.0.4: resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} engines: {node: '>=10'} hasBin: true - dev: true /mongodb-connection-string-url@3.0.0: resolution: {integrity: sha512-t1Vf+m1I5hC2M5RJx/7AtxgABy1cZmIPQRMXw+gEIPn/cZNF3Oiy+l0UIypUwVB5trcWHq3crg2g3uAR9aAwsQ==} @@ -7301,10 +8696,6 @@ packages: - supports-color dev: false - /ms@2.0.0: - resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} - dev: false - /ms@2.1.2: resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} @@ -7313,7 +8704,6 @@ packages: /mute-stream@0.0.8: resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==} - dev: true /mz@2.7.0: resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} @@ -7330,7 +8720,6 @@ packages: /native-promise-only@0.8.1: resolution: {integrity: sha512-zkVhZUA3y8mbz652WrL5x0fB0ehrBkulWT3TomAQ9iDtyXZvzKeEA6GPxAItBYeNYl5yngKRX612qHOhvMkDeg==} - dev: true /natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} @@ -7346,12 +8735,6 @@ packages: find-requires: 1.0.0 fs2: 0.3.9 type: 2.7.2 - dev: true - - /negotiator@0.6.3: - resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} - engines: {node: '>= 0.6'} - dev: false /next-auth@5.0.0-beta.5(next@14.1.0)(react@18.2.0): resolution: {integrity: sha512-tEYIPhm/i0byW4xf9Ldlsnh7ckBQfNvMjOA3B3eXQX9taAQWb8earravSn1fjk4fKfKvaOApFJkks0VeI7Vy/A==} @@ -7414,7 +8797,6 @@ packages: /next-tick@1.1.0: resolution: {integrity: sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==} - dev: true /next@14.1.0(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-wlzrsbfeSU48YQBjZhDzOwhWhGsy+uQycR8bHAOt1LY1bn3zZEcDyHQOEoN3aWzQ8LHCAJ1nqrWCc9XF2+O45Q==} @@ -7457,14 +8839,12 @@ packages: /nice-try@1.0.5: resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==} - dev: true /node-dir@0.1.17: resolution: {integrity: sha512-tmPX422rYgofd4epzrNoOXiE8XFZYOcCq1vD7MAXCDO+O+zndlA2ztdKKMa+EeuBG5tHETpr4ml4RGgpqDCCAg==} engines: {node: '>= 0.10.5'} dependencies: minimatch: 3.1.2 - dev: true /node-fetch@2.7.0: resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} @@ -7477,6 +8857,14 @@ packages: dependencies: whatwg-url: 5.0.0 + /node-int64@0.4.0: + resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} + dev: true + + /node-releases@2.0.14: + resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} + dev: true + /node-schedule@2.1.1: resolution: {integrity: sha512-OXdegQq03OmXEjt2hZP33W2YPs/E5BcFQks46+G2gAxs4gHOIVD1u7EqlYLYSKsaIpyKCK9Gbk0ta1/gjRSMRQ==} engines: {node: '>=6'} @@ -7484,7 +8872,7 @@ packages: cron-parser: 4.9.0 long-timeout: 0.1.1 sorted-array-functions: 1.3.0 - dev: true + dev: false /normalize-path@3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} @@ -7493,7 +8881,6 @@ packages: /normalize-url@6.1.0: resolution: {integrity: sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==} engines: {node: '>=10'} - dev: true /npm-package-arg@11.0.1: resolution: {integrity: sha512-M7s1BD4NxdAvBKUPqqRW957Xwcl/4Zvo8Aj+ANrzvIPzGJZElrH7Z//rSaec2ORcND6FHHLnZeY8qgTpXDMFQQ==} @@ -7518,7 +8905,6 @@ packages: validate-npm-package-name: 3.0.0 transitivePeerDependencies: - encoding - dev: true /npm-run-path@4.0.1: resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} @@ -7531,7 +8917,6 @@ packages: engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dependencies: path-key: 4.0.0 - dev: true /oauth4webapi@2.10.3: resolution: {integrity: sha512-9FkXEXfzVKzH63GUOZz1zMr3wBaICSzk6DLXx+CGdrQ10ItNk2ePWzYYc1fdmKq1ayGFb2aX97sRCoZ2s0mkDw==} @@ -7544,7 +8929,6 @@ packages: /object-hash@3.0.0: resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} engines: {node: '>= 6'} - dev: true /object-inspect@1.13.1: resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} @@ -7552,6 +8936,7 @@ packages: /object-keys@1.1.1: resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} engines: {node: '>= 0.4'} + dev: false /object.assign@4.1.5: resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} @@ -7561,6 +8946,7 @@ packages: define-properties: 1.2.1 has-symbols: 1.0.3 object-keys: 1.1.1 + dev: false /object.entries@1.1.7: resolution: {integrity: sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==} @@ -7569,7 +8955,7 @@ packages: call-bind: 1.0.6 define-properties: 1.2.1 es-abstract: 1.22.3 - dev: true + dev: false /object.fromentries@2.0.7: resolution: {integrity: sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==} @@ -7578,6 +8964,7 @@ packages: call-bind: 1.0.6 define-properties: 1.2.1 es-abstract: 1.22.3 + dev: false /object.groupby@1.0.1: resolution: {integrity: sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==} @@ -7586,13 +8973,14 @@ packages: define-properties: 1.2.1 es-abstract: 1.22.3 get-intrinsic: 1.2.4 + dev: false /object.hasown@1.1.3: resolution: {integrity: sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA==} dependencies: define-properties: 1.2.1 es-abstract: 1.22.3 - dev: true + dev: false /object.values@1.1.7: resolution: {integrity: sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==} @@ -7601,12 +8989,11 @@ packages: call-bind: 1.0.6 define-properties: 1.2.1 es-abstract: 1.22.3 + dev: false - /on-finished@2.4.1: - resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} - engines: {node: '>= 0.8'} - dependencies: - ee-first: 1.1.1 + /on-exit-leak-free@2.1.2: + resolution: {integrity: sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==} + engines: {node: '>=14.0.0'} dev: false /once@1.4.0: @@ -7625,7 +9012,6 @@ packages: engines: {node: '>=12'} dependencies: mimic-fn: 4.0.0 - dev: true /open@7.4.2: resolution: {integrity: sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==} @@ -7633,7 +9019,6 @@ packages: dependencies: is-docker: 2.2.1 is-wsl: 2.2.0 - dev: true /open@8.4.2: resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} @@ -7642,7 +9027,6 @@ packages: define-lazy-prop: 2.0.0 is-docker: 2.2.1 is-wsl: 2.2.0 - dev: true /opencollective-postinstall@2.0.3: resolution: {integrity: sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q==} @@ -7673,28 +9057,30 @@ packages: log-symbols: 4.1.0 strip-ansi: 6.0.1 wcwidth: 1.0.1 - dev: true /os-tmpdir@1.0.2: resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} engines: {node: '>=0.10.0'} - dev: true /p-cancelable@2.1.1: resolution: {integrity: sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==} engines: {node: '>=8'} - dev: true /p-event@4.2.0: resolution: {integrity: sha512-KXatOjCRXXkSePPb1Nbi0p0m+gQAwdlbhi4wQKJPI1HsMQS9g+Sqp2o+QHziPr7eYJyOZet836KoHEVM1mwOrQ==} engines: {node: '>=8'} dependencies: p-timeout: 3.2.0 - dev: true /p-finally@1.0.0: resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==} engines: {node: '>=4'} + + /p-limit@2.3.0: + resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} + engines: {node: '>=6'} + dependencies: + p-try: 2.2.0 dev: true /p-limit@3.1.0: @@ -7703,6 +9089,13 @@ packages: dependencies: yocto-queue: 0.1.0 + /p-locate@4.1.0: + resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} + engines: {node: '>=8'} + dependencies: + p-limit: 2.3.0 + dev: true + /p-locate@5.0.0: resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} engines: {node: '>=10'} @@ -7722,7 +9115,7 @@ packages: dependencies: mimic-fn: 4.0.0 type-fest: 3.13.1 - dev: true + dev: false /p-queue@8.0.1: resolution: {integrity: sha512-NXzu9aQJTAzbBqOt2hwsR63ea7yvxJc0PwN/zobNAudYfb1B7R08SzB4TsLeSbUCuG467NhnoT0oO6w1qRO+BA==} @@ -7739,23 +9132,26 @@ packages: '@types/retry': 0.12.2 is-network-error: 1.0.1 retry: 0.13.1 - dev: true + dev: false /p-timeout@3.2.0: resolution: {integrity: sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==} engines: {node: '>=8'} dependencies: p-finally: 1.0.0 - dev: true /p-timeout@6.1.2: resolution: {integrity: sha512-UbD77BuZ9Bc9aABo74gfXhNvzC9Tx7SxtHSh1fxvx3jTLLYvmVhiQZZrJzqqU0jKbN32kb5VOKiLEQI/3bIjgQ==} engines: {node: '>=14.16'} dev: false + /p-try@2.2.0: + resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} + engines: {node: '>=6'} + dev: true + /pako@1.0.11: resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==} - dev: true /parent-module@1.0.1: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} @@ -7773,11 +9169,6 @@ packages: lines-and-columns: 1.2.4 dev: true - /parseurl@1.3.3: - resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} - engines: {node: '>= 0.8'} - dev: false - /path-exists@4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} @@ -7789,7 +9180,6 @@ packages: /path-key@2.0.1: resolution: {integrity: sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==} engines: {node: '>=4'} - dev: true /path-key@3.1.1: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} @@ -7798,7 +9188,6 @@ packages: /path-key@4.0.0: resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} engines: {node: '>=12'} - dev: true /path-loader@1.0.12(supports-color@8.1.1): resolution: {integrity: sha512-n7oDG8B+k/p818uweWrOixY9/Dsr89o2TkCm6tOTex3fpdo2+BFDgR+KpB37mGKBRsBAlR8CIJMFN0OEy/7hIQ==} @@ -7807,7 +9196,6 @@ packages: superagent: 7.1.6(supports-color@8.1.1) transitivePeerDependencies: - supports-color - dev: true /path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} @@ -7819,30 +9207,22 @@ packages: lru-cache: 10.2.0 minipass: 7.0.4 - /path-to-regexp@0.1.7: - resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==} - dev: false - /path-type@4.0.0: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} /path2@0.1.0: resolution: {integrity: sha512-TX+cz8Jk+ta7IvRy2FAej8rdlbrP0+uBIkP/5DTODez/AuL/vSb30KuAdDxGVREXzn8QfAiu5mJYJ1XjbOhEPA==} - dev: true /peek-readable@4.1.0: resolution: {integrity: sha512-ZI3LnwUv5nOGbQzD9c2iDG6toheuXSZP5esSHBjopsXH4dg19soufvpUGA3uohi5anFtGb2lhAVdHzH6R/Evvg==} engines: {node: '>=8'} - dev: true /pend@1.2.0: resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} - dev: true /picocolors@1.0.0: resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} - dev: false /picomatch@2.3.1: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} @@ -7857,29 +9237,60 @@ packages: /pify@2.3.0: resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} engines: {node: '>=0.10.0'} - dev: true /pify@3.0.0: resolution: {integrity: sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==} engines: {node: '>=4'} - dev: true /pinkie-promise@2.0.1: resolution: {integrity: sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==} engines: {node: '>=0.10.0'} dependencies: pinkie: 2.0.4 - dev: true /pinkie@2.0.4: resolution: {integrity: sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==} engines: {node: '>=0.10.0'} - dev: true + + /pino-abstract-transport@1.1.0: + resolution: {integrity: sha512-lsleG3/2a/JIWUtf9Q5gUNErBqwIu1tUKTT3dUzaf5DySw9ra1wcqKjJjLX1VTY64Wk1eEOYsVGSaGfCK85ekA==} + dependencies: + readable-stream: 4.5.2 + split2: 4.2.0 + dev: false + + /pino-std-serializers@6.2.2: + resolution: {integrity: sha512-cHjPPsE+vhj/tnhCy/wiMh3M3z3h/j15zHQX+S9GkTBgqJuTuJzYJ4gUyACLhDaJ7kk9ba9iRDmbH2tJU03OiA==} + dev: false + + /pino@8.19.0: + resolution: {integrity: sha512-oswmokxkav9bADfJ2ifrvfHUwad6MLp73Uat0IkQWY3iAw5xTRoznXbXksZs8oaOUMpmhVWD+PZogNzllWpJaA==} + hasBin: true + dependencies: + atomic-sleep: 1.0.0 + fast-redact: 3.3.0 + on-exit-leak-free: 2.1.2 + pino-abstract-transport: 1.1.0 + pino-std-serializers: 6.2.2 + process-warning: 3.0.0 + quick-format-unescaped: 4.0.4 + real-require: 0.2.0 + safe-stable-stringify: 2.4.3 + sonic-boom: 3.8.0 + thread-stream: 2.4.1 + dev: false /pirates@4.0.6: resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} engines: {node: '>= 6'} + /pkg-dir@4.2.0: + resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} + engines: {node: '>=8'} + dependencies: + find-up: 4.1.0 + dev: true + /postcss-load-config@4.0.2: resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} engines: {node: '>= 14'} @@ -7933,6 +9344,15 @@ packages: engines: {node: '>=14'} hasBin: true + /pretty-format@29.7.0: + resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/schemas': 29.6.3 + ansi-styles: 5.2.0 + react-is: 18.2.0 + dev: true + /pretty-format@3.8.0: resolution: {integrity: sha512-WuxUnVtlWL1OfZFQFuqvnvs6MiAGk9UNsBostyBOB0Is9wb5uRESevA6rnl/rkksXaGX3GzZhPup5d6Vp1nFew==} dev: false @@ -7944,7 +9364,6 @@ packages: /process-nextick-args@2.0.1: resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} - dev: true /process-utils@4.0.0: resolution: {integrity: sha512-fMyMQbKCxX51YxR7YGCzPjLsU3yDzXFkP4oi1/Mt5Ixnk7GO/7uUTj8mrCHUwuvozWzI+V7QSJR9cZYnwNOZPg==} @@ -7954,12 +9373,19 @@ packages: fs2: 0.3.9 memoizee: 0.4.15 type: 2.7.2 - dev: true + + /process-warning@3.0.0: + resolution: {integrity: sha512-mqn0kFRl0EoqhnL0GQ0veqFHyIN1yig9RHh/InzORTUiZHFRAur+aMtRkELNwGs9aNwKS6tg/An4NYBPGwvtzQ==} + dev: false + + /process@0.11.10: + resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} + engines: {node: '>= 0.6.0'} + dev: false /promise-queue@2.2.5: resolution: {integrity: sha512-p/iXrPSVfnqPft24ZdNNLECw/UrtLTpT3jpAAMzl/o5/rDsGCPo3/CQS2611flL6LkoEJ3oQZw7C8Q80ZISXRQ==} engines: {node: '>= 0.8.0'} - dev: true /prompts@2.4.2: resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} @@ -7975,14 +9401,6 @@ packages: loose-envify: 1.4.0 object-assign: 4.1.1 react-is: 16.13.1 - dev: true - - /proxy-addr@2.0.7: - resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} - engines: {node: '>= 0.10'} - dependencies: - forwarded: 0.2.0 - ipaddr.js: 1.9.1 dev: false /proxy-from-env@1.1.0: @@ -7993,11 +9411,9 @@ packages: dependencies: end-of-stream: 1.4.4 once: 1.4.0 - dev: true /punycode@1.3.2: resolution: {integrity: sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==} - dev: true /punycode@2.3.1: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} @@ -8015,13 +9431,6 @@ packages: react: 18.2.0 dev: false - /qs@6.11.0: - resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==} - engines: {node: '>=0.6'} - dependencies: - side-channel: 1.0.4 - dev: false - /qs@6.11.2: resolution: {integrity: sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==} engines: {node: '>=0.6'} @@ -8032,41 +9441,27 @@ packages: resolution: {integrity: sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==} engines: {node: '>=0.4.x'} deprecated: The querystring API is considered Legacy. new code should use the URLSearchParams API instead. - dev: true /querystring@0.2.1: resolution: {integrity: sha512-wkvS7mL/JMugcup3/rMitHmd9ecIGd2lhFhK9N3UUQ450h66d1r3Y9nvXzQAW1Lq+wyx61k/1pfKS5KuKiyEbg==} engines: {node: '>=0.4.x'} deprecated: The querystring API is considered Legacy. new code should use the URLSearchParams API instead. - dev: true /queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + /quick-format-unescaped@4.0.4: + resolution: {integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==} + dev: false + /quick-lru@5.1.1: resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} engines: {node: '>=10'} - dev: true /ramda@0.28.0: resolution: {integrity: sha512-9QnLuG/kPVgWvMQ4aODhsBUFKOUmnbUnsSXACv+NCQZcHbeb+v8Lodp8OVxtRULN1/xOyYLLaL6npE6dMq5QTA==} dev: true - /range-parser@1.2.1: - resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} - engines: {node: '>= 0.6'} - dev: false - - /raw-body@2.5.1: - resolution: {integrity: sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==} - engines: {node: '>= 0.8'} - dependencies: - bytes: 3.1.2 - http-errors: 2.0.0 - iconv-lite: 0.4.24 - unpipe: 1.0.0 - dev: false - /rc-cascader@3.21.2(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-J7GozpgsLaOtzfIHFJFuh4oFY0ePb1w10twqK6is3pAkqHkca/PsokbDr822KIRZ8/CK8CqevxohuPDVZ1RO/A==} peerDependencies: @@ -8591,11 +9986,10 @@ packages: /react-is@16.13.1: resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} - dev: true + dev: false /react-is@18.2.0: resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} - dev: false /react-social-login-buttons@3.9.1(react@18.2.0): resolution: {integrity: sha512-KtucVWvdnIZ0icG99WJ3usQUJYmlKsOIBYGyngcuNSVyyYdZtif4KHY80qnCg+teDlgYr54ToQtg3x26ZqaS2w==} @@ -8630,7 +10024,6 @@ packages: safe-buffer: 5.1.2 string_decoder: 1.1.1 util-deprecate: 1.0.2 - dev: true /readable-stream@3.6.2: resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} @@ -8639,20 +10032,28 @@ packages: inherits: 2.0.4 string_decoder: 1.3.0 util-deprecate: 1.0.2 - dev: true + + /readable-stream@4.5.2: + resolution: {integrity: sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + abort-controller: 3.0.0 + buffer: 6.0.3 + events: 3.3.0 + process: 0.11.10 + string_decoder: 1.3.0 + dev: false /readable-web-to-node-stream@3.0.2: resolution: {integrity: sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw==} engines: {node: '>=8'} dependencies: readable-stream: 3.6.2 - dev: true /readdir-glob@1.1.3: resolution: {integrity: sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==} dependencies: minimatch: 5.1.6 - dev: true /readdirp@3.6.0: resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} @@ -8660,6 +10061,11 @@ packages: dependencies: picomatch: 2.3.1 + /real-require@0.2.0: + resolution: {integrity: sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==} + engines: {node: '>= 12.13.0'} + dev: false + /reflect.getprototypeof@1.0.5: resolution: {integrity: sha512-62wgfC8dJWrmxv44CA36pLDnP6KKl3Vhxb7PL+8+qrrFMMoJij4vgiMP8zV4O8+CBMXY1mHxI5fITGHXFHVmQQ==} engines: {node: '>= 0.4'} @@ -8671,7 +10077,7 @@ packages: get-intrinsic: 1.2.4 globalthis: 1.0.3 which-builtin-type: 1.1.3 - dev: true + dev: false /regenerator-runtime@0.13.11: resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==} @@ -8679,6 +10085,7 @@ packages: /regenerator-runtime@0.14.1: resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} + dev: false /regexp.prototype.flags@1.5.1: resolution: {integrity: sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==} @@ -8687,6 +10094,7 @@ packages: call-bind: 1.0.6 define-properties: 1.2.1 set-function-name: 2.0.1 + dev: false /require-directory@2.1.1: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} @@ -8696,7 +10104,6 @@ packages: /require-from-string@2.0.2: resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} engines: {node: '>=0.10.0'} - dev: true /resize-observer-polyfill@1.5.1: resolution: {integrity: sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==} @@ -8704,6 +10111,12 @@ packages: /resolve-alpn@1.2.1: resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==} + + /resolve-cwd@3.0.0: + resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} + engines: {node: '>=8'} + dependencies: + resolve-from: 5.0.0 dev: true /resolve-from@4.0.0: @@ -8716,6 +10129,12 @@ packages: /resolve-pkg-maps@1.0.0: resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + dev: false + + /resolve.exports@2.0.2: + resolution: {integrity: sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==} + engines: {node: '>=10'} + dev: true /resolve@1.22.8: resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} @@ -8732,13 +10151,12 @@ packages: is-core-module: 2.13.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 - dev: true + dev: false /responselike@2.0.1: resolution: {integrity: sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==} dependencies: lowercase-keys: 2.0.0 - dev: true /restore-cursor@3.1.0: resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} @@ -8746,7 +10164,6 @@ packages: dependencies: onetime: 5.1.2 signal-exit: 3.0.7 - dev: true /restore-cursor@4.0.0: resolution: {integrity: sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==} @@ -8759,7 +10176,7 @@ packages: /retry@0.13.1: resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} engines: {node: '>= 4'} - dev: true + dev: false /reusify@1.0.4: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} @@ -8775,38 +10192,36 @@ packages: dependencies: glob: 7.2.3 - /rollup@4.9.6: - resolution: {integrity: sha512-05lzkCS2uASX0CiLFybYfVkwNbKZG5NFQ6Go0VWyogFTXXbR039UVsegViTntkk4OglHBdF54ccApXRRuXRbsg==} + /rollup@4.12.0: + resolution: {integrity: sha512-wz66wn4t1OHIJw3+XU7mJJQV/2NAfw5OAk6G6Hoo3zcvz/XOfQ52Vgi+AN4Uxoxi0KBBwk2g8zPrTDA4btSB/Q==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true dependencies: '@types/estree': 1.0.5 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.9.6 - '@rollup/rollup-android-arm64': 4.9.6 - '@rollup/rollup-darwin-arm64': 4.9.6 - '@rollup/rollup-darwin-x64': 4.9.6 - '@rollup/rollup-linux-arm-gnueabihf': 4.9.6 - '@rollup/rollup-linux-arm64-gnu': 4.9.6 - '@rollup/rollup-linux-arm64-musl': 4.9.6 - '@rollup/rollup-linux-riscv64-gnu': 4.9.6 - '@rollup/rollup-linux-x64-gnu': 4.9.6 - '@rollup/rollup-linux-x64-musl': 4.9.6 - '@rollup/rollup-win32-arm64-msvc': 4.9.6 - '@rollup/rollup-win32-ia32-msvc': 4.9.6 - '@rollup/rollup-win32-x64-msvc': 4.9.6 + '@rollup/rollup-android-arm-eabi': 4.12.0 + '@rollup/rollup-android-arm64': 4.12.0 + '@rollup/rollup-darwin-arm64': 4.12.0 + '@rollup/rollup-darwin-x64': 4.12.0 + '@rollup/rollup-linux-arm-gnueabihf': 4.12.0 + '@rollup/rollup-linux-arm64-gnu': 4.12.0 + '@rollup/rollup-linux-arm64-musl': 4.12.0 + '@rollup/rollup-linux-riscv64-gnu': 4.12.0 + '@rollup/rollup-linux-x64-gnu': 4.12.0 + '@rollup/rollup-linux-x64-musl': 4.12.0 + '@rollup/rollup-win32-arm64-msvc': 4.12.0 + '@rollup/rollup-win32-ia32-msvc': 4.12.0 + '@rollup/rollup-win32-x64-msvc': 4.12.0 fsevents: 2.3.3 /run-async@2.4.1: resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==} engines: {node: '>=0.12.0'} - dev: true /run-parallel-limit@1.1.0: resolution: {integrity: sha512-jJA7irRNM91jaKc3Hcl1npHsFLOXOoTkPCUL1JEa1R82O2miplXXRaGdjW/KM/98YQWDhJLiSs793CnXfblJUw==} dependencies: queue-microtask: 1.2.3 - dev: true /run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} @@ -8817,7 +10232,6 @@ packages: resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} dependencies: tslib: 2.6.2 - dev: true /safe-array-concat@1.1.0: resolution: {integrity: sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg==} @@ -8827,10 +10241,10 @@ packages: get-intrinsic: 1.2.4 has-symbols: 1.0.3 isarray: 2.0.5 + dev: false /safe-buffer@5.1.2: resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} - dev: true /safe-buffer@5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} @@ -8842,13 +10256,18 @@ packages: call-bind: 1.0.6 get-intrinsic: 1.2.4 is-regex: 1.1.4 + dev: false + + /safe-stable-stringify@2.4.3: + resolution: {integrity: sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==} + engines: {node: '>=10'} + dev: false /safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} /sax@1.2.1: resolution: {integrity: sha512-8I2a3LovHTOpm7NV5yOyO8IHqgVsfK4+UuySrXU8YXkSRX7k6hCV9b3HrkKCr3nMpgj+0bmocaJJWpvp1oc7ZA==} - dev: true /scheduler@0.23.0: resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==} @@ -8867,12 +10286,10 @@ packages: hasBin: true dependencies: commander: 2.20.3 - dev: true /semver@5.7.2: resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} hasBin: true - dev: true /semver@6.3.1: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} @@ -8885,39 +10302,6 @@ packages: dependencies: lru-cache: 6.0.0 - /send@0.18.0: - resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==} - engines: {node: '>= 0.8.0'} - dependencies: - debug: 2.6.9 - depd: 2.0.0 - destroy: 1.2.0 - encodeurl: 1.0.2 - escape-html: 1.0.3 - etag: 1.8.1 - fresh: 0.5.2 - http-errors: 2.0.0 - mime: 1.6.0 - ms: 2.1.3 - on-finished: 2.4.1 - range-parser: 1.2.1 - statuses: 2.0.1 - transitivePeerDependencies: - - supports-color - dev: false - - /serve-static@1.15.0: - resolution: {integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==} - engines: {node: '>= 0.8.0'} - dependencies: - encodeurl: 1.0.2 - escape-html: 1.0.3 - parseurl: 1.3.3 - send: 0.18.0 - transitivePeerDependencies: - - supports-color - dev: false - /server-only@0.0.1: resolution: {integrity: sha512-qepMx2JxAa5jjfzxG79yPPq+8BuFToHd1hm7kI+Z4zAq1ftQiP7HcxMhDDItrbtwVeLg/cY2JnKnrcFkmiswNA==} dev: false @@ -8930,7 +10314,7 @@ packages: chalk: 4.1.2 dotenv: 16.4.1 dotenv-expand: 10.0.0 - serverless: 3.38.0(@aws-sdk/credential-provider-node@3.511.0) + serverless: 3.38.0(@aws-sdk/credential-provider-node@3.515.0) dev: true /serverless-esbuild@1.51.0(esbuild@0.20.0): @@ -8959,10 +10343,15 @@ packages: semver: 7.5.4 dev: true - /serverless-http@3.2.0: - resolution: {integrity: sha512-QvSyZXljRLIGqwcJ4xsKJXwkZnAVkse1OajepxfjkBXV0BMvRS5R546Z4kCBI8IygDzkQY0foNPC/rnipaE9pQ==} - engines: {node: '>=12.0'} - dev: true + /serverless-offline-lambda-function-urls@1.0.3(serverless-offline@13.3.3)(serverless@3.38.0): + resolution: {integrity: sha512-GyXL40vCGrrAzuInL0pRqhYdeD0P3JjO2vuo8XOBOrJL4YTx/vis+8wJdJQ/oo9KAsZZzeGhedzqeAlwx7r4yg==} + peerDependencies: + serverless: 3.x + serverless-offline: '>= 12.x' + dependencies: + serverless: 3.38.0(@aws-sdk/credential-provider-node@3.515.0) + serverless-offline: 13.3.3(serverless@3.38.0) + dev: false /serverless-offline@13.3.3(serverless@3.38.0): resolution: {integrity: sha512-KVw+khABJumgHsOrddtRvjKY5CDPCShOS4SYPvXXvmOrsOcS/upLEPdgcExXgAaF3OUBRsrHmroqXiLko06cbw==} @@ -8970,7 +10359,7 @@ packages: peerDependencies: serverless: ^3.2.0 dependencies: - '@aws-sdk/client-lambda': 3.511.0 + '@aws-sdk/client-lambda': 3.518.0 '@hapi/boom': 10.0.1 '@hapi/h2o2': 10.0.4 '@hapi/hapi': 21.3.3 @@ -8983,7 +10372,7 @@ packages: fs-extra: 11.2.0 is-wsl: 3.1.0 java-invoke-local: 0.0.6 - jose: 5.2.1 + jose: 5.2.2 js-string-escape: 1.0.1 jsonpath-plus: 8.0.0 jsonschema: 1.4.1 @@ -8992,7 +10381,7 @@ packages: node-schedule: 2.1.1 p-memoize: 7.1.1 p-retry: 6.2.0 - serverless: 3.38.0(@aws-sdk/credential-provider-node@3.511.0) + serverless: 3.38.0(@aws-sdk/credential-provider-node@3.515.0) velocityjs: 2.0.6 ws: 8.16.0 transitivePeerDependencies: @@ -9001,15 +10390,15 @@ packages: - encoding - supports-color - utf-8-validate - dev: true + dev: false - /serverless@3.38.0(@aws-sdk/credential-provider-node@3.511.0): + /serverless@3.38.0(@aws-sdk/credential-provider-node@3.515.0): resolution: {integrity: sha512-NJE1vOn8XmQEqfU9UxmVhkUFaCRmx6FhYw/jITN863WlOt4Y3PQbj3hwQyIb5QS1ZrXFq5ojklwewUXH7xGpdA==} engines: {node: '>=12.0'} hasBin: true requiresBuild: true dependencies: - '@serverless/dashboard-plugin': 7.2.0(@aws-sdk/credential-provider-node@3.511.0)(supports-color@8.1.1) + '@serverless/dashboard-plugin': 7.2.0(@aws-sdk/credential-provider-node@3.515.0)(supports-color@8.1.1) '@serverless/platform-client': 4.5.1(supports-color@8.1.1) '@serverless/utils': 6.15.0 abort-controller: 3.0.0 @@ -9072,7 +10461,6 @@ packages: - debug - encoding - utf-8-validate - dev: true /set-function-length@1.2.0: resolution: {integrity: sha512-4DBHDoyHlM1IRPGYcoxexgh67y4ueR53FKV1yyxwFMY7aCqcN/38M1+SwZ/qJQ8iLv7+ck385ot4CcisOAPT9w==} @@ -9091,14 +10479,10 @@ packages: define-data-property: 1.1.1 functions-have-names: 1.2.3 has-property-descriptors: 1.0.1 + dev: false /setimmediate@1.0.5: resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} - dev: true - - /setprototypeof@1.2.0: - resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} - dev: false /sharp@0.33.2: resolution: {integrity: sha512-WlYOPyyPDiiM07j/UO+E720ju6gtNtHjEGg5vovUk1Lgxyjm2LFO+37Nt/UI3MMh2l6hxTWQWi7qk3cXJTutcQ==} @@ -9135,7 +10519,6 @@ packages: engines: {node: '>=0.10.0'} dependencies: shebang-regex: 1.0.0 - dev: true /shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} @@ -9146,7 +10529,6 @@ packages: /shebang-regex@1.0.0: resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==} engines: {node: '>=0.10.0'} - dev: true /shebang-regex@3.0.0: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} @@ -9178,7 +10560,6 @@ packages: debug: 4.3.4(supports-color@8.1.1) transitivePeerDependencies: - supports-color - dev: true /simple-swizzle@0.2.2: resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} @@ -9210,34 +10591,50 @@ packages: is-fullwidth-code-point: 5.0.0 dev: true + /sonic-boom@3.8.0: + resolution: {integrity: sha512-ybz6OYOUjoQQCQ/i4LU8kaToD8ACtYP+Cj5qd2AO36bwbdewxWJ3ArmJ2cr6AvxlL2o0PqnCcPGUgkILbfkaCA==} + dependencies: + atomic-sleep: 1.0.0 + dev: false + /sort-keys-length@1.0.1: resolution: {integrity: sha512-GRbEOUqCxemTAk/b32F2xa8wDTs+Z1QHOkbhJDQTvv/6G3ZkbJ+frYWsTcc7cBB3Fu4wy4XlLCuNtJuMn7Gsvw==} engines: {node: '>=0.10.0'} dependencies: sort-keys: 1.1.2 - dev: true /sort-keys@1.1.2: resolution: {integrity: sha512-vzn8aSqKgytVik0iwdBEi+zevbTYZogewTUM6dtpmGwEcdzbub/TX4bCzRhebDCRC3QzXgJsLRKB2V/Oof7HXg==} engines: {node: '>=0.10.0'} dependencies: is-plain-obj: 1.1.0 - dev: true /sorted-array-functions@1.3.0: resolution: {integrity: sha512-2sqgzeFlid6N4Z2fUQ1cvFmTOLRi/sEDzSQ0OKYchqgoPmQBVyM3959qYx3fpS6Esef80KjmpgPeEr028dP3OA==} - dev: true + dev: false /source-map-js@1.0.2: resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} engines: {node: '>=0.10.0'} dev: false + /source-map-support@0.5.13: + resolution: {integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==} + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + dev: true + /source-map@0.5.7: resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==} engines: {node: '>=0.10.0'} dev: false + /source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + dev: true + /source-map@0.8.0-beta.0: resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} engines: {node: '>= 8'} @@ -9254,27 +10651,30 @@ packages: resolution: {integrity: sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==} dependencies: readable-stream: 3.6.2 - dev: true + + /split2@4.2.0: + resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} + engines: {node: '>= 10.x'} + dev: false /sprintf-js@1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} - dev: true /sprintf-kit@2.0.1: resolution: {integrity: sha512-2PNlcs3j5JflQKcg4wpdqpZ+AjhQJ2OZEo34NXDtlB0tIPG84xaaXhpA8XFacFiwjKA4m49UOYG83y3hbMn/gQ==} dependencies: es5-ext: 0.10.62 - dev: true - /statuses@2.0.1: - resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} - engines: {node: '>= 0.8'} - dev: false + /stack-utils@2.0.6: + resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} + engines: {node: '>=10'} + dependencies: + escape-string-regexp: 2.0.0 + dev: true /stream-buffers@3.0.2: resolution: {integrity: sha512-DQi1h8VEBA/lURbSwFtEHnSTb9s2/pwLEaFuNhXwy1Dx3Sa0lOuYT2yNUr4/j2fs8oCAMANtrZ5OrPZtyVs3MQ==} engines: {node: '>= 0.10.0'} - dev: true /stream-promise@3.2.0: resolution: {integrity: sha512-P+7muTGs2C8yRcgJw/PPt61q7O517tDHiwYEzMWo1GSBCcZedUMT/clz7vUNsSxFphIlJ6QUL4GexQKlfJoVtA==} @@ -9282,7 +10682,6 @@ packages: 2-thenable: 1.0.0 es5-ext: 0.10.62 is-stream: 1.1.0 - dev: true /streamsearch@1.1.0: resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} @@ -9298,6 +10697,14 @@ packages: resolution: {integrity: sha512-u/1tdPl4yQnPBjnVrmdLo9gtuLvELKsAoRapekWggdiQNvvvum+jYF329d84NAa660KQw7pB2n36KrIKVoXa3A==} dev: false + /string-length@4.0.2: + resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} + engines: {node: '>=10'} + dependencies: + char-regex: 1.0.2 + strip-ansi: 6.0.1 + dev: true + /string-width@4.2.3: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} @@ -9335,7 +10742,7 @@ packages: regexp.prototype.flags: 1.5.1 set-function-name: 2.0.1 side-channel: 1.0.4 - dev: true + dev: false /string.prototype.trim@1.2.8: resolution: {integrity: sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==} @@ -9344,6 +10751,7 @@ packages: call-bind: 1.0.6 define-properties: 1.2.1 es-abstract: 1.22.3 + dev: false /string.prototype.trimend@1.0.7: resolution: {integrity: sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==} @@ -9351,6 +10759,7 @@ packages: call-bind: 1.0.6 define-properties: 1.2.1 es-abstract: 1.22.3 + dev: false /string.prototype.trimstart@1.0.7: resolution: {integrity: sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==} @@ -9358,18 +10767,17 @@ packages: call-bind: 1.0.6 define-properties: 1.2.1 es-abstract: 1.22.3 + dev: false /string_decoder@1.1.1: resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} dependencies: safe-buffer: 5.1.2 - dev: true /string_decoder@1.3.0: resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} dependencies: safe-buffer: 5.2.1 - dev: true /strip-ansi@6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} @@ -9386,6 +10794,7 @@ packages: /strip-bom@3.0.0: resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} engines: {node: '>=4'} + dev: false /strip-bom@4.0.0: resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} @@ -9396,7 +10805,6 @@ packages: resolution: {integrity: sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==} dependencies: is-natural-number: 4.0.1 - dev: true /strip-final-newline@2.0.0: resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} @@ -9405,7 +10813,6 @@ packages: /strip-final-newline@3.0.0: resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} engines: {node: '>=12'} - dev: true /strip-json-comments@3.1.1: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} @@ -9416,11 +10823,9 @@ packages: engines: {node: '>=0.10.0'} dependencies: escape-string-regexp: 1.0.5 - dev: true /strnum@1.0.5: resolution: {integrity: sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==} - dev: true /strtok3@6.3.0: resolution: {integrity: sha512-fZtbhtvI9I48xDSywd/somNqgUHl2L2cstmXCCif0itOf96jeW18MBSyrLuNicYQVkvpOxkZtkzujiTJ9LW5Jw==} @@ -9428,7 +10833,6 @@ packages: dependencies: '@tokenizer/token': 0.3.0 peek-readable: 4.1.0 - dev: true /styled-jsx@5.1.1(react@18.2.0): resolution: {integrity: sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==} @@ -9482,11 +10886,11 @@ packages: semver: 7.5.4 transitivePeerDependencies: - supports-color - dev: true /supports-color@5.5.0: resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} engines: {node: '>=4'} + requiresBuild: true dependencies: has-flag: 3.0.0 @@ -9495,7 +10899,6 @@ packages: engines: {node: '>=6'} dependencies: has-flag: 3.0.0 - dev: true /supports-color@7.2.0: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} @@ -9549,6 +10952,7 @@ packages: /tapable@2.2.1: resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} engines: {node: '>=6'} + dev: false /tar-stream@1.6.2: resolution: {integrity: sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==} @@ -9561,7 +10965,6 @@ packages: readable-stream: 2.3.8 to-buffer: 1.1.1 xtend: 4.0.2 - dev: true /tar-stream@2.2.0: resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} @@ -9572,7 +10975,6 @@ packages: fs-constants: 1.0.0 inherits: 2.0.4 readable-stream: 3.6.2 - dev: true /tar@6.2.0: resolution: {integrity: sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==} @@ -9584,7 +10986,6 @@ packages: minizlib: 2.1.2 mkdirp: 1.0.4 yallist: 4.0.0 - dev: true /tesseract.js-core@5.0.0: resolution: {integrity: sha512-lJur5LzjinW5VYMKlVNnBU2JPLpO+A9VqAYBeuV+ZgH0hKvsnm+536Yyp+/zRTBdLe7D6Kok0FN9g+TE4J8qGA==} @@ -9608,6 +11009,15 @@ packages: - encoding dev: false + /test-exclude@6.0.0: + resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} + engines: {node: '>=8'} + dependencies: + '@istanbuljs/schema': 0.1.3 + glob: 7.2.3 + minimatch: 3.1.2 + dev: true + /text-table@0.2.0: resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} @@ -9622,9 +11032,14 @@ packages: dependencies: any-promise: 1.3.0 + /thread-stream@2.4.1: + resolution: {integrity: sha512-d/Ex2iWd1whipbT681JmTINKw0ZwOUBZm7+Gjs64DHuX34mmw8vJL2bFAaNacaW72zYiTJxSHi5abUuOi5nsfg==} + dependencies: + real-require: 0.2.0 + dev: false + /throat@5.0.0: resolution: {integrity: sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==} - dev: true /throttle-debounce@5.0.0: resolution: {integrity: sha512-2iQTSgkkc1Zyk0MeVrt/3BvuOXYPl/R8Z0U2xxo9rjwNciaHDG3R+Lm6dh4EeUci49DanvBnuqI6jshoQQRGEg==} @@ -9633,7 +11048,6 @@ packages: /through@2.3.8: resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} - dev: true /tightrope@0.1.0: resolution: {integrity: sha512-HHHNYdCAIYwl1jOslQBT455zQpdeSo8/A346xpIb/uuqhSg+tCvYNsP5f11QW+z9VZ3vSX8YIfzTApjjuGH63w==} @@ -9645,17 +11059,16 @@ packages: dependencies: es5-ext: 0.10.62 next-tick: 1.1.0 - dev: true - /tldts-core@6.1.9: - resolution: {integrity: sha512-YEExedCJDgJ29LPbZ7Q+QLoTJccmiVUaMLIjpN9VxpQGwJa2+qN7bbnNRZ3gD0p0I9l8BZ42fCAE0kNvxk7FGA==} + /tldts-core@6.1.11: + resolution: {integrity: sha512-ZFcT+/fdEc5VRndQIJtArNBHsaq4udRoeE4E6cwLzGaH0dq7Ng2L7cAoea6riM2uhNFD09EDa1bN8lrfrOBCLg==} dev: false - /tldts@6.1.9: - resolution: {integrity: sha512-LcOAb4CxqEI0+6JI0z3Z0cN0GPGO3VK6SyWwJM28BhVwIseJ05WAxGmXvSzZCqlIFeU4C5BFvJ3LnAeeHYg6ww==} + /tldts@6.1.11: + resolution: {integrity: sha512-AAgE/IWvbsg4Lr4KGFNR7bL/MhQfBlgGV9UBg2uy5mCwSGi5f12eZ7ZydAqv4ACys6pUYjNoV2qfZdcCn4RS+Q==} hasBin: true dependencies: - tldts-core: 6.1.9 + tldts-core: 6.1.11 dev: false /tmp@0.0.33: @@ -9663,16 +11076,17 @@ packages: engines: {node: '>=0.6.0'} dependencies: os-tmpdir: 1.0.2 + + /tmpl@1.0.5: + resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} dev: true /to-buffer@1.1.1: resolution: {integrity: sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==} - dev: true /to-fast-properties@2.0.0: resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} engines: {node: '>=4'} - dev: false /to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} @@ -9684,18 +11098,12 @@ packages: resolution: {integrity: sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==} dev: false - /toidentifier@1.0.1: - resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} - engines: {node: '>=0.6'} - dev: false - /token-types@4.2.1: resolution: {integrity: sha512-6udB24Q737UD/SDsKAHI9FCRP7Bqc9D/MQUV02ORQg5iskjtLJlZJNdN4kKtcdtwCeWIwIHDGaUsTsCCAa8sFQ==} engines: {node: '>=10'} dependencies: '@tokenizer/token': 0.3.0 ieee754: 1.2.1 - dev: true /tr46@0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} @@ -9715,7 +11123,6 @@ packages: /traverse@0.6.8: resolution: {integrity: sha512-aXJDbk6SnumuaZSANd21XAo15ucCDE38H4fkqiGsc3MhCK+wOlZvLP9cB/TvpHT0mOyWgC4Z8EwRlzqYSUzdsA==} engines: {node: '>= 0.4'} - dev: true /tree-kill@1.2.2: resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} @@ -9726,7 +11133,6 @@ packages: engines: {node: '>=0.10.0'} dependencies: escape-string-regexp: 1.0.5 - dev: true /ts-api-utils@1.0.3(typescript@5.3.3): resolution: {integrity: sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==} @@ -9735,10 +11141,46 @@ packages: typescript: '>=4.2.0' dependencies: typescript: 5.3.3 + dev: false /ts-interface-checker@0.1.13: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} + /ts-jest@29.1.2(@babel/core@7.23.9)(esbuild@0.19.12)(jest@29.7.0)(typescript@5.3.3): + resolution: {integrity: sha512-br6GJoH/WUX4pu7FbZXuWGKGNDuU7b8Uj77g/Sp7puZV6EXzuByl6JrECvm0MzVzSTkSHWTihsXt+5XYER5b+g==} + engines: {node: ^16.10.0 || ^18.0.0 || >=20.0.0} + hasBin: true + peerDependencies: + '@babel/core': '>=7.0.0-beta.0 <8' + '@jest/types': ^29.0.0 + babel-jest: ^29.0.0 + esbuild: '*' + jest: ^29.0.0 + typescript: '>=4.3 <6' + peerDependenciesMeta: + '@babel/core': + optional: true + '@jest/types': + optional: true + babel-jest: + optional: true + esbuild: + optional: true + dependencies: + '@babel/core': 7.23.9 + bs-logger: 0.2.6 + esbuild: 0.19.12 + fast-json-stable-stringify: 2.1.0 + jest: 29.7.0 + jest-util: 29.7.0 + json5: 2.2.3 + lodash.memoize: 4.1.2 + make-error: 1.3.6 + semver: 7.5.4 + typescript: 5.3.3 + yargs-parser: 21.1.1 + dev: true + /ts-mixer@6.0.3: resolution: {integrity: sha512-k43M7uCG1AkTyxgnmI5MPwKoUvS/bRvLvUb7+Pgpdlmok8AoqmUaZxUUw8zKM5B1lqZrt41GjYgnvAi0fppqgQ==} dev: false @@ -9754,10 +11196,10 @@ packages: json5: 1.0.2 minimist: 1.2.8 strip-bom: 3.0.0 + dev: false /tslib@1.14.1: resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} - dev: true /tslib@2.6.2: resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} @@ -9791,7 +11233,7 @@ packages: joycon: 3.1.1 postcss-load-config: 4.0.2 resolve-from: 5.0.0 - rollup: 4.9.6 + rollup: 4.12.0 source-map: 0.8.0-beta.0 sucrase: 3.35.0 tree-kill: 1.2.2 @@ -9800,64 +11242,64 @@ packages: - supports-color - ts-node - /turbo-darwin-64@1.12.3: - resolution: {integrity: sha512-dDglIaux+A4jOnB9CDH69sujmrnuLJLrKw1t3J+if6ySlFuxSwC++gDq9TVuOZo2+S7lFkGh+x5ytn3wp+jE8Q==} + /turbo-darwin-64@1.12.4: + resolution: {integrity: sha512-dBwFxhp9isTa9RS/fz2gDVk5wWhKQsPQMozYhjM7TT4jTrnYn0ZJMzr7V3B/M/T8QF65TbniW7w1gtgxQgX5Zg==} cpu: [x64] os: [darwin] requiresBuild: true dev: true optional: true - /turbo-darwin-arm64@1.12.3: - resolution: {integrity: sha512-5TqqeujEyHMoVUWGzSzUl5ERSg7HDCdbU3gBs5ziWTpFRpeJ/+Y15kYyZJcMQcubRIH3Y1hL/yA5IhlGdgXOMA==} + /turbo-darwin-arm64@1.12.4: + resolution: {integrity: sha512-1Uo5iI6xsJ1j9ObsqxYRsa3W26mEbUe6fnj4rQYV6kDaqYD54oAMJ6hM53q9rB8JvFxwdrUXGp3PwTw9A0qqkA==} cpu: [arm64] os: [darwin] requiresBuild: true dev: true optional: true - /turbo-linux-64@1.12.3: - resolution: {integrity: sha512-yUreU+/gq4vlBtcdyfjz7slwz4zM1RG8sSXvyHmAS+QXqSrGkegg4qLl2fRbv/c3EyA/XbfcZuD6tcrXkejr6g==} + /turbo-linux-64@1.12.4: + resolution: {integrity: sha512-ONg2aSqKP7LAQOg7ysmU5WpEQp4DGNxSlAiR7um+LKtbmC/UxogbR5+T+Uuq6zGuQ5kJyKjWJ4NhtvUswOqBsA==} cpu: [x64] os: [linux] requiresBuild: true dev: true optional: true - /turbo-linux-arm64@1.12.3: - resolution: {integrity: sha512-XRwAsp2eRSqZmaMVNrmHoKqofeJMuD87zmefZLTRAObh38hIwKgyl2QRsJIbteob5RN77yFbv3lAJ36UIY5h7w==} + /turbo-linux-arm64@1.12.4: + resolution: {integrity: sha512-9FPufkwdgfIKg/9jj87Cdtftw8o36y27/S2vLN7FTR2pp9c0MQiTBOLVYadUr1FlShupddmaMbTkXEhyt9SdrA==} cpu: [arm64] os: [linux] requiresBuild: true dev: true optional: true - /turbo-windows-64@1.12.3: - resolution: {integrity: sha512-CPnRfnUCtmFeShOtUdMCthySjmyHaoTyh9JueiYFvtCNeO3WfDMj63dpOQstQWHdJFYmIrIGfhAclcds9ePQYA==} + /turbo-windows-64@1.12.4: + resolution: {integrity: sha512-2mOtxHW5Vjh/5rDVu/aFwsMzI+chs8XcEuJHlY1sYOpEymYTz+u6AXbnzRvwZFMrLKr7J7fQOGl+v96sLKbNdA==} cpu: [x64] os: [win32] requiresBuild: true dev: true optional: true - /turbo-windows-arm64@1.12.3: - resolution: {integrity: sha512-cYA/wlzvp4vlCNHYJ2AjNS3FLXWwUC/5CJompBkTeKFFB6AviE/iLkbIhFikCVSNXZk/3AGanpMUXIkt3bdlwg==} + /turbo-windows-arm64@1.12.4: + resolution: {integrity: sha512-nOY5wae9qnxPOpT1fRuYO0ks6dTwpKMPV6++VkDkamFDLFHUDVM/9kmD2UTeh1yyrKnrZksbb9zmShhmfj1wog==} cpu: [arm64] os: [win32] requiresBuild: true dev: true optional: true - /turbo@1.12.3: - resolution: {integrity: sha512-a6q8I0TK9ohACYbkmxzG/JYPuDC4VCvfmXLTlf321qQ4BIAhoyaOj/O2g+zJ6L1vNYnZ82G4LrbMfgLLngbLsg==} + /turbo@1.12.4: + resolution: {integrity: sha512-yUJ7elEUSToiGwFZogXpYKJpQ0BvaMbkEuQECIWtkBLcmWzlMOt6bActsIm29oN83mRU0WbzGt4e8H1KHWedhg==} hasBin: true optionalDependencies: - turbo-darwin-64: 1.12.3 - turbo-darwin-arm64: 1.12.3 - turbo-linux-64: 1.12.3 - turbo-linux-arm64: 1.12.3 - turbo-windows-64: 1.12.3 - turbo-windows-arm64: 1.12.3 + turbo-darwin-64: 1.12.4 + turbo-darwin-arm64: 1.12.4 + turbo-linux-64: 1.12.4 + turbo-linux-arm64: 1.12.4 + turbo-windows-64: 1.12.4 + turbo-windows-arm64: 1.12.4 dev: true /type-check@0.4.0: @@ -9866,6 +11308,11 @@ packages: dependencies: prelude-ls: 1.2.1 + /type-detect@4.0.8: + resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} + engines: {node: '>=4'} + dev: true + /type-fest@0.20.2: resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} engines: {node: '>=10'} @@ -9873,33 +11320,21 @@ packages: /type-fest@0.21.3: resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} engines: {node: '>=10'} - dev: true /type-fest@2.19.0: resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} engines: {node: '>=12.20'} - dev: true + dev: false /type-fest@3.13.1: resolution: {integrity: sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==} engines: {node: '>=14.16'} - dev: true - - /type-is@1.6.18: - resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} - engines: {node: '>= 0.6'} - dependencies: - media-typer: 0.3.0 - mime-types: 2.1.35 - dev: false /type@1.2.0: resolution: {integrity: sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==} - dev: true /type@2.7.2: resolution: {integrity: sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==} - dev: true /typed-array-buffer@1.0.0: resolution: {integrity: sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==} @@ -9908,6 +11343,7 @@ packages: call-bind: 1.0.6 get-intrinsic: 1.2.4 is-typed-array: 1.1.13 + dev: false /typed-array-byte-length@1.0.0: resolution: {integrity: sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==} @@ -9917,6 +11353,7 @@ packages: for-each: 0.3.3 has-proto: 1.0.1 is-typed-array: 1.1.13 + dev: false /typed-array-byte-offset@1.0.0: resolution: {integrity: sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==} @@ -9927,6 +11364,7 @@ packages: for-each: 0.3.3 has-proto: 1.0.1 is-typed-array: 1.1.13 + dev: false /typed-array-length@1.0.4: resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} @@ -9934,6 +11372,7 @@ packages: call-bind: 1.0.6 for-each: 0.3.3 is-typed-array: 1.1.13 + dev: false /typescript@5.3.3: resolution: {integrity: sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==} @@ -9947,13 +11386,13 @@ packages: has-bigints: 1.0.2 has-symbols: 1.0.3 which-boxed-primitive: 1.0.2 + dev: false /unbzip2-stream@1.4.3: resolution: {integrity: sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==} dependencies: buffer: 5.7.1 through: 2.3.8 - dev: true /undici-types@5.26.5: resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} @@ -9976,21 +11415,24 @@ packages: resolution: {integrity: sha512-WWM3HP+siTxzIWPNUg7hZ4XO8clKi6NoCAJJWnuRL+BAqyFXF8gC03WNyTefGoUXYc47uYgXxpKLIEvo65PEHw==} dependencies: type: 2.7.2 - dev: true /universalify@2.0.1: resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} engines: {node: '>= 10.0.0'} - dev: true - - /unpipe@1.0.0: - resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} - engines: {node: '>= 0.8'} - dev: false /untildify@4.0.0: resolution: {integrity: sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==} engines: {node: '>=8'} + + /update-browserslist-db@1.0.13(browserslist@4.23.0): + resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + dependencies: + browserslist: 4.23.0 + escalade: 3.1.2 + picocolors: 1.0.0 dev: true /uri-js@4.4.1: @@ -10007,11 +11449,9 @@ packages: dependencies: punycode: 1.3.2 querystring: 0.2.0 - dev: true /util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - dev: true /util@0.12.5: resolution: {integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==} @@ -10021,32 +11461,32 @@ packages: is-generator-function: 1.0.10 is-typed-array: 1.1.13 which-typed-array: 1.1.14 - dev: true - - /utils-merge@1.0.1: - resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} - engines: {node: '>= 0.4.0'} - dev: false /uuid@8.0.0: resolution: {integrity: sha512-jOXGuXZAWdsTH7eZLtyXMqUb9EcWMGZNbL9YcGBJl4MH4nrxHmZJhEHvyLFrkxo+28uLb/NYRcStH48fnD0Vzw==} hasBin: true - dev: true /uuid@8.3.2: resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} hasBin: true - dev: true /uuid@9.0.1: resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} hasBin: true + /v8-to-istanbul@9.2.0: + resolution: {integrity: sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==} + engines: {node: '>=10.12.0'} + dependencies: + '@jridgewell/trace-mapping': 0.3.22 + '@types/istanbul-lib-coverage': 2.0.6 + convert-source-map: 2.0.0 + dev: true + /validate-npm-package-name@3.0.0: resolution: {integrity: sha512-M6w37eVCMMouJ9V/sdPGnC5H4uDr73/+xdq0FBLO3TFFX1+7wiUY6Es328NN+y43tmY+doUdN9g9J21vqB7iLw==} dependencies: builtins: 1.0.3 - dev: true /validate-npm-package-name@5.0.0: resolution: {integrity: sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ==} @@ -10055,11 +11495,6 @@ packages: builtins: 5.0.1 dev: true - /vary@1.1.2: - resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} - engines: {node: '>= 0.8'} - dev: false - /velocityjs@2.0.6: resolution: {integrity: sha512-QMYLeYLBX6eqekCin3OPmDAHapaUx3foNFE264ml1/yxRZ8TUUlI1+u6rtN4E8tKNqwzpRPeNgJtjLbgRNK4fw==} engines: {node: '>=0.8.0'} @@ -10068,6 +11503,12 @@ packages: debug: 4.3.4(supports-color@8.1.1) transitivePeerDependencies: - supports-color + dev: false + + /walker@1.0.8: + resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} + dependencies: + makeerror: 1.0.12 dev: true /wasm-feature-detect@1.6.1: @@ -10078,7 +11519,6 @@ packages: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} dependencies: defaults: 1.0.4 - dev: true /webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} @@ -10120,6 +11560,7 @@ packages: is-number-object: 1.0.7 is-string: 1.0.7 is-symbol: 1.0.4 + dev: false /which-builtin-type@1.1.3: resolution: {integrity: sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==} @@ -10137,7 +11578,7 @@ packages: which-boxed-primitive: 1.0.2 which-collection: 1.0.1 which-typed-array: 1.1.14 - dev: true + dev: false /which-collection@1.0.1: resolution: {integrity: sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==} @@ -10146,7 +11587,7 @@ packages: is-set: 2.0.2 is-weakmap: 2.0.1 is-weakset: 2.0.2 - dev: true + dev: false /which-typed-array@1.1.14: resolution: {integrity: sha512-VnXFiIW8yNn9kIHN88xvZ4yOWchftKDsRJ8fEPacX/wl1lOvBrhsJ/OeJCXq7B0AaijRuqgzSKalJoPk+D8MPg==} @@ -10163,7 +11604,6 @@ packages: hasBin: true dependencies: isexe: 2.0.0 - dev: true /which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} @@ -10177,7 +11617,7 @@ packages: engines: {node: '>=12'} dependencies: string-width: 5.1.2 - dev: true + dev: false /wrap-ansi@6.2.0: resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} @@ -10186,7 +11626,6 @@ packages: ansi-styles: 4.3.0 string-width: 4.2.3 strip-ansi: 6.0.1 - dev: true /wrap-ansi@7.0.0: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} @@ -10222,7 +11661,6 @@ packages: dependencies: imurmurhash: 0.1.4 signal-exit: 3.0.7 - dev: true /ws@7.5.9: resolution: {integrity: sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==} @@ -10235,7 +11673,6 @@ packages: optional: true utf-8-validate: optional: true - dev: true /ws@8.14.2: resolution: {integrity: sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g==} @@ -10261,6 +11698,7 @@ packages: optional: true utf-8-validate: optional: true + dev: false /xml2js@0.6.2: resolution: {integrity: sha512-T4rieHaC1EXcES0Kxxj4JWgaUQHDk+qwHcYOCFHfiwKz7tOVPLq7Hjq9dM1WCMhylqMEfP7hMcOIChvotiZegA==} @@ -10268,29 +11706,29 @@ packages: dependencies: sax: 1.2.1 xmlbuilder: 11.0.1 - dev: true /xmlbuilder@11.0.1: resolution: {integrity: sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==} engines: {node: '>=4.0'} - dev: true /xtend@4.0.2: resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} engines: {node: '>=0.4'} - dev: true /y18n@5.0.8: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} dev: true + /yallist@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + dev: true + /yallist@4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} /yaml-ast-parser@0.0.43: resolution: {integrity: sha512-2PTINUwsRqSd+s8XxKaJWQlUuEMHJQyEuh2edBbW8KNJz0SJPwUSD2zRWqezFEdN7IzAgeuYHFUCF7o8zRdZ0A==} - dev: true /yaml@2.3.4: resolution: {integrity: sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==} @@ -10302,13 +11740,17 @@ packages: dependencies: argparse: 1.0.10 glob: 7.2.3 - dev: true /yargs-parser@20.2.9: resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} engines: {node: '>=10'} dev: true + /yargs-parser@21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} + dev: true + /yargs@16.2.0: resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} engines: {node: '>=10'} @@ -10322,12 +11764,24 @@ packages: yargs-parser: 20.2.9 dev: true + /yargs@17.7.2: + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + engines: {node: '>=12'} + dependencies: + cliui: 8.0.1 + escalade: 3.1.2 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 21.1.1 + dev: true + /yauzl@2.10.0: resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==} dependencies: buffer-crc32: 0.2.13 fd-slicer: 1.1.0 - dev: true /yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} @@ -10340,7 +11794,6 @@ packages: archiver-utils: 3.0.4 compress-commons: 4.1.2 readable-stream: 3.6.2 - dev: true /zlibjs@0.3.1: resolution: {integrity: sha512-+J9RrgTKOmlxFSDHo0pI1xM6BLVUv+o0ZT9ANtCxGkjIVCCUdx9alUF8Gm+dGLKbkkkidWIHFDZHDMpfITt4+w==} diff --git a/turbo.json b/turbo.json index e9b2181..3e269fa 100644 --- a/turbo.json +++ b/turbo.json @@ -2,7 +2,10 @@ "$schema": "https://turbo.build/schema.json", "pipeline": { "dev": { - "dependsOn": ["@divine-bridge/common#build"], + "dependsOn": [ + "@divine-bridge/ocr-service#build", + "@divine-bridge/common#build" + ], "dotEnv": [".env.development.local", ".env"], "cache": false }, @@ -11,10 +14,18 @@ "outputs": [".next/**", "build/**", "dist/**"], "dotEnv": [".env.production.local", ".env"] }, + "deploy": { + "dependsOn": ["^build"], + "dotEnv": [".env.production.local", ".env"] + }, "start": { "dependsOn": ["^build"] }, "lint": {}, - "format": {} + "format": {}, + "test": { + "dependsOn": ["^build"], + "dotEnv": [".env.test"] + } } }