diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index f9911374..ead51eea 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -19,3 +19,4 @@ - [ ] All of my containers are healthy and not producing any error messages - [ ] The frontend and backend ports are set to 3000 & 5000, respectively - [ ] If new packages were installed, I ran yarn install, and there is no package-lock.json file present in the codebase +- [ ] I took note of any changes made outside of my ticket (e.g. refactored common ui component, updated an endpoint, changed the schema, etc.) diff --git a/RAILWAY_DEPLOYMENT.md b/RAILWAY_DEPLOYMENT.md index 74c575c9..44c9c0f3 100644 --- a/RAILWAY_DEPLOYMENT.md +++ b/RAILWAY_DEPLOYMENT.md @@ -150,3 +150,5 @@ Railway respects the ENTRYPOINT, so both environments run `prismaInitAndRun` on ``` 4. **Monitor Railway logs** on deployment to verify seeding behavior 5. **Keep system badges in sync** between `prodData.ts` and production database + +TODO: Review & update doc \ No newline at end of file diff --git a/README.md b/README.md index 865cdc4e..d651d937 100644 --- a/README.md +++ b/README.md @@ -39,9 +39,10 @@ Backend: http://localhost:5000/graphql ## Database Interactions Apply / migrate changes in prisma.schema to the database: -1. Change the DATABASE_URL in the backend .env file to: postgresql://postgres:postgres@**localhost**:5432/mp -2. In your terminal, run `npx prisma migrate dev` in the backend folder and follow the prompts -3. Don’t forget to reset DATABASE_URL back to postgresql://postgres:postgres@**mp_db**:5432/mp +1. First ensure your `mp_db` container is running +2. Change the DATABASE_URL in the backend .env file to: postgresql://postgres:postgres@**localhost**:5432/mp +3. In your terminal, run `npx prisma migrate dev` in the backend folder and follow the prompts +4. Don’t forget to reset DATABASE_URL back to postgresql://postgres:postgres@**mp_db**:5432/mp Common database commands: ```bash diff --git a/backend/.eslintrc.js b/backend/.eslintrc.js index d5b88e94..4d015cbe 100644 --- a/backend/.eslintrc.js +++ b/backend/.eslintrc.js @@ -20,6 +20,8 @@ module.exports = { "class-methods-use-this": 0, "import/prefer-default-export": "off", "no-console": "off", + "import/no-cycle": "off", + "@typescript-eslint/no-explicit-any": "off", }, ignorePatterns: ["build/*"], }; diff --git a/backend/Dockerfile b/backend/Dockerfile index 3b949824..95f6a691 100644 --- a/backend/Dockerfile +++ b/backend/Dockerfile @@ -3,7 +3,5 @@ WORKDIR /app COPY . ./ RUN apt-get update -y && apt-get install -y openssl RUN yarn install -ARG NODE_ENV -ENV NODE_ENV=$NODE_ENV EXPOSE 5000 -ENTRYPOINT ["yarn", "prismaInitAndRun"] +ENTRYPOINT ["yarn", "start"] diff --git a/backend/constants/days.ts b/backend/constants/days.ts new file mode 100644 index 00000000..74550017 --- /dev/null +++ b/backend/constants/days.ts @@ -0,0 +1,11 @@ +import { DayOfWeek } from "@prisma/client"; + +export const orderedDays = [ + DayOfWeek.SUNDAY, + DayOfWeek.MONDAY, + DayOfWeek.TUESDAY, + DayOfWeek.WEDNESDAY, + DayOfWeek.THURSDAY, + DayOfWeek.FRIDAY, + DayOfWeek.SATURDAY, +]; diff --git a/backend/constants/roles.ts b/backend/constants/roles.ts new file mode 100644 index 00000000..d035cb9c --- /dev/null +++ b/backend/constants/roles.ts @@ -0,0 +1,3 @@ +export const ADMIN = "admin"; +export const RELIEF = "relief"; +export const PARTICIPANT = "participant"; diff --git a/backend/constants/systemBadges.ts b/backend/constants/systemBadges.ts new file mode 100644 index 00000000..261028dd --- /dev/null +++ b/backend/constants/systemBadges.ts @@ -0,0 +1,19 @@ +export const LOGIN = "Log In"; +export const PERFECT_SCORE_REQUIRED = "Perfect Score (Required Tasks)"; +export const PERFECT_SCORE_OPTIONAL = "Perfect Score (Optional Tasks)"; +export const MONEY_EARNED = "Money Earned Milestone"; +export const PR_LEADER = "PR Leader"; +export const INDIVIDUAL_GOAL = "Individual Goals Complete"; +export const FIRST_GOAL = "First Goal Set"; +export const JACK_OF_ALL_TRADES = "Jack of All Trades"; + +export const SYSTEM_BADGES = [ + LOGIN, + PERFECT_SCORE_REQUIRED, + PERFECT_SCORE_OPTIONAL, + MONEY_EARNED, + PR_LEADER, + INDIVIDUAL_GOAL, + FIRST_GOAL, + JACK_OF_ALL_TRADES, +]; diff --git a/backend/crons/index.ts b/backend/crons/index.ts index 8fd6085b..ae413515 100644 --- a/backend/crons/index.ts +++ b/backend/crons/index.ts @@ -1,75 +1,34 @@ import cron from "node-cron"; -import expireAdminNotes from "./scripts/expireAdminNotes"; -import expireAdminAnnouncements from "./scripts/expireAdminAnnouncements"; -import expireLoginStreak from "./scripts/expireLoginStreak"; -import createAssignedTasks from "./scripts/createAssignedTask"; -import { - sendWeeklyReports, - sendMonthlyReports, -} from "./scripts/sendReportEmails"; +import { isLastDayOfMonth } from "date-fns"; +import expireNotes from "./scripts/expireNotes"; +import expireAnnouncements from "./scripts/expireAnnouncements"; +import resetLoginStreak from "./scripts/resetLoginStreak"; +import assignRequiredTasks from "./scripts/assignRequiredTasks"; +import sendMonthlyReport from "./scripts/sendMonthlyReport"; +import sendWeeklyReport from "./scripts/sendWeeklyReport"; cron.schedule("0 0 * * * *", async () => { - const res = await expireAdminNotes(); - if (res) { - console.log("Deleted expired notes"); - } else { - console.log("Could not expire admin notes"); - } + await expireNotes(); }); cron.schedule("0 0 0 * * *", async () => { - const res = await expireAdminAnnouncements(); - if (res) { - console.log("Expired admin announcements"); - } else { - console.log("Could not expire admin announcements"); - } + await expireAnnouncements(); }); -cron.schedule("0 0 0 * * *", async () => { - const res = await expireLoginStreak(); - if (res) { - console.log("Expired login streaks"); - } else { - console.log("Could not expire login streaks"); - } +cron.schedule("0 59 23 * * *", async () => { + await resetLoginStreak(); }); -cron.schedule("0 0 * * 1", async () => { - const res = await createAssignedTasks(); - if (res) { - console.log("Created assigned tasks"); - } else { - console.log("Could not create assigned tasks"); - } +cron.schedule("0 0 0 * * 0", async () => { + await assignRequiredTasks(); }); -// Weekly reports - every Monday at 9 AM -cron.schedule("0 9 * * 1", async () => { - const timestamp = new Date().toISOString(); - console.log( - `[${timestamp}] Starting weekly report generation and emailing...` - ); - - const res = await sendWeeklyReports(); - if (res) { - console.log(`[${timestamp}] Weekly reports sent successfully`); - } else { - console.log(`[${timestamp}] Could not send weekly reports`); - } +cron.schedule("0 0 23 * * 6", async () => { + await sendWeeklyReport(); }); -// Monthly reports - first day of month at 9 AM -cron.schedule("0 9 1 * *", async () => { - const timestamp = new Date().toISOString(); - console.log( - `[${timestamp}] Starting monthly report generation and emailing...` - ); - - const res = await sendMonthlyReports(); - if (res) { - console.log(`[${timestamp}] Monthly reports sent successfully`); - } else { - console.log(`[${timestamp}] Could not send monthly reports`); +cron.schedule("0 0 23 * * *", async () => { + if (isLastDayOfMonth(new Date())) { + await sendMonthlyReport(); } }); diff --git a/backend/crons/scripts/assignRequiredTasks.ts b/backend/crons/scripts/assignRequiredTasks.ts new file mode 100644 index 00000000..fd90a88a --- /dev/null +++ b/backend/crons/scripts/assignRequiredTasks.ts @@ -0,0 +1,18 @@ +import { Task, TaskType } from "@prisma/client"; +import db from "../../prisma"; +import { assignTasksToAllParticipants } from "../../utils/taskUtils"; + +// assigns all required tasks to each participant for the current week +async function assignRequiredTasks() { + try { + const requiredTasks: Task[] = await db.task.findMany({ + where: { type: TaskType.REQUIRED }, + }); + assignTasksToAllParticipants(requiredTasks); + console.log("successfully assigned required tasks to participants"); + } catch (err) { + console.error(err); + } +} + +export default assignRequiredTasks; diff --git a/backend/crons/scripts/createAssignedTask.ts b/backend/crons/scripts/createAssignedTask.ts deleted file mode 100644 index 741bb99e..00000000 --- a/backend/crons/scripts/createAssignedTask.ts +++ /dev/null @@ -1,130 +0,0 @@ -import { - TaskType, - RecurrenceFrequency, - TimeOption, - DayOfWeek, -} from "@prisma/client"; -import prisma from "../../prisma"; -import { formatDateTime, getToday } from "../../utils/formatDateTime"; - -async function createAssignedTasks(): Promise { - try { - const participants = await prisma.participant.findMany({ - where: { - OR: [{ departure_date: null }, { departure_date: { gt: getToday() } }], - }, - }); - - const requiredTasks = await prisma.task.findMany({ - where: { task_type: TaskType.REQUIRED }, - }); - - const weekdayOffsets: { [key in DayOfWeek]: number } = { - MONDAY: 0, - TUESDAY: 1, - WEDNESDAY: 2, - THURSDAY: 3, - FRIDAY: 4, - SATURDAY: 5, - SUNDAY: 6, - }; - - const mondayOfCurrentWeek = new Date(); - - await Promise.all( - participants.map(async (participant) => { - return Promise.all( - requiredTasks.map(async (task) => { - if ( - task.recurrence_preference === - RecurrenceFrequency.EVERY_SELECTED_DAYS || - task.recurrence_preference === RecurrenceFrequency.DAILY - ) { - await Promise.all( - task.repeat_days.map(async (repeatDay) => { - const offset = weekdayOffsets[repeatDay]; - const taskDate = new Date(mondayOfCurrentWeek); - taskDate.setDate(mondayOfCurrentWeek.getDate() + offset); - let startDate: Date; - let endDate: Date; - if (task.time_preference === TimeOption.SPECIFIC) { - startDate = new Date(taskDate); - endDate = new Date(taskDate); - if (task.start_time) { - const [hours, minutes] = task.start_time - .split(":") - .map(Number); - startDate.setHours(hours, minutes, 0, 0); - } - if (task.end_time) { - const [hours, minutes] = task.end_time - .split(":") - .map(Number); - endDate.setHours(hours, minutes, 0, 0); - } - } else { - startDate = new Date(taskDate); - startDate.setHours(0, 0, 0, 0); - endDate = new Date(taskDate); - endDate.setHours(23, 59, 0, 0); - } - const startDateString = formatDateTime(startDate, true); - const endDateString = formatDateTime(endDate, true); - await prisma.assignedTask.create({ - data: { - participant_id: participant.participant_id, - task_name: task.task_name, - task_type: task.task_type, - start_date: startDateString, - end_date: endDateString, - marillac_bucks_addition: task.marillac_bucks_addition, - marillac_bucks_deduction: task.marillac_bucks_deduction, - comment: task.comment, - }, - }); - }) - ); - } else if ( - task.recurrence_preference === - RecurrenceFrequency.ANY_SELECTED_DAYS - ) { - const firstDayOffset = weekdayOffsets[task.repeat_days[0]]; - const lastDayOffset = - weekdayOffsets[task.repeat_days[task.repeat_days.length - 1]]; - - const startDate = new Date(mondayOfCurrentWeek); - startDate.setDate(mondayOfCurrentWeek.getDate() + firstDayOffset); - startDate.setHours(0, 0, 0, 0); - - const endDate = new Date(mondayOfCurrentWeek); - endDate.setDate(mondayOfCurrentWeek.getDate() + lastDayOffset); - endDate.setHours(23, 59, 0, 0); - - const startDateString = formatDateTime(startDate, true); - const endDateString = formatDateTime(endDate, true); - - await prisma.assignedTask.create({ - data: { - participant_id: participant.participant_id, - task_name: task.task_name, - task_type: task.task_type, - start_date: startDateString, - end_date: endDateString, - marillac_bucks_addition: task.marillac_bucks_addition, - marillac_bucks_deduction: task.marillac_bucks_deduction, - comment: task.comment, - }, - }); - } - }) - ); - }) - ); - return true; - } catch (err) { - console.error(err); - return false; - } -} - -export default createAssignedTasks; diff --git a/backend/crons/scripts/expireAdminAnnouncements.ts b/backend/crons/scripts/expireAdminAnnouncements.ts deleted file mode 100644 index 699333dc..00000000 --- a/backend/crons/scripts/expireAdminAnnouncements.ts +++ /dev/null @@ -1,22 +0,0 @@ -import prisma from "../../prisma"; - -async function expireAdminAnnouncements(): Promise { - const limit = new Date(Date.now() - 48 * 60 * 60 * 1000).toLocaleString( - "en-ca" - ); - try { - await prisma.announcement.deleteMany({ - where: { - creation_date: { - lt: limit, - }, - }, - }); - return true; - } catch (err) { - console.error(err); - return false; - } -} - -export default expireAdminAnnouncements; diff --git a/backend/crons/scripts/expireAdminNotes.ts b/backend/crons/scripts/expireAdminNotes.ts deleted file mode 100644 index e0e8035b..00000000 --- a/backend/crons/scripts/expireAdminNotes.ts +++ /dev/null @@ -1,22 +0,0 @@ -import prisma from "../../prisma"; - -async function expireAdminNotes(): Promise { - const limit = new Date(Date.now() - 48 * 60 * 60 * 1000).toLocaleDateString( - "en-ca" - ); - try { - await prisma.note.deleteMany({ - where: { - creation_date: { - lt: limit, - }, - }, - }); - return true; - } catch (err) { - console.error(err); - return false; - } -} - -export default expireAdminNotes; diff --git a/backend/crons/scripts/expireAnnouncements.ts b/backend/crons/scripts/expireAnnouncements.ts new file mode 100644 index 00000000..6c985a8d --- /dev/null +++ b/backend/crons/scripts/expireAnnouncements.ts @@ -0,0 +1,17 @@ +import { subDays, startOfDay } from "date-fns"; +import prisma from "../../prisma"; + +// deletes announcements that are older than 7 days ago +async function expireAnnouncements() { + const sevenDaysAgo = subDays(startOfDay(new Date()), 7); + try { + await prisma.announcement.deleteMany({ + where: { date: { lt: sevenDaysAgo } }, + }); + console.log("successfully expired announcements"); + } catch (err) { + console.error(err); + } +} + +export default expireAnnouncements; diff --git a/backend/crons/scripts/expireLoginStreak.ts b/backend/crons/scripts/expireLoginStreak.ts deleted file mode 100644 index afde0944..00000000 --- a/backend/crons/scripts/expireLoginStreak.ts +++ /dev/null @@ -1,39 +0,0 @@ -import prisma from "../../prisma"; - -async function expireLoginStreak() { - try { - const yesterday = `${ - new Date(Date.now() - 86400000).toISOString().split("T")[0] - }T00:00:00Z`; - const today = `${ - new Date(Date.now()).toISOString().split("T")[0] - }T00:00:00Z`; - const participants = await prisma.participant.findMany({ - select: { participant_id: true }, - }); - const updates = participants.map(async ({ participant_id }) => { - const loginToday = await prisma.login.findFirst({ - where: { - participant_id, - login_date: { - in: [yesterday, today], - }, - }, - }); - - if (!loginToday) { - await prisma.participantProgress.update({ - where: { participant_id }, - data: { days_logged_in: 0 }, - }); - console.log(`Reset login streak for participant ${participant_id}`); - } - }); - await Promise.all(updates); - return true; - } catch (err) { - console.error(err); - return false; - } -} -export default expireLoginStreak; diff --git a/backend/crons/scripts/expireNotes.ts b/backend/crons/scripts/expireNotes.ts new file mode 100644 index 00000000..73bea1bc --- /dev/null +++ b/backend/crons/scripts/expireNotes.ts @@ -0,0 +1,17 @@ +import { subDays, startOfDay } from "date-fns"; +import prisma from "../../prisma"; + +// deletes notes that are older than 48 hours ago +async function expireNotes() { + const limit = subDays(startOfDay(new Date()), 2); + try { + await prisma.note.deleteMany({ + where: { date: { lt: limit } }, + }); + console.log("successfully expired notes"); + } catch (err) { + console.error(err); + } +} + +export default expireNotes; diff --git a/backend/crons/scripts/generateDataReport.ts b/backend/crons/scripts/generateDataReport.ts deleted file mode 100644 index 6cfaaddc..00000000 --- a/backend/crons/scripts/generateDataReport.ts +++ /dev/null @@ -1,289 +0,0 @@ -import prisma from "../../prisma"; - -interface DataReportParams { - startDate: string; // Format: YYYY-MM-DD - endDate: string; // Format: YYYY-MM-DD - outputPath?: string; -} - -interface PraiseWithRaiseTask { - participant_id: number; - task_name: string; - task_status: string; - date: string; - value: number; - comments: string | null; -} - -interface ParticipantInfo { - participant_id: number; - account_creation_date: string; - account_removal_date: string | null; -} - -interface FinancialInfo { - participant_id: number; - transaction_date: string; - transaction_type: string; - amount: number; -} - -interface BadgeInfo { - participant_id: number; - issue_date: string; - badge_earned: string; - level: number; - description: string; -} - -interface LoginStats { - participant_id: number; - login_date: string; -} - -export interface DataReport { - reportPeriod: string; - startDate: string; - endDate: string; - generatedAt: string; - praiseWithRaiseTasks: PraiseWithRaiseTask[]; - participantInfo: ParticipantInfo[]; - financialInfo: FinancialInfo[]; - badges: BadgeInfo[]; - loginStats: LoginStats[]; -} - -// Main function to generate a json for data report -export async function generateDataReport( - params: DataReportParams -): Promise { - try { - const startDateString = params.startDate; - const endDateString = params.endDate; - - // Validate date format and validity - const dateRegex = /^\d{4}-\d{2}-\d{2}$/; - if (!dateRegex.test(startDateString) || !dateRegex.test(endDateString)) { - throw new Error("Invalid date format. Use YYYY-MM-DD format."); - } - - // Validate that dates are actually valid dates - const startDateObj = new Date(`${startDateString}T00:00:00.000Z`); - const endDateObj = new Date(`${endDateString}T00:00:00.000Z`); - - // Check if the date string actually represents the same date when parsed - if ( - startDateObj.toISOString().slice(0, 10) !== startDateString || - endDateObj.toISOString().slice(0, 10) !== endDateString - ) { - throw new Error( - "Invalid date values. Please provide valid dates in YYYY-MM-DD format." - ); - } - - if ( - Number.isNaN(startDateObj.getTime()) || - Number.isNaN(endDateObj.getTime()) - ) { - throw new Error( - "Invalid date values. Please provide valid dates in YYYY-MM-DD format." - ); - } - - // Validate that start date is before or equal to end date - if (startDateObj > endDateObj) { - throw new Error("Start date must be before or equal to end date."); - } - - console.log( - `Generating report from ${startDateString} to ${endDateString}` - ); - - // 1. Praise With A Raise Tasks - from AssignedTask table - const praiseWithRaiseTasks = await prisma.assignedTask.findMany({ - where: { - start_date: { - gte: startDateString, - lte: endDateString, - }, - }, - select: { - participant_id: true, - task_name: true, - task_status: true, - start_date: true, - marillac_bucks_addition: true, - comment: true, - }, - }); - - // 2. Participant Information - from Participant table - const participantInfo = await prisma.participant.findMany({ - where: { - OR: [ - { - account_creation_date: { - gte: startDateString, - lte: endDateString, - }, - }, - { - account_removal_date: { - gte: startDateString, - lte: endDateString, - }, - }, - ], - }, - select: { - participant_id: true, - account_creation_date: true, - account_removal_date: true, - }, - }); - - // 3. Financial Information - from Transaction table - const financialInfo = await prisma.transaction.findMany({ - where: { - transaction_date: { - gte: startDateString, - lte: endDateString, - }, - }, - select: { - participant_id: true, - transaction_date: true, - transaction_type: true, - marillac_bucks: true, - }, - }); - - // 4. Badges - from EarnedBadge table - const badges = await prisma.earnedBadge.findMany({ - where: { - date_received: { - gte: startDateString, - lte: endDateString, - }, - }, - select: { - participant_id: true, - date_received: true, - name: true, - level: true, - description: true, - }, - }); - - // 5. Login Stats - from Login table - const loginStats = await prisma.login.findMany({ - where: { - login_date: { - gte: startDateString, - lte: endDateString, - }, - }, - select: { - participant_id: true, - login_date: true, - }, - }); - - // Format the data - const report: DataReport = { - reportPeriod: `Custom report (${startDateString} to ${endDateString})`, - startDate: startDateString, - endDate: endDateString, - generatedAt: new Date().toISOString(), - praiseWithRaiseTasks: praiseWithRaiseTasks.map((task) => ({ - participant_id: task.participant_id, - task_name: task.task_name, - task_status: task.task_status, - date: task.start_date, - value: task.marillac_bucks_addition, - comments: task.comment, - })), - participantInfo: participantInfo.map((participant) => ({ - participant_id: participant.participant_id, - account_creation_date: participant.account_creation_date, - account_removal_date: participant.account_removal_date, - })), - financialInfo: financialInfo.map((transaction) => ({ - participant_id: transaction.participant_id, - transaction_date: transaction.transaction_date, - transaction_type: transaction.transaction_type, - amount: transaction.marillac_bucks, - })), - badges: badges.map((badge) => ({ - participant_id: badge.participant_id, - issue_date: badge.date_received, - badge_earned: badge.name, - level: badge.level, - description: badge.description, - })), - loginStats: loginStats.map((login) => ({ - participant_id: login.participant_id, - login_date: login.login_date, - })), - }; - - // Log summary statistics - console.log(`Report data for (${startDateString} to ${endDateString}):`); - console.log(`- Tasks: ${report.praiseWithRaiseTasks.length}`); - console.log(`- Participant Info Records: ${report.participantInfo.length}`); - console.log(`- Financial Transactions: ${report.financialInfo.length}`); - console.log(`- Badges Earned: ${report.badges.length}`); - console.log(`- Login Records: ${report.loginStats.length}`); - - // save to file if outputPath is provided - if (params.outputPath) { - const fs = await import("fs/promises"); - await fs.writeFile(params.outputPath, JSON.stringify(report, null, 2)); - console.log(`Report saved to: ${params.outputPath}`); - } - - return report; - } catch (err) { - console.error( - `Error generating data report (${params.startDate} to ${params.endDate}):`, - err - ); - return null; - } -} - -// Helper function to calculate date ranges -function calculateDateRange(period: "week" | "month"): { - startDate: string; - endDate: string; -} { - const now = new Date(); - const startDate = new Date(); - - if (period === "week") { - startDate.setDate(now.getDate() - 7); - } else if (period === "month") { - startDate.setMonth(now.getMonth() - 1); - } - - return { - startDate: startDate.toLocaleDateString("en-ca"), - endDate: now.toLocaleDateString("en-ca"), - }; -} - -// Wrapper functions for cron jobs -export async function generateWeeklyReport(): Promise { - const { startDate, endDate } = calculateDateRange("week"); - const report = await generateDataReport({ startDate, endDate }); - return report !== null; -} - -export async function generateMonthlyReport(): Promise { - const { startDate, endDate } = calculateDateRange("month"); - const report = await generateDataReport({ startDate, endDate }); - return report !== null; -} - -// Export the main function for generating a data report by default -export default generateDataReport; diff --git a/backend/crons/scripts/generateDataReportCSV.ts b/backend/crons/scripts/generateDataReportCSV.ts deleted file mode 100644 index c1c383d0..00000000 --- a/backend/crons/scripts/generateDataReportCSV.ts +++ /dev/null @@ -1,210 +0,0 @@ -import path from "path"; -import fs from "fs/promises"; -import { generateDataReport, DataReport } from "./generateDataReport"; - -// Convert JSON data to CSV format -function jsonToCsv(data: object[], headers: string[]): string { - if (data.length === 0) return `${headers.join(",")}\n`; - - const csvRows = [headers.join(",")]; - - const rows = data.map((row) => { - const values = headers.map((header) => { - const value = (row as Record)[header]; - // Escape commas and quotes in CSV - if ( - typeof value === "string" && - (value.includes(",") || value.includes('"')) - ) { - return `"${value.replace(/"/g, '""')}"`; - } - return value ?? ""; - }); - return values.join(","); - }); - csvRows.push(...rows); - - return `${csvRows.join("\n")}\n`; -} - -// Generate a single comprehensive CSV with all data types -function generateComprehensiveCSV(report: DataReport): string { - const csvSections: string[] = []; - - // Report header information - csvSections.push(`Report Period,${report.reportPeriod}`); - csvSections.push(`Generated At,${report.generatedAt}`); - csvSections.push(""); // Empty line - - // 1. Praise With A Raise Tasks Section - csvSections.push("=== PRAISE WITH A RAISE TASKS ==="); - if (report.praiseWithRaiseTasks.length > 0) { - const tasksCSV = jsonToCsv(report.praiseWithRaiseTasks, [ - "participant_id", - "task_name", - "task_status", - "date", - "value", - "comments", - ]); - csvSections.push(tasksCSV); - } else { - csvSections.push("No tasks found for this period"); - csvSections.push(""); - } - - // 2. Participant Information Section - csvSections.push("=== PARTICIPANT INFORMATION ==="); - if (report.participantInfo.length > 0) { - const participantsCSV = jsonToCsv(report.participantInfo, [ - "participant_id", - "account_creation_date", - "account_removal_date", - ]); - csvSections.push(participantsCSV); - } else { - csvSections.push("No participant changes found for this period"); - csvSections.push(""); - } - - // 3. Financial Information Section - csvSections.push("=== FINANCIAL TRANSACTIONS ==="); - if (report.financialInfo.length > 0) { - const financialCSV = jsonToCsv(report.financialInfo, [ - "participant_id", - "transaction_date", - "transaction_type", - "amount", - ]); - csvSections.push(financialCSV); - } else { - csvSections.push("No financial transactions found for this period"); - csvSections.push(""); - } - - // 4. Badges Section - csvSections.push("=== BADGES EARNED ==="); - if (report.badges.length > 0) { - const badgesCSV = jsonToCsv(report.badges, [ - "participant_id", - "issue_date", - "badge_earned", - "level", - "description", - ]); - csvSections.push(badgesCSV); - } else { - csvSections.push("No badges earned for this period"); - csvSections.push(""); - } - - // 5. Login Statistics Section - csvSections.push("=== LOGIN STATISTICS ==="); - if (report.loginStats.length > 0) { - const loginsCSV = jsonToCsv(report.loginStats, [ - "participant_id", - "login_date", - ]); - csvSections.push(loginsCSV); - } else { - csvSections.push("No login records found for this period"); - csvSections.push(""); - } - - // Summary Section - csvSections.push("=== SUMMARY ==="); - csvSections.push("Data Type,Count"); - csvSections.push( - `Praise With A Raise Tasks,${report.praiseWithRaiseTasks.length}` - ); - csvSections.push(`Participant Info Records,${report.participantInfo.length}`); - csvSections.push(`Financial Transactions,${report.financialInfo.length}`); - csvSections.push(`Badges Earned,${report.badges.length}`); - csvSections.push(`Login Records,${report.loginStats.length}`); - - return csvSections.join("\n"); -} - -// Helper function to calculate date ranges -function calculateDateRange(period: "week" | "month"): { - startDate: string; - endDate: string; -} { - const now = new Date(); - const startDate = new Date(); - - if (period === "week") { - startDate.setDate(now.getDate() - 7); - } else if (period === "month") { - startDate.setMonth(now.getMonth() - 1); - } - - return { - startDate: startDate.toLocaleDateString("en-ca"), - endDate: now.toLocaleDateString("en-ca"), - }; -} - -export async function generateWeeklyReportCSV(): Promise { - try { - const reportsDir = path.join(__dirname, "../../../reports"); - await fs.mkdir(reportsDir, { recursive: true }); - - const timestamp = new Date().toISOString().replace(/[:.]/g, "-"); - const { startDate, endDate } = calculateDateRange("week"); - const report = await generateDataReport({ startDate, endDate }); - - if (!report) return null; - - // Generate single comprehensive CSV file - const filename = `weekly-report-${timestamp}.csv`; - const csvContent = generateComprehensiveCSV(report); - - const filePath = path.join(reportsDir, filename); - await fs.writeFile(filePath, csvContent); - - // Also save the complete JSON report as backup - await fs.writeFile( - path.join(reportsDir, `weekly-report-${timestamp}-complete.json`), - JSON.stringify(report, null, 2) - ); - - console.log(`Weekly CSV report saved to: ${filePath}`); - return csvContent; - } catch (error) { - console.error("Error generating weekly CSV report:", error); - return null; - } -} - -export async function generateMonthlyReportCSV(): Promise { - try { - const reportsDir = path.join(__dirname, "../../../reports"); - await fs.mkdir(reportsDir, { recursive: true }); - - const timestamp = new Date().toISOString().replace(/[:.]/g, "-"); - const { startDate, endDate } = calculateDateRange("month"); - const report = await generateDataReport({ startDate, endDate }); - - if (!report) return null; - - // Generate single comprehensive CSV file - const filename = `monthly-report-${timestamp}.csv`; - const csvContent = generateComprehensiveCSV(report); - - const filePath = path.join(reportsDir, filename); - await fs.writeFile(filePath, csvContent); - - // Also save the complete JSON report as backup - await fs.writeFile( - path.join(reportsDir, `monthly-report-${timestamp}-complete.json`), - JSON.stringify(report, null, 2) - ); - - console.log(`Monthly CSV report saved to: ${filePath}`); - return csvContent; - } catch (error) { - console.error("Error generating monthly CSV report:", error); - return null; - } -} diff --git a/backend/crons/scripts/resetLoginStreak.ts b/backend/crons/scripts/resetLoginStreak.ts new file mode 100644 index 00000000..113579bd --- /dev/null +++ b/backend/crons/scripts/resetLoginStreak.ts @@ -0,0 +1,40 @@ +import { startOfDay, endOfDay } from "date-fns"; +import { LOGIN } from "../../constants/systemBadges"; +import db from "../../prisma"; + +// checks whether or not a participant has logged in today and resets their progress for the login badge if not +async function resetLoginStreak() { + try { + const participants = await db.participant.findMany({ + where: { + OR: [{ departure: null }, { departure: { gt: endOfDay(new Date()) } }], + }, + select: { pid: true }, + }); + + const resets = participants.map(async ({ pid }) => { + const login = await db.loginHistory.findFirst({ + where: { + pid, + date: { + gte: startOfDay(new Date()), + lte: endOfDay(new Date()), + }, + }, + }); + + if (!login) { + await db.badgeLevelProgress.updateMany({ + where: { pid, name: LOGIN }, + data: { progress: 0 }, + }); + } + }); + + await Promise.all(resets); + console.log("successfully validated login streaks"); + } catch (err) { + console.error(err); + } +} +export default resetLoginStreak; diff --git a/backend/crons/scripts/sendMonthlyReport.ts b/backend/crons/scripts/sendMonthlyReport.ts new file mode 100644 index 00000000..277e013f --- /dev/null +++ b/backend/crons/scripts/sendMonthlyReport.ts @@ -0,0 +1,33 @@ +import db from "../../prisma"; +import { sendReportEmail } from "../../utils/mailUtils"; +import { + formatDataReport, + generateDataReport, + ReportType, +} from "../../utils/reportUtils"; + +// collects data from the past month, generates a csv report and sends the report to marillac admin via email +async function sendMonthlyReport() { + try { + const report = await generateDataReport(ReportType.MONTHLY); + if (report === null) throw new Error("unable to generate monthly report"); + + const csvContent = formatDataReport(report); + + const recipients = await db.reportRecipient.findMany({ + where: { monthly: true }, + }); + + await Promise.all( + recipients.map(async (recipient) => { + await sendReportEmail(recipient.email, csvContent, ReportType.MONTHLY); + }) + ); + + // if necessary, we can clear relevant data that is already recorded in the generated report + console.log("successfully sent monthly report to recipients"); + } catch (err) { + console.error(err); + } +} +export default sendMonthlyReport; diff --git a/backend/crons/scripts/sendReportEmails.ts b/backend/crons/scripts/sendReportEmails.ts deleted file mode 100644 index 2c0ef86d..00000000 --- a/backend/crons/scripts/sendReportEmails.ts +++ /dev/null @@ -1,182 +0,0 @@ -import nodemailer from "nodemailer"; -import prisma from "../../prisma"; -import { - generateWeeklyReportCSV, - generateMonthlyReportCSV, -} from "./generateDataReportCSV"; -import { formatDateTime } from "../../utils/formatDateTime"; - -// Configure email transporter -const transporter = nodemailer.createTransport({ - host: process.env.SMTP_HOST || "smtp.gmail.com", - port: parseInt(process.env.SMTP_PORT || "587", 10), - secure: false, - auth: { - user: process.env.SMTP_USER, - pass: process.env.SMTP_PASSWORD, - }, -}); -/* eslint-disable */ -async function sendReportEmail( - to: string, - subject: string, - csvContent: string, - reportPeriod: string, - periodType: "weekly" | "monthly" = "weekly" -): Promise { - try { - const timestamp = new Date().toISOString().replace(/[:.]/g, "-"); - const filename = `${periodType}-report-${timestamp}.csv`; - - await transporter.sendMail({ - from: process.env.SMTP_FROM || process.env.SMTP_USER, - to, - subject, - text: `Please find the ${reportPeriod} attached as a CSV file.\n\nThis report contains comprehensive data for the reporting period.\n\nBest regards,\nMarillac Place System`, - html: ` - - -

${reportPeriod} - Marillac Place

-

Please find the ${reportPeriod} attached as a CSV file.

-

This report contains comprehensive data including:

-
    -
  • Praise With A Raise Tasks
  • -
  • Participant Information
  • -
  • Financial Transactions
  • -
  • Badges Earned
  • -
  • Login Statistics
  • -
-

Best regards,
Marillac Place System

- - - `, - attachments: [ - { - filename, - content: csvContent, - contentType: "text/csv", - }, - ], - }); - return true; - } catch (err) { - console.error(`Error sending email to ${to}:`, err); - return false; - } -} - -export async function sendWeeklyReports(): Promise { - try { - // Get all recipients who want weekly reports - const recipients = await (prisma as any).reportRecipient.findMany({ - where: { weekly: true }, - }); - - if (recipients.length === 0) { - console.log("No weekly report recipients found"); - return true; - } - - console.log(`Found ${recipients.length} recipient(s) for weekly reports`); - - // Generate report - const csvContent = await generateWeeklyReportCSV(); - if (!csvContent) { - console.error("Failed to generate weekly report CSV"); - return false; - } - - const today = formatDateTime(new Date(), false); - const reportPeriod = `Weekly Report (${today})`; - - // Send emails to all recipients - const emailResults = await Promise.all( - recipients.map(async (recipient: any) => { - const sent = await sendReportEmail( - recipient.email, - `Weekly Report - ${today}`, - csvContent, - reportPeriod, - "weekly" - ); - - if (sent) { - // Update last report sent date - await (prisma as any).reportRecipient.update({ - where: { report_recipient_id: recipient.report_recipient_id }, - data: { last_report_sent: today }, - }); - console.log(`✅ Weekly report sent to ${recipient.email}`); - return true; - } - console.error(`❌ Failed to send weekly report to ${recipient.email}`); - return false; - }) - ); - - const successCount = emailResults.filter(Boolean).length; - console.log(`Weekly reports sent: ${successCount}/${recipients.length}`); - return successCount > 0; - } catch (err) { - console.error("Error sending weekly reports:", err); - return false; - } -} - -export async function sendMonthlyReports(): Promise { - try { - // Get all recipients who want monthly reports - const recipients = await (prisma as any).reportRecipient.findMany({ - where: { monthly: true }, - }); - - if (recipients.length === 0) { - console.log("No monthly report recipients found"); - return true; - } - - console.log(`Found ${recipients.length} recipient(s) for monthly reports`); - - // Generate report - const csvContent = await generateMonthlyReportCSV(); - if (!csvContent) { - console.error("Failed to generate monthly report CSV"); - return false; - } - - const today = formatDateTime(new Date(), false); - const reportPeriod = `Monthly Report (${today})`; - - // Send emails to all recipients - const emailResults = await Promise.all( - recipients.map(async (recipient: any) => { - const sent = await sendReportEmail( - recipient.email, - `Monthly Report - ${today}`, - csvContent, - reportPeriod, - "monthly" - ); - - if (sent) { - // Update last report sent date - await (prisma as any).reportRecipient.update({ - where: { report_recipient_id: recipient.report_recipient_id }, - data: { last_report_sent: today }, - }); - console.log(`✅ Monthly report sent to ${recipient.email}`); - return true; - } - console.error(`❌ Failed to send monthly report to ${recipient.email}`); - return false; - }) - ); - - const successCount = emailResults.filter(Boolean).length; - console.log(`Monthly reports sent: ${successCount}/${recipients.length}`); - return successCount > 0; - } catch (err) { - console.error("Error sending monthly reports:", err); - return false; - } -} diff --git a/backend/crons/scripts/sendWeeklyReport.ts b/backend/crons/scripts/sendWeeklyReport.ts new file mode 100644 index 00000000..cf0921c2 --- /dev/null +++ b/backend/crons/scripts/sendWeeklyReport.ts @@ -0,0 +1,32 @@ +import db from "../../prisma"; +import { sendReportEmail } from "../../utils/mailUtils"; +import { + formatDataReport, + generateDataReport, + ReportType, +} from "../../utils/reportUtils"; + +// collects data from the past week, generates a csv report and sends the report to marillac admin via email +async function sendWeeklyReport() { + try { + const report = await generateDataReport(ReportType.WEEKLY); + if (report === null) throw new Error("unable to generate weekly report"); + + const csvContent = formatDataReport(report); + + const recipients = await db.reportRecipient.findMany({ + where: { weekly: true }, + }); + + await Promise.all( + recipients.map(async (recipient) => { + await sendReportEmail(recipient.email, csvContent, ReportType.WEEKLY); + }) + ); + + console.log("successfully sent weekly report to recipients"); + } catch (err) { + console.error(err); + } +} +export default sendWeeklyReport; diff --git a/backend/gql/middleware.ts b/backend/gql/middleware.ts new file mode 100644 index 00000000..d78ae479 --- /dev/null +++ b/backend/gql/middleware.ts @@ -0,0 +1,149 @@ +import jwt from "jsonwebtoken"; +import { GraphQLResolveInfo } from "graphql"; +import * as ROLES from "../constants/roles"; + +type ResolverFunction = ( + parent: unknown, + args: Record, + context: { req: { headers: { authorization?: string } } }, + info: GraphQLResolveInfo +) => Promise | unknown; + +interface JWTPayload { + role: string; + [key: string]: unknown; +} + +function verifyRole(allowedRoles: string[]) { + return async function verifyRoleMiddleware( + resolve: ResolverFunction, + parent: unknown, + args: Record, + context: { req: { headers: { authorization?: string } } }, + info: GraphQLResolveInfo + ) { + const authHeader = context.req.headers.authorization; + if (!authHeader || !authHeader.startsWith("Bearer")) { + throw new Error("missing or invalid authorization header"); + } + + try { + const TOKEN = authHeader.split(" ")[1]; + const JWT_SECRET = process.env.JWT_SECRET ?? ""; + const DATA = jwt.verify(TOKEN, JWT_SECRET) as JWTPayload; + const { role, pid } = DATA; + + if (!allowedRoles.includes(role)) { + throw new Error("request is not authorized"); + } + + if (role === ROLES.PARTICIPANT) { + const requestedPid = args.pid; + if (!requestedPid || requestedPid !== pid) { + throw new Error("participant is not authenticated"); + } + } + + return resolve(parent, args, context, info); + } catch (err) { + throw new Error("invalid or expired token"); + } + }; +} + +export default function getMiddleware() { + const middleware = { + Query: { + getNotes: verifyRole([ROLES.ADMIN, ROLES.RELIEF]), + getReportRecipients: verifyRole([ROLES.ADMIN]), + getAnnouncementsFromToday: verifyRole([ROLES.ADMIN, ROLES.RELIEF]), + getAnnouncementsSentToParticipants: verifyRole([ + ROLES.ADMIN, + ROLES.RELIEF, + ]), + getReceivedAnnouncements: verifyRole([ + ROLES.ADMIN, + ROLES.RELIEF, + ROLES.PARTICIPANT, + ]), + getEarningGoal: verifyRole([ + ROLES.ADMIN, + ROLES.RELIEF, + ROLES.PARTICIPANT, + ]), + getTasksByType: verifyRole([ROLES.ADMIN, ROLES.RELIEF]), + getCustomBadges: verifyRole([ROLES.ADMIN, ROLES.RELIEF]), + getWeeklyEarnings: verifyRole([ + ROLES.ADMIN, + ROLES.RELIEF, + ROLES.PARTICIPANT, + ]), + getCurrentParticipants: verifyRole([ROLES.ADMIN, ROLES.RELIEF]), + getPastParticipants: verifyRole([ROLES.ADMIN, ROLES.RELIEF]), + getSystemBadges: verifyRole([ROLES.ADMIN, ROLES.RELIEF]), + getNumberOfAssignedTasksByRoom: verifyRole([ROLES.ADMIN, ROLES.RELIEF]), + getAssignedTasksForToday: verifyRole([ + ROLES.ADMIN, + ROLES.RELIEF, + ROLES.PARTICIPANT, + ]), + getAssignedTasksByWeek: verifyRole([ + ROLES.ADMIN, + ROLES.RELIEF, + ROLES.PARTICIPANT, + ]), + hasCompletedAllRequiredTasks: verifyRole([ + ROLES.ADMIN, + ROLES.RELIEF, + ROLES.PARTICIPANT, + ]), + getEarnedCustomBadges: verifyRole([ + ROLES.ADMIN, + ROLES.RELIEF, + ROLES.PARTICIPANT, + ]), + getAchievedBadgeLevels: verifyRole([ + ROLES.ADMIN, + ROLES.RELIEF, + ROLES.PARTICIPANT, + ]), + getBadgeLevelProgress: verifyRole([ + ROLES.ADMIN, + ROLES.RELIEF, + ROLES.PARTICIPANT, + ]), + }, + Mutation: { + createNote: verifyRole([ROLES.ADMIN, ROLES.RELIEF]), + deleteNote: verifyRole([ROLES.ADMIN, ROLES.RELIEF]), + createReportRecipient: verifyRole([ROLES.ADMIN]), + updateReportRecipient: verifyRole([ROLES.ADMIN]), + deleteReportRecipient: verifyRole([ROLES.ADMIN]), + createAnnouncement: verifyRole([ROLES.ADMIN, ROLES.RELIEF]), + updateAnnouncement: verifyRole([ROLES.ADMIN, ROLES.RELIEF]), + deleteAnnouncement: verifyRole([ROLES.ADMIN, ROLES.RELIEF]), + updateReceivedAnnouncement: verifyRole([ROLES.PARTICIPANT]), + createEarningGoal: verifyRole([ROLES.PARTICIPANT]), + updateEarningGoal: verifyRole([ROLES.PARTICIPANT]), + createTask: verifyRole([ROLES.ADMIN, ROLES.RELIEF]), + deleteTask: verifyRole([ROLES.ADMIN, ROLES.RELIEF]), + createCustomBadge: verifyRole([ROLES.ADMIN]), + updateCustomBadge: verifyRole([ROLES.ADMIN]), + deleteCustomBadge: verifyRole([ROLES.ADMIN]), + createParticipant: verifyRole([ROLES.ADMIN, ROLES.RELIEF]), + updateParticipant: verifyRole([ROLES.ADMIN, ROLES.RELIEF]), + updateBalance: verifyRole([ROLES.ADMIN, ROLES.RELIEF]), + createEarnedCustomBadge: verifyRole([ROLES.ADMIN]), + updateSystemBadge: verifyRole([ROLES.ADMIN]), + updateBadgeLevel: verifyRole([ROLES.ADMIN]), + createAssignedTask: verifyRole([ROLES.ADMIN, ROLES.RELIEF]), + updateAssignedTask: verifyRole([ROLES.ADMIN, ROLES.RELIEF]), + updateAssignedTaskStatus: verifyRole([ROLES.ADMIN, ROLES.RELIEF]), + deleteAssignedTask: verifyRole([ROLES.ADMIN, ROLES.RELIEF]), + fetchNewAchievedBadgeLevels: verifyRole([ROLES.PARTICIPANT]), + fetchNewEarnedCustomBadges: verifyRole([ROLES.PARTICIPANT]), + }, + }; + + return middleware; +} diff --git a/backend/gql/resolvers/achievedBadgeLevelResolver.ts b/backend/gql/resolvers/achievedBadgeLevelResolver.ts new file mode 100644 index 00000000..08442538 --- /dev/null +++ b/backend/gql/resolvers/achievedBadgeLevelResolver.ts @@ -0,0 +1,79 @@ +import { AchievedBadgeLevel } from "@prisma/client"; +import db from "../../prisma"; + +const achievedBadgeLevelResolver = { + Query: { + getAchievedBadgeLevels: async ( + _parent: undefined, + { + pid, + }: { + pid: number; + } + ): Promise => { + return db.achievedBadgeLevel.findMany({ + where: { + pid, + badge_level: { + system_badge: { + is_active: true, + }, + }, + }, + include: { + badge_level: { + select: { + system_badge: true, + }, + }, + }, + }); + }, + }, + Mutation: { + fetchNewAchievedBadgeLevels: async ( + _parent: undefined, + { + pid, + }: { + pid: number; + } + ): Promise => { + const achievedBadgeLevels = await db.achievedBadgeLevel.findMany({ + where: { + pid, + notified: false, + badge_level: { + system_badge: { + is_active: true, + }, + }, + }, + include: { + badge_level: { + select: { + system_badge: true, + }, + }, + }, + }); + + await db.achievedBadgeLevel.updateMany({ + where: { + pid, + notified: false, + badge_level: { + system_badge: { + is_active: true, + }, + }, + }, + data: { notified: true }, + }); + + return achievedBadgeLevels; + }, + }, +}; + +export default achievedBadgeLevelResolver; diff --git a/backend/gql/resolvers/announcementResolver.ts b/backend/gql/resolvers/announcementResolver.ts new file mode 100644 index 00000000..d769a4d7 --- /dev/null +++ b/backend/gql/resolvers/announcementResolver.ts @@ -0,0 +1,126 @@ +import { Announcement, Priority } from "@prisma/client"; +import { startOfDay } from "date-fns"; +import db from "../../prisma"; + +const announcementResolver = { + Query: { + getAnnouncementsFromToday: async (): Promise => { + return db.announcement.findMany({ + where: { + date: { gte: startOfDay(new Date()) }, + }, + orderBy: { + date: "desc", + }, + include: { + ReceivedAnnouncement: { + include: { + participant: { + select: { + room: true, + }, + }, + }, + }, + }, + }); + }, + getAnnouncementsSentToParticipants: async ( + _parent: undefined, + { + pids, + }: { + pids: number[]; + } + ): Promise => { + return db.announcement.findMany({ + orderBy: { date: "desc" }, + where: { + ReceivedAnnouncement: { + every: { + pid: { + in: pids, + }, + }, + }, + }, + include: { + ReceivedAnnouncement: true, + }, + }); + }, + }, + Mutation: { + createAnnouncement: async ( + _parent: undefined, + { + priority, + pids, + message, + }: { + priority: Priority; + pids: number[]; + message: string; + } + ): Promise => { + const announcement = await db.announcement.create({ + data: { + priority, + date: new Date(), + message, + }, + }); + + await Promise.all( + pids.map((pid) => + db.receivedAnnouncement.create({ + data: { + pid, + aid: announcement.aid, + }, + }) + ) + ); + + return announcement; + }, + updateAnnouncement: async ( + _parent: undefined, + { + aid, + priority, + message, + }: { + aid: number; + priority?: Priority; + message?: string; + } + ): Promise => { + const updates: Partial = {}; + if (priority !== undefined) updates.priority = priority; + if (message !== undefined) updates.message = message; + + const isEmpty = Object.keys(updates).length === 0; + if (isEmpty) throw new Error("no updates received"); + + return db.announcement.update({ + where: { aid }, + data: updates, + }); + }, + deleteAnnouncement: async ( + _parent: undefined, + { + aid, + }: { + aid: number; + } + ): Promise => { + return db.announcement.delete({ + where: { aid }, + }); + }, + }, +}; + +export default announcementResolver; diff --git a/backend/gql/resolvers/assignedTaskResolver.ts b/backend/gql/resolvers/assignedTaskResolver.ts new file mode 100644 index 00000000..187ec043 --- /dev/null +++ b/backend/gql/resolvers/assignedTaskResolver.ts @@ -0,0 +1,315 @@ +import { AssignedTask, TaskStatus, TaskType } from "@prisma/client"; +import { startOfWeek, endOfWeek, endOfDay, startOfDay } from "date-fns"; +import db from "../../prisma"; +import processEarning from "../../utils/transactionUtils"; +import { updateBadgeLevelProgress } from "../../utils/badgeUtils"; +import { + PERFECT_SCORE_OPTIONAL, + PERFECT_SCORE_REQUIRED, + JACK_OF_ALL_TRADES, + FIRST_GOAL, + INDIVIDUAL_GOAL, +} from "../../constants/systemBadges"; + +const assignedTaskResolver = { + Query: { + getNumberOfAssignedTasksByRoom: async (): Promise => { + const currentParticipants = await db.participant.findMany({ + where: { + OR: [ + { departure: null }, + { departure: { gt: endOfDay(new Date()) } }, + ], + }, + select: { + pid: true, + room: true, + }, + }); + + const currentPids = currentParticipants.map((p) => p.pid); + const pidToRoom = new Map( + currentParticipants.map((p) => [p.pid, p.room]) + ); + + if (currentParticipants.length === 0) return Array(10).fill(0); + + const assignedTaskCounts = await db.assignedTask.groupBy({ + by: ["pid"], + where: { + pid: { in: currentPids }, + status: TaskStatus.ASSIGNED, + }, + _count: { aid: true }, + }); + + const counts = Array(10).fill(0); + assignedTaskCounts.forEach(({ pid, _count: count }) => { + const room = pidToRoom.get(pid); + if (room === undefined) return; + counts[room - 1] += count.aid; + }); + return counts; + }, + getAssignedTasksForToday: async ( + _parent: undefined, + { + pid, + }: { + pid: number; + } + ): Promise => { + return db.assignedTask.findMany({ + where: { + pid, + start_date: { lte: endOfDay(new Date()) }, + end_date: { gte: startOfDay(new Date()) }, + }, + }); + }, + getAssignedTasksByWeek: async ( + _parent: undefined, + { + pid, + weekStart, + }: { + pid: number; + weekStart: Date; + } + ): Promise => { + return db.assignedTask.findMany({ + where: { + pid, + start_date: { lte: endOfWeek(weekStart) }, + end_date: { gte: weekStart }, + }, + }); + }, + hasCompletedAllRequiredTasks: async ( + _parent: undefined, + { + pid, + }: { + pid: number; + } + ): Promise => { + const requiredTasksNotComplete = await db.assignedTask.findMany({ + where: { + pid, + type: TaskType.REQUIRED, + status: { not: TaskStatus.COMPLETE }, + start_date: { lte: endOfWeek(new Date()) }, + end_date: { gte: startOfWeek(new Date()) }, + }, + }); + + return requiredTasksNotComplete.length === 0; + }, + }, + Mutation: { + createAssignedTask: async ( + _parent: undefined, + { + pid, + tid, + name, + type, + value, + penalty, + start_date, + end_date, + comment, + }: { + pid: number; + tid: number; + name: string; + type: TaskType; + value: number; + penalty: number; + start_date: Date; + end_date: Date; + comment?: string; + } + ): Promise => { + return db.assignedTask.create({ + data: { + pid, + tid, + name, + type, + value, + penalty, + start_date, + end_date, + comment, + }, + }); + }, + updateAssignedTask: async ( + _parent: undefined, + { + aid, + pid, + name, + type, + value, + penalty, + start_date, + end_date, + comment, + }: { + aid: number; + pid?: number; + name?: string; + type?: TaskType; + value?: number; + penalty?: number; + start_date?: Date; + end_date?: Date; + comment?: string; + } + ): Promise => { + const updates: Partial = {}; + if (pid !== undefined) updates.pid = pid; + if (name !== undefined) updates.name = name; + if (type !== undefined) updates.type = type; + if (value !== undefined) updates.value = value; + if (penalty !== undefined) updates.penalty = penalty; + if (start_date !== undefined) updates.start_date = start_date; + if (end_date !== undefined) updates.end_date = end_date; + if (comment !== undefined) updates.comment = comment; + + const isEmpty = Object.keys(updates).length === 0; + if (isEmpty) throw new Error("no updates received"); + + return db.assignedTask.update({ + where: { aid }, + data: updates, + }); + }, + updateAssignedTaskStatus: async ( + _parent: undefined, + { + aid, + status, + }: { + aid: number; + status: TaskStatus; + } + ): Promise => { + if (status === TaskStatus.ASSIGNED) { + throw new Error("invalid status update"); + } else if (status === TaskStatus.COMPLETE) { + const assignedTask = await db.assignedTask.findUnique({ + where: { aid }, + }); + if (assignedTask === null) throw new Error("assigned task not found"); + + const reasonForEarning = `Required task ${assignedTask.name} completed!`; + await processEarning( + assignedTask.pid, + assignedTask.value, + reasonForEarning + ); + + if (assignedTask.type === TaskType.REQUIRED) { + const weeklyRequiredTasksNotComplete = await db.assignedTask.findMany( + { + where: { + pid: assignedTask.pid, + status: { not: TaskStatus.COMPLETE }, + start_date: { lte: endOfWeek(new Date()) }, + end_date: { gte: startOfWeek(new Date()) }, + type: TaskType.REQUIRED, + }, + } + ); + + if (weeklyRequiredTasksNotComplete.length === 1) { + await updateBadgeLevelProgress( + PERFECT_SCORE_REQUIRED, + assignedTask.pid, + 1 + ); + } + } else if (assignedTask.type === TaskType.OPTIONAL) { + const countCompletedOptionalTasks = await db.assignedTask.count({ + where: { + pid: assignedTask.pid, + start_date: { lte: endOfWeek(new Date()) }, + end_date: { gte: startOfWeek(new Date()) }, + type: TaskType.OPTIONAL, + status: TaskStatus.COMPLETE, + }, + }); + + if (countCompletedOptionalTasks === 2) { + await updateBadgeLevelProgress( + PERFECT_SCORE_OPTIONAL, + assignedTask.pid, + 1 + ); + } + } else if (assignedTask.type === TaskType.INDIVIDUAL_GOAL) { + const individualGoalTasksNotComplete = await db.assignedTask.findMany( + { + where: { + pid: assignedTask.pid, + type: TaskType.INDIVIDUAL_GOAL, + status: { not: TaskStatus.COMPLETE }, + start_date: { lte: endOfWeek(new Date()) }, + end_date: { gte: startOfWeek(new Date()) }, + }, + } + ); + + if (individualGoalTasksNotComplete.length === 1) { + await updateBadgeLevelProgress( + INDIVIDUAL_GOAL, + assignedTask.pid, + 1 + ); + } + + await updateBadgeLevelProgress(FIRST_GOAL, assignedTask.pid, 1); + } + + const hasPreviouslyCompleted = await db.assignedTask + .findFirst({ + where: { + tid: assignedTask.tid, + status: TaskStatus.COMPLETE, + pid: assignedTask.pid, + }, + }) + .then((task) => task !== null); + if (!hasPreviouslyCompleted) { + await updateBadgeLevelProgress( + JACK_OF_ALL_TRADES, + assignedTask.pid, + 1 + ); + } + } + + return db.assignedTask.update({ + where: { aid }, + data: { status }, + }); + }, + deleteAssignedTask: async ( + _parent: undefined, + { + aid, + }: { + aid: number; + } + ): Promise => { + return db.assignedTask.delete({ + where: { aid }, + }); + }, + }, +}; + +export default assignedTaskResolver; diff --git a/backend/gql/resolvers/badgeLevelProgressResolver.ts b/backend/gql/resolvers/badgeLevelProgressResolver.ts new file mode 100644 index 00000000..545df807 --- /dev/null +++ b/backend/gql/resolvers/badgeLevelProgressResolver.ts @@ -0,0 +1,28 @@ +import { BadgeLevelProgress } from "@prisma/client"; +import db from "../../prisma"; + +const badgeLevelProgressResolver = { + Query: { + getBadgeLevelProgress: async ( + _parent: undefined, + { + pid, + }: { + pid: number; + } + ): Promise => { + return db.badgeLevelProgress.findMany({ + where: { pid, badge_level: { system_badge: { is_active: true } } }, + include: { + badge_level: { + include: { + system_badge: true, + }, + }, + }, + }); + }, + }, +}; + +export default badgeLevelProgressResolver; diff --git a/backend/gql/resolvers/badgeLevelResolver.ts b/backend/gql/resolvers/badgeLevelResolver.ts new file mode 100644 index 00000000..7e4fc6a6 --- /dev/null +++ b/backend/gql/resolvers/badgeLevelResolver.ts @@ -0,0 +1,38 @@ +import { BadgeLevel, Level } from "@prisma/client"; +import db from "../../prisma"; +import { validateBadgeLevelProgress } from "../../utils/badgeUtils"; + +const badgeLevelResolver = { + Mutation: { + updateBadgeLevel: async ( + _parent: undefined, + { + name, + level, + value, + benchmark, + }: { + name: string; + level: Level; + value?: number; + benchmark?: number; + } + ): Promise => { + const updates: Partial = {}; + if (value !== undefined) updates.value = value; + if (benchmark !== undefined) updates.benchmark = benchmark; + + const isEmpty = Object.keys(updates).length === 0; + if (isEmpty) throw new Error("no updates received"); + + await validateBadgeLevelProgress(name); + + return db.badgeLevel.update({ + where: { name_level: { name, level } }, + data: updates, + }); + }, + }, +}; + +export default badgeLevelResolver; diff --git a/backend/gql/resolvers/customBadgeResolver.ts b/backend/gql/resolvers/customBadgeResolver.ts new file mode 100644 index 00000000..9c69e49f --- /dev/null +++ b/backend/gql/resolvers/customBadgeResolver.ts @@ -0,0 +1,69 @@ +import { CustomBadge, Icon } from "@prisma/client"; +import db from "../../prisma"; + +const customBadgeResolver = { + Query: { + getCustomBadges: async (): Promise => { + return db.customBadge.findMany({ orderBy: { name: "asc" } }); + }, + }, + Mutation: { + createCustomBadge: async ( + _parent: undefined, + { + name, + description, + icon, + }: { + name: string; + description: string; + icon: Icon; + } + ): Promise => { + return db.customBadge.create({ + data: { name, description, icon }, + }); + }, + updateCustomBadge: async ( + _parent: undefined, + { + cid, + name, + icon, + description, + }: { + cid: number; + name?: string; + icon?: Icon; + description?: string; + } + ): Promise => { + const updates: Partial = {}; + if (icon !== undefined) updates.icon = icon; + if (name !== undefined) updates.name = name; + if (description !== undefined) updates.description = description; + + const isEmpty = Object.keys(updates).length === 0; + if (isEmpty) throw new Error("no updates received"); + + return db.customBadge.update({ + where: { cid }, + data: updates, + }); + }, + deleteCustomBadge: async ( + _parent: undefined, + { + cid, + }: { + cid: number; + } + ): Promise => { + return db.customBadge.delete({ + where: { cid }, + }); + }, + }, +}; + +export default customBadgeResolver; diff --git a/backend/gql/resolvers/earnedCustomBadgeResolver.ts b/backend/gql/resolvers/earnedCustomBadgeResolver.ts new file mode 100644 index 00000000..8a080eaa --- /dev/null +++ b/backend/gql/resolvers/earnedCustomBadgeResolver.ts @@ -0,0 +1,68 @@ +import { EarnedCustomBadge, Icon } from "@prisma/client"; +import db from "../../prisma"; +import processEarning from "../../utils/transactionUtils"; + +const earnedCustomBadgeResolver = { + Query: { + getEarnedCustomBadges: async ( + _parent: undefined, + { + pid, + }: { + pid: number; + } + ): Promise => { + return db.earnedCustomBadge.findMany({ + where: { pid }, + }); + }, + }, + Mutation: { + fetchNewEarnedCustomBadges: async ( + _parent: undefined, + { + pid, + }: { + pid: number; + } + ): Promise => { + const earnedCustomBadges = await db.earnedCustomBadge.findMany({ + where: { + pid, + notified: false, + }, + }); + + await db.earnedCustomBadge.updateMany({ + where: { pid, notified: false }, + data: { notified: true }, + }); + + return earnedCustomBadges; + }, + createEarnedCustomBadge: async ( + _parent: undefined, + { + pid, + name, + icon, + description, + value, + }: { + pid: number; + name: string; + icon: Icon; + description: string; + value: number; + } + ): Promise => { + const reasonForEarning = `${name} custom badge earned!`; + await processEarning(pid, value, reasonForEarning); + return db.earnedCustomBadge.create({ + data: { pid, name, icon, description }, + }); + }, + }, +}; + +export default earnedCustomBadgeResolver; diff --git a/backend/gql/resolvers/earningGoalResolver.ts b/backend/gql/resolvers/earningGoalResolver.ts new file mode 100644 index 00000000..8dad2186 --- /dev/null +++ b/backend/gql/resolvers/earningGoalResolver.ts @@ -0,0 +1,55 @@ +import { EarningGoal, GoalAction } from "@prisma/client"; +import db from "../../prisma"; + +const earningGoalResolver = { + Query: { + getEarningGoal: async ( + _parent: undefined, + { pid }: { pid: number } + ): Promise => { + return db.earningGoal.findFirst({ + where: { pid }, + orderBy: [{ date: "desc" }], + }); + }, + }, + Mutation: { + createEarningGoal: async ( + _parent: undefined, + { + pid, + action, + value, + }: { + pid: number; + action: GoalAction; + value: number; + } + ): Promise => { + return db.earningGoal.create({ + data: { pid, action, value }, + }); + }, + updateEarningGoal: async ( + _parent: undefined, + { + pid, + date, + value, + }: { + pid: number; + date: Date; + value: number; + } + ): Promise => { + return db.earningGoal.update({ + where: { + pid_date: { pid, date }, + }, + data: { value }, + }); + }, + }, +}; + +export default earningGoalResolver; diff --git a/backend/gql/resolvers/loginResolver.ts b/backend/gql/resolvers/loginResolver.ts new file mode 100644 index 00000000..5beb041b --- /dev/null +++ b/backend/gql/resolvers/loginResolver.ts @@ -0,0 +1,94 @@ +import jwt from "jsonwebtoken"; +import { Participant } from "@prisma/client"; +import { endOfDay, startOfDay } from "date-fns"; +import * as ROLES from "../../constants/roles"; +import { LOGIN } from "../../constants/systemBadges"; +import db from "../../prisma"; +import { updateBadgeLevelProgress } from "../../utils/badgeUtils"; + +type LoginResponse = { + token: string; +}; + +const loginResolver = { + Mutation: { + adminLogin: async ( + _parent: undefined, + { + role, + password, + }: { + role: string; + password: string; + } + ): Promise => { + if (role !== ROLES.ADMIN && role !== ROLES.RELIEF) + throw new Error("invalid role"); + + let expectedPassword: string = process.env.ADMIN_STAFF_PASSWORD ?? ""; + if (role === ROLES.RELIEF) { + expectedPassword = process.env.RELIEF_STAFF_PASSWORD ?? ""; + } + if (expectedPassword === "") throw new Error("password unset"); + + const validPassword: boolean = password === expectedPassword; + if (!validPassword) throw new Error("incorrect password"); + + const jwtSecretKey = process.env.JWT_SECRET ?? ""; + if (!jwtSecretKey) throw new Error("jwt key missing"); + + const token = jwt.sign({ role }, jwtSecretKey, { expiresIn: "12h" }); + return { token }; + }, + participantLogin: async ( + _parent: undefined, + { + pid, + password, + }: { + pid: number; + password: string; + } + ): Promise => { + const participant: Participant | null = await db.participant.findUnique({ + where: { + pid, + OR: [ + { departure: null }, + { departure: { gt: endOfDay(new Date()) } }, + ], + }, + }); + + if (!participant) throw new Error("participant not found"); + + const validPassword: boolean = password === participant.password; + if (!validPassword) throw new Error("incorrect password"); + + const jwtSecretKey = process.env.JWT_SECRET ?? ""; + if (!jwtSecretKey) throw new Error("jwt key missing"); + + const loggedInToday = await db.loginHistory.findFirst({ + where: { + pid, + date: { + gte: startOfDay(new Date()), + lte: endOfDay(new Date()), + }, + }, + }); + if (!loggedInToday) { + await updateBadgeLevelProgress(LOGIN, pid, 1); + } + + await db.loginHistory.create({ data: { pid } }); + + const token = jwt.sign({ role: ROLES.PARTICIPANT, pid }, jwtSecretKey, { + expiresIn: "12h", + }); + return { token }; + }, + }, +}; + +export default loginResolver; diff --git a/backend/gql/resolvers/noteResolver.ts b/backend/gql/resolvers/noteResolver.ts new file mode 100644 index 00000000..d389438e --- /dev/null +++ b/backend/gql/resolvers/noteResolver.ts @@ -0,0 +1,40 @@ +import { Note } from "@prisma/client"; +import db from "../../prisma"; + +const noteResolver = { + Query: { + getNotes: async (): Promise => { + return db.note.findMany({ + orderBy: [{ date: "desc" }], + }); + }, + }, + Mutation: { + createNote: async ( + _parent: undefined, + { + message, + }: { + message: string; + } + ): Promise => { + return db.note.create({ + data: { message }, + }); + }, + deleteNote: async ( + _parent: undefined, + { + nid, + }: { + nid: number; + } + ): Promise => { + return db.note.delete({ + where: { nid }, + }); + }, + }, +}; + +export default noteResolver; diff --git a/backend/gql/resolvers/participantResolver.ts b/backend/gql/resolvers/participantResolver.ts new file mode 100644 index 00000000..717d6bbf --- /dev/null +++ b/backend/gql/resolvers/participantResolver.ts @@ -0,0 +1,119 @@ +import { Participant } from "@prisma/client"; +import { endOfDay, startOfDay } from "date-fns"; +import db from "../../prisma"; +import { initBadgeLevelProgress } from "../../utils/badgeUtils"; + +const participantResolver = { + Query: { + getParticipantByPid: async ( + _parent: undefined, + { pid }: { pid: number } + ): Promise => { + const participant = await db.participant.findUnique({ + where: { pid }, + }); + if (!participant) throw new Error("participant not found"); + return participant; + }, + getCurrentParticipants: async (): Promise => { + return db.participant.findMany({ + where: { + OR: [ + { departure: null }, + { departure: { gt: endOfDay(new Date()) } }, + ], + }, + orderBy: [{ room: "asc" }], + }); + }, + getPastParticipants: async (): Promise => { + return db.participant.findMany({ + where: { + departure: { + not: null, + lte: startOfDay(new Date()), + }, + }, + orderBy: [{ departure: "desc" }], + }); + }, + }, + Mutation: { + createParticipant: async ( + _parent: undefined, + { + pid, + password, + room, + arrival, + }: { + pid: number; + password: string; + room: number; + arrival: Date; + } + ): Promise => { + const existingParticipant = await db.participant.findUnique({ + where: { pid }, + }); + if (existingParticipant) throw new Error("participant id already exists"); + + const validArrival = arrival <= new Date(); + if (!validArrival) throw new Error("arrival is in the future"); + + const occupiedRoom = await db.participant.findFirst({ + where: { + room, + OR: [ + { departure: null }, + { departure: { gt: endOfDay(new Date()) } }, + ], + }, + }); + if (occupiedRoom) throw new Error("room is occupied"); + + const participant = await db.participant.create({ + data: { + pid, + room, + arrival, + password, + }, + }); + await initBadgeLevelProgress(pid); + return participant; + }, + updateParticipant: async ( + _parent: undefined, + { + pid, + password, + room, + arrival, + departure, + }: { + pid: number; + password?: string; + room?: number; + arrival?: Date; + departure?: Date; + } + ): Promise => { + const updates: Partial = {}; + if (password) updates.password = password; + if (room) updates.room = room; + if (arrival) updates.arrival = arrival; + if (departure) updates.departure = departure; + + const isEmpty = Object.keys(updates).length === 0; + if (isEmpty) throw new Error("no updates received"); + + return db.participant.update({ + where: { pid }, + data: updates, + }); + }, + }, +}; + +export default participantResolver; diff --git a/backend/gql/resolvers/receivedAnnouncementResolver.ts b/backend/gql/resolvers/receivedAnnouncementResolver.ts new file mode 100644 index 00000000..4bfc1fe5 --- /dev/null +++ b/backend/gql/resolvers/receivedAnnouncementResolver.ts @@ -0,0 +1,78 @@ +import { Priority, ReceivedAnnouncement } from "@prisma/client"; +import db from "../../prisma"; + +const receivedAnnouncementResolver = { + Query: { + getReceivedAnnouncements: async ( + _parent: undefined, + { + pid, + unread, + pinned, + important, + }: { + pid: number; + unread?: boolean; + pinned?: boolean; + important?: boolean; + } + ): Promise => { + const where: any = { pid }; + + if (unread !== undefined) where.read = !unread; + if (pinned !== undefined) where.pinned = pinned; + if (important !== undefined && important) { + where.announcement = { + priority: { in: [Priority.HIGH, Priority.CRITICAL] }, + }; + } else if (important !== undefined && !important) { + where.announcement = { priority: Priority.NORMAL }; + } + + return db.receivedAnnouncement.findMany({ + where, + include: { announcement: true }, + orderBy: { announcement: { date: "desc" } }, + }); + }, + }, + Mutation: { + updateReceivedAnnouncement: async ( + _parent: undefined, + { + aid, + pid, + read, + pinned, + }: { + aid: number; + pid: number; + pinned?: boolean; + read?: boolean; + } + ): Promise => { + const updates: Partial = {}; + if (pinned !== undefined) updates.pinned = pinned; + if (read !== undefined) updates.read = read; + + const isEmpty = Object.keys(updates).length === 0; + if (isEmpty) throw new Error("no updates received"); + + return db.receivedAnnouncement.update({ + where: { + aid_pid: { aid, pid }, + }, + data: updates, + }); + }, + }, + ReceivedAnnouncement: { + participant: async (parent: { pid: number }) => { + return db.participant.findUnique({ + where: { pid: parent.pid }, + }); + }, + }, +}; + +export default receivedAnnouncementResolver; diff --git a/backend/gql/resolvers/reportRecipientResolver.ts b/backend/gql/resolvers/reportRecipientResolver.ts new file mode 100644 index 00000000..7cfa009a --- /dev/null +++ b/backend/gql/resolvers/reportRecipientResolver.ts @@ -0,0 +1,68 @@ +import { ReportRecipient } from "@prisma/client"; +import db from "../../prisma"; + +const reportRecipientResolver = { + Query: { + getReportRecipients: async (): Promise => { + return db.reportRecipient.findMany({ + orderBy: { email: "asc" }, + }); + }, + }, + Mutation: { + createReportRecipient: async ( + _parent: undefined, + { + email, + weekly, + monthly, + }: { + email: string; + weekly: boolean; + monthly: boolean; + } + ): Promise => { + return db.reportRecipient.create({ + data: { email, weekly, monthly }, + }); + }, + updateReportRecipient: async ( + _parent: undefined, + { + email, + weekly, + monthly, + }: { + email: string; + weekly?: boolean; + monthly?: boolean; + } + ): Promise => { + const updates: Partial = {}; + if (weekly !== undefined) updates.weekly = weekly; + if (monthly !== undefined) updates.monthly = monthly; + + const isEmpty = Object.keys(updates).length === 0; + if (isEmpty) throw new Error("no updates received"); + + return db.reportRecipient.update({ + where: { email }, + data: updates, + }); + }, + deleteReportRecipient: async ( + _parent: undefined, + { + email, + }: { + email: string; + } + ): Promise => { + return db.reportRecipient.delete({ + where: { email }, + }); + }, + }, +}; + +export default reportRecipientResolver; diff --git a/backend/gql/resolvers/systemBadgeResolver.ts b/backend/gql/resolvers/systemBadgeResolver.ts new file mode 100644 index 00000000..521bf4ba --- /dev/null +++ b/backend/gql/resolvers/systemBadgeResolver.ts @@ -0,0 +1,41 @@ +import { SystemBadge } from "@prisma/client"; +import db from "../../prisma"; + +const systemBadgeResolver = { + Query: { + getSystemBadges: async (): Promise => { + return db.systemBadge.findMany({ + include: { BadgeLevel: true }, + orderBy: { name: "asc" }, + }); + }, + }, + Mutation: { + updateSystemBadge: async ( + _parent: undefined, + { + name, + description, + is_active, + }: { + name: string; + description?: string; + is_active?: boolean; + } + ): Promise => { + const updates: Partial = {}; + if (description !== undefined) updates.description = description; + if (is_active !== undefined) updates.is_active = is_active; + + const isEmpty = Object.keys(updates).length === 0; + if (isEmpty) throw new Error("no updates received"); + + return db.systemBadge.update({ + where: { name }, + data: updates, + }); + }, + }, +}; + +export default systemBadgeResolver; diff --git a/backend/gql/resolvers/taskResolver.ts b/backend/gql/resolvers/taskResolver.ts new file mode 100644 index 00000000..0ed7ee9c --- /dev/null +++ b/backend/gql/resolvers/taskResolver.ts @@ -0,0 +1,136 @@ +import { + DayOfWeek, + DayPreference, + Task, + TaskType, + TimePreference, +} from "@prisma/client"; +import db from "../../prisma"; +import { assignTasksToAllParticipants } from "../../utils/taskUtils"; + +const taskResolver = { + Query: { + getTasksByType: async ( + _parent: undefined, + { + type, + }: { + type: TaskType; + } + ): Promise => { + return db.task.findMany({ + where: { type }, + }); + }, + }, + Mutation: { + createTask: async ( + _parent: undefined, + { + type, + name, + value, + penalty, + day_preference, + days, + time_preference, + start_time, + end_time, + comment, + }: { + type: TaskType; + name: string; + value: number; + penalty: number; + day_preference: DayPreference; + days: DayOfWeek[]; + time_preference: TimePreference; + start_time?: Date; + end_time?: Date; + comment?: string; + } + ): Promise => { + const newTask = await db.task.create({ + data: { + type, + name, + value, + penalty, + day_preference, + days, + time_preference, + start_time, + end_time, + comment, + }, + }); + if (type === TaskType.REQUIRED) { + await assignTasksToAllParticipants([newTask]); + } + return newTask; + }, + updateTask: async ( + _parent: undefined, + { + tid, + type, + name, + value, + penalty, + day_preference, + days, + time_preference, + start_time, + end_time, + comment, + }: { + tid: number; + type?: TaskType; + name?: string; + value?: number; + penalty?: number; + day_preference?: DayPreference; + days?: DayOfWeek[]; + time_preference?: TimePreference; + start_time?: Date; + end_time?: Date; + comment?: string; + } + ): Promise => { + const updates: Partial = {}; + if (type !== undefined) updates.type = type; + if (name !== undefined) updates.name = name; + if (value !== undefined) updates.value = value; + if (penalty !== undefined) updates.penalty = penalty; + if (day_preference !== undefined) updates.day_preference = day_preference; + if (days !== undefined) updates.days = days; + if (time_preference !== undefined) + updates.time_preference = time_preference; + if (start_time !== undefined) updates.start_time = start_time; + if (end_time !== undefined) updates.end_time = end_time; + if (comment !== undefined) updates.comment = comment; + + const isEmpty = Object.keys(updates).length === 0; + if (isEmpty) throw new Error("no updates received"); + + return db.task.update({ + where: { tid }, + data: updates, + }); + }, + deleteTask: async ( + _parent: undefined, + { + tid, + }: { + tid: number; + } + ): Promise => { + return db.task.delete({ + where: { tid }, + }); + }, + }, +}; + +export default taskResolver; diff --git a/backend/gql/resolvers/transactionResolver.ts b/backend/gql/resolvers/transactionResolver.ts new file mode 100644 index 00000000..6e10dc0f --- /dev/null +++ b/backend/gql/resolvers/transactionResolver.ts @@ -0,0 +1,82 @@ +import { Transaction, TransactionType, DayOfWeek } from "@prisma/client"; +import { endOfWeek, startOfWeek } from "date-fns"; +import db from "../../prisma"; +import { orderedDays } from "../../constants/days"; + +type GetWeeklyEarningsResponse = Record; + +const transactionResolver = { + Query: { + getWeeklyEarnings: async ( + _parent: undefined, + { + pid, + }: { + pid: number; + } + ): Promise => { + const transactions = await db.transaction.findMany({ + where: { + pid, + type: TransactionType.EARNING, + date: { + gte: startOfWeek(new Date()), + lte: endOfWeek(new Date()), + }, + }, + }); + + const totals: GetWeeklyEarningsResponse = { + [DayOfWeek.SUNDAY]: 0, + [DayOfWeek.MONDAY]: 0, + [DayOfWeek.TUESDAY]: 0, + [DayOfWeek.WEDNESDAY]: 0, + [DayOfWeek.THURSDAY]: 0, + [DayOfWeek.FRIDAY]: 0, + [DayOfWeek.SATURDAY]: 0, + }; + + transactions.forEach((transaction) => { + const day = orderedDays[new Date(transaction.date).getDay()]; + totals[day] += transaction.amount; + }); + + return totals; + }, + }, + Mutation: { + updateBalance: async ( + _parent: undefined, + { + pid, + amount, + reason, + }: { + pid: number; + amount: number; + reason: string; + } + ): Promise => { + if (amount === 0) throw new Error("invalid amount"); + + const participant = await db.participant.findUnique({ + where: { pid }, + }); + if (!participant) throw new Error("participant not found"); + + const newBalance = participant.balance + amount; + await db.participant.update({ + where: { pid }, + data: { balance: newBalance }, + }); + + const type = + amount < 0 ? TransactionType.PURCHASE : TransactionType.REFUND; + return db.transaction.create({ + data: { pid, amount: Math.abs(amount), type, reason }, + }); + }, + }, +}; + +export default transactionResolver; diff --git a/backend/gql/schema.ts b/backend/gql/schema.ts new file mode 100644 index 00000000..56d3c680 --- /dev/null +++ b/backend/gql/schema.ts @@ -0,0 +1,61 @@ +import { makeExecutableSchema } from "apollo-server-express"; +import { applyMiddleware } from "graphql-middleware"; +import { merge } from "lodash"; + +import { + typeDefs as scalarTypeDefs, + resolvers as scalarResolvers, +} from "graphql-scalars"; + +import models from "./types/models"; +import enums from "./types/enums"; +import resolvers from "./types/resolvers"; +import responses from "./types/responses"; + +import participantResolver from "./resolvers/participantResolver"; +import noteResolver from "./resolvers/noteResolver"; +import announcementResolver from "./resolvers/announcementResolver"; +import loginResolver from "./resolvers/loginResolver"; +import taskResolver from "./resolvers/taskResolver"; +import customBadgeResolver from "./resolvers/customBadgeResolver"; +import assignedTaskResolver from "./resolvers/assignedTaskResolver"; +import reportRecipientResolver from "./resolvers/reportRecipientResolver"; +import achievedBadgeLevelResolver from "./resolvers/achievedBadgeLevelResolver"; +import badgeLevelResolver from "./resolvers/badgeLevelResolver"; +import earnedCustomBadgeResolver from "./resolvers/earnedCustomBadgeResolver"; +import badgeLevelProgressResolver from "./resolvers/badgeLevelProgressResolver"; +import earningGoalResolver from "./resolvers/earningGoalResolver"; +import receivedAnnouncementResolver from "./resolvers/receivedAnnouncementResolver"; +import systemBadgeResolver from "./resolvers/systemBadgeResolver"; +import transactionResolver from "./resolvers/transactionResolver"; + +import getMiddleware from "./middleware"; + +export default function getSchema() { + const middleware = getMiddleware(); + const schema = makeExecutableSchema({ + typeDefs: [...scalarTypeDefs, models, enums, resolvers, responses], + resolvers: merge( + scalarResolvers, + loginResolver, + noteResolver, + announcementResolver, + reportRecipientResolver, + achievedBadgeLevelResolver, + badgeLevelResolver, + earnedCustomBadgeResolver, + badgeLevelProgressResolver, + earningGoalResolver, + receivedAnnouncementResolver, + systemBadgeResolver, + transactionResolver, + participantResolver, + taskResolver, + customBadgeResolver, + assignedTaskResolver + ), + }); + + const schemaWithMiddleware = applyMiddleware(schema, middleware); + return schemaWithMiddleware; +} diff --git a/backend/gql/test.gql b/backend/gql/test.gql new file mode 100644 index 00000000..8231bd44 --- /dev/null +++ b/backend/gql/test.gql @@ -0,0 +1,728 @@ +# HTTP required headers + +{ + "Authorization": "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJyb2xlIjoiYWRtaW4iLCJpYXQiOjE3NDc3MTc5NDF9.8Z7MEw0o7fgIpFTnw82kv0yTW8tG2i7TrcuXPY-i0l4" +} + +# GraphQL operations for Marillac Place backend +# Copy / paste queries and mutations in this file and supply variable values as needed +# Date, DateTime, Time types expect ISO-8601 strings (e.g. "2025-01-01T12:00:00Z"). + +query GetNotes { + getNotes { + nid + message + date + } +} + +query GetReportRecipients { + getReportRecipients { + email + weekly + monthly + } +} + +query GetAnnouncementsFromToday { + getAnnouncementsFromToday { + aid + date + message + priority + ReceivedAnnouncement { + pid + participant { + room + } + } + } +} + +query GetAnnouncementsSentToParticipants($pids: [Int!]!) { + getAnnouncementsSentToParticipants(pids: $pids) { + aid + date + message + priority + ReceivedAnnouncement { + pid + } + } +} + +query GetReceivedAnnouncements( + $pid: Int! + $unread: Boolean + $pinned: Boolean + $important: Boolean +) { + getReceivedAnnouncements( + pid: $pid + unread: $unread + pinned: $pinned + important: $important + ) { + aid + pid + read + pinned + announcement { + aid + message + priority + date + } + } +} + +query GetEarningGoal($pid: Int!) { + getEarningGoal(pid: $pid) { + pid + action + value + date + } +} + +query GetTasksByType($type: TaskType!) { + getTasksByType(type: $type) { + tid + name + type + value + penalty + comment + day_preference + days + time_preference + start_time + end_time + } +} + +query GetCustomBadges { + getCustomBadges { + cid + name + icon + description + } +} + +query GetWeeklyEarnings($pid: Int!) { + getWeeklyEarnings(pid: $pid) { + SUNDAY + MONDAY + TUESDAY + WEDNESDAY + THURSDAY + FRIDAY + SATURDAY + } +} + +query GetParticipantByPid($pid: Int!) { + getParticipantByPid(pid: $pid) { + pid + room + arrival + departure + balance + total_earnings + } +} + +query GetCurrentParticipants { + getCurrentParticipants { + pid + room + arrival + departure + balance + } +} + +query GetPastParticipants { + getPastParticipants { + pid + room + arrival + departure + } +} + +query GetSystemBadges { + getSystemBadges { + name + icon + description + is_active + BadgeLevel { + level + benchmark + value + } + } +} + +query GetNumberOfAssignedTasksByRoom { + getNumberOfAssignedTasksByRoom +} + +query GetAssignedTasksForToday($pid: Int!) { + getAssignedTasksForToday(pid: $pid) { + aid + pid + name + type + status + start_date + end_date + value + penalty + comment + } +} + +query GetAssignedTasksByWeek($pid: Int!, $weekStart: Date!) { + getAssignedTasksByWeek(pid: $pid, weekStart: $weekStart) { + aid + pid + name + type + status + start_date + end_date + } +} + +query HasCompletedAllRequiredTasks($pid: Int!) { + hasCompletedAllRequiredTasks(pid: $pid) +} + +query GetEarnedCustomBadges($pid: Int!) { + getEarnedCustomBadges(pid: $pid) { + eid + pid + name + icon + description + notified + } +} + +query GetAchievedBadgeLevels($pid: Int!) { + getAchievedBadgeLevels(pid: $pid) { + name + level + pid + date + notified + badge_level { + system_badge { + name + icon + description + is_active + } + } + } +} + +query GetBadgeLevelProgress($pid: Int!) { + getBadgeLevelProgress(pid: $pid) { + name + level + pid + progress + badge_level { + value + benchmark + system_badge { + icon + description + is_active + } + } + } +} + +mutation CreateNote($message: String!) { + createNote(message: $message) { + nid + message + date + } +} + +mutation DeleteNote($nid: Int!) { + deleteNote(nid: $nid) { + nid + message + } +} + +mutation CreateReportRecipient( + $email: String! + $weekly: Boolean! + $monthly: Boolean! +) { + createReportRecipient( + email: $email + weekly: $weekly + monthly: $monthly + ) { + email + weekly + monthly + } +} + +mutation UpdateReportRecipient( + $email: String! + $weekly: Boolean + $monthly: Boolean +) { + updateReportRecipient(email: $email, weekly: $weekly, monthly: $monthly) { + email + weekly + monthly + } +} + +mutation DeleteReportRecipient($email: String!) { + deleteReportRecipient(email: $email) { + email + weekly + monthly + } +} + +mutation CreateAnnouncement( + $priority: Priority! + $pids: [Int!]! + $message: String! +) { + createAnnouncement(priority: $priority, pids: $pids, message: $message) { + aid + message + date + priority + } +} + +mutation UpdateAnnouncement( + $aid: Int! + $priority: Priority + $message: String +) { + updateAnnouncement(aid: $aid, priority: $priority, message: $message) { + aid + message + priority + } +} + +mutation DeleteAnnouncement($aid: Int!) { + deleteAnnouncement(aid: $aid) { + aid + message + } +} + +mutation UpdateReceivedAnnouncement( + $aid: Int! + $pid: Int! + $pinned: Boolean + $read: Boolean +) { + updateReceivedAnnouncement( + aid: $aid + pid: $pid + pinned: $pinned + read: $read + ) { + aid + pid + pinned + read + } +} + +mutation CreateEarningGoal( + $pid: Int! + $action: GoalAction! + $value: Int! +) { + createEarningGoal(pid: $pid, action: $action, value: $value) { + pid + action + value + date + } +} + +mutation UpdateEarningGoal( + $pid: Int! + $date: Date! + $value: Int! +) { + updateEarningGoal(pid: $pid, date: $date, value: $value) { + pid + action + value + date + } +} + +mutation CreateTask( + $type: TaskType! + $name: String! + $value: Int! + $penalty: Int! + $dayPreference: DayPreference! + $days: [DayOfWeek!]! + $timePreference: TimePreference! + $startTime: Date + $endTime: Date + $comment: String +) { + createTask( + type: $type + name: $name + value: $value + penalty: $penalty + day_preference: $dayPreference + days: $days + time_preference: $timePreference + start_time: $startTime + end_time: $endTime + comment: $comment + ) { + tid + name + type + value + penalty + day_preference + days + time_preference + start_time + end_time + comment + } +} + +mutation UpdateTask( + $tid: Int! + $type: TaskType + $name: String + $value: Int + $penalty: Int + $dayPreference: DayPreference + $days: [DayOfWeek!] + $timePreference: TimePreference + $startTime: Date + $endTime: Date + $comment: String +) { + updateTask( + tid: $tid + type: $type + name: $name + value: $value + penalty: $penalty + day_preference: $dayPreference + days: $days + time_preference: $timePreference + start_time: $startTime + end_time: $endTime + comment: $comment + ) { + tid + name + type + value + penalty + day_preference + days + time_preference + start_time + end_time + comment + } +} + +mutation DeleteTask($tid: Int!) { + deleteTask(tid: $tid) { + tid + name + } +} + +mutation AdminLogin($role: String!, $password: String!) { + adminLogin(role: $role, password: $password) { + token + } +} + +mutation ParticipantLogin($pid: Int!, $password: String!) { + participantLogin(pid: $pid, password: $password) { + token + } +} + +mutation CreateCustomBadge( + $name: String! + $description: String! + $icon: Icon! +) { + createCustomBadge(name: $name, description: $description, icon: $icon) { + cid + name + description + icon + } +} + +mutation UpdateCustomBadge( + $cid: Int! + $name: String + $description: String + $icon: Icon +) { + updateCustomBadge( + cid: $cid + name: $name + description: $description + icon: $icon + ) { + cid + name + description + icon + } +} + +mutation DeleteCustomBadge($cid: Int!) { + deleteCustomBadge(cid: $cid) { + cid + name + } +} + +mutation CreateParticipant( + $pid: Int! + $password: String! + $room: Int! + $arrival: Date! +) { + createParticipant( + pid: $pid + password: $password + room: $room + arrival: $arrival + ) { + pid + room + arrival + balance + } +} + +mutation UpdateParticipant( + $pid: Int! + $password: String + $room: Int + $arrival: Date + $departure: String +) { + updateParticipant( + pid: $pid + password: $password + room: $room + arrival: $arrival + departure: $departure + ) { + pid + room + arrival + departure + } +} + +mutation UpdateBalance($pid: Int!, $amount: Int!, $reason: String!) { + updateBalance(pid: $pid, amount: $amount, reason: $reason) { + pid + amount + type + reason + date + } +} + +mutation CreateEarnedCustomBadge( + $pid: Int! + $name: String! + $icon: Icon! + $description: String! + $value: Int! +) { + createEarnedCustomBadge( + pid: $pid + name: $name + icon: $icon + description: $description + value: $value + ) { + eid + pid + name + icon + description + notified + } +} + +mutation FetchNewEarnedCustomBadges($pid: Int!) { + fetchNewEarnedCustomBadges(pid: $pid) { + eid + pid + name + icon + description + notified + } +} + +mutation UpdateSystemBadge( + $name: String! + $description: String + $isActive: Boolean +) { + updateSystemBadge( + name: $name + description: $description + is_active: $isActive + ) { + name + description + is_active + } +} + +mutation UpdateBadgeLevel( + $name: String! + $level: Level! + $benchmark: Int + $value: Int +) { + updateBadgeLevel( + name: $name + level: $level + benchmark: $benchmark + value: $value + ) { + name + level + benchmark + value + } +} + +mutation CreateAssignedTask( + $pid: Int! + $tid: Int! + $name: String! + $type: TaskType! + $value: Int! + $penalty: Int! + $startDate: Date! + $endDate: Date! + $comment: String +) { + createAssignedTask( + pid: $pid + tid: $tid + name: $name + type: $type + value: $value + penalty: $penalty + start_date: $startDate + end_date: $endDate + comment: $comment + ) { + aid + tid + pid + name + type + value + penalty + start_date + end_date + comment + } +} + +mutation UpdateAssignedTask( + $aid: Int! + $pid: Int + $name: String + $type: TaskType + $value: Int + $penalty: Int + $startDate: Date + $endDate: Date + $comment: String +) { + updateAssignedTask( + aid: $aid + pid: $pid + name: $name + type: $type + value: $value + penalty: $penalty + start_date: $startDate + end_date: $endDate + comment: $comment + ) { + aid + pid + name + type + value + penalty + start_date + end_date + comment + } +} + +mutation UpdateAssignedTaskStatus($aid: Int!, $status: TaskStatus!) { + updateAssignedTaskStatus(aid: $aid, status: $status) { + aid + pid + name + status + } +} + +mutation DeleteAssignedTask($aid: Int!) { + deleteAssignedTask(aid: $aid) { + aid + name + } +} + +mutation FetchNewAchievedBadgeLevels($pid: Int!) { + fetchNewAchievedBadgeLevels(pid: $pid) { + name + level + pid + date + notified + } +} + diff --git a/backend/types/enums.ts b/backend/gql/types/enums.ts similarity index 79% rename from backend/types/enums.ts rename to backend/gql/types/enums.ts index dbb1b698..83d06852 100644 --- a/backend/types/enums.ts +++ b/backend/gql/types/enums.ts @@ -1,85 +1,82 @@ import { gql } from "apollo-server-express"; const enums = gql` - enum TaskType { - REQUIRED - OPTIONAL - INDIVIDUAL_GOAL - } - - enum TransactionType { - EARNING - PURCHASE - REFUND - } - - enum BadgeType { - SYSTEM - CUSTOM - } - - enum RecurrenceFrequency { - DAILY - EVERY_SELECTED_DAYS - ANY_SELECTED_DAYS - PARTICIPANT_PREFERENCE - } - enum DayOfWeek { + SUNDAY MONDAY TUESDAY WEDNESDAY THURSDAY FRIDAY SATURDAY - SUNDAY } - enum TimeOption { - ANYTIME - SPECIFIC + enum DayPreference { + DAILY + DAY_RANGE + EVERY_SELECTED_DAYS PARTICIPANT_PREFERENCE } + enum GoalAction { + REACHED + SET + } + + enum Icon { + BABY + DIAMOND + FIVE_STAR + FLOWER + FOUR_STAR + GEMSTONE + GROUP + HEART + HOME + MONEY + PENCIL + TOOL + WINGS + PLANT + } + + enum Level { + NOVICE + BRONZE + SILVER + GOLD + DIAMOND + } + enum Priority { NORMAL HIGH CRITICAL } - enum Status { + enum TaskStatus { ASSIGNED - INCOMPLETE COMPLETE EXCUSED + INCOMPLETE } - enum AnnouncementFilter { - ALL - UNREAD - PINNED - IMPORTANT + enum TaskType { + INDIVIDUAL_GOAL + OPTIONAL + REQUIRED } - enum Icon { - FIVE_STAR - FOUR_STAR - GROUP - HEART - HOME - BABY - WINGS - FLOWER - MONEY - GEMSTONE - DIAMOND - PENCIL - TOOL + enum TimePreference { + ANYTIME + PARTICIPANT_PREFERENCE + SPECIFIC } - enum GoalAction { - SET - REACHED + enum TransactionType { + EARNING + PURCHASE + REFUND } `; diff --git a/backend/gql/types/models.ts b/backend/gql/types/models.ts new file mode 100644 index 00000000..c600f4df --- /dev/null +++ b/backend/gql/types/models.ts @@ -0,0 +1,171 @@ +import { gql } from "apollo-server-express"; + +const models = gql` + type AchievedBadgeLevel { + name: String! + level: Level! + pid: Int! + notified: Boolean! + date: Date! + + badge_level: BadgeLevel + participant: Participant + } + + type Announcement { + aid: Int! + date: DateTime! + message: String! + priority: Priority! + + ReceivedAnnouncement: [ReceivedAnnouncement!] + } + + type AssignedTask { + aid: Int! + pid: Int! + tid: Int! + name: String! + type: TaskType! + status: TaskStatus! + value: Int! + penalty: Int! + comment: String + start_date: DateTime! + end_date: DateTime! + + participant: Participant + } + + type BadgeLevel { + name: String! + level: Level! + value: Int! + benchmark: Int! + + AchievedBadgeLevel: [AchievedBadgeLevel!] + BadgeLevelProgress: [BadgeLevelProgress!] + + system_badge: SystemBadge + } + + type BadgeLevelProgress { + name: String! + level: Level! + pid: Int! + progress: Int! + + badge_level: BadgeLevel + participant: Participant + } + + type CustomBadge { + cid: Int! + name: String! + icon: Icon! + description: String! + } + + type EarningGoal { + pid: Int! + action: GoalAction! + date: DateTime! + value: Int! + + participant: Participant + } + + type EarnedCustomBadge { + eid: Int! + pid: Int! + name: String! + icon: Icon! + description: String! + notified: Boolean! + + participant: Participant + } + + type LoginHistory { + pid: Int! + date: DateTime! + + participant: Participant + } + + type Note { + nid: Int! + message: String! + date: DateTime! + } + + type Participant { + pid: Int! + password: String! + room: Int! + arrival: DateTime! + departure: DateTime + balance: Int! + total_earnings: Int! + + Transaction: [Transaction!] + EarningGoal: [EarningGoal!] + LoginHistory: [LoginHistory!] + ReceivedAnnouncement: [ReceivedAnnouncement!] + AssignedTask: [AssignedTask!] + EarnedCustomBadge: [EarnedCustomBadge!] + AchievedBadgeLevel: [AchievedBadgeLevel!] + BadgeLevelProgress: [BadgeLevelProgress!] + } + + type ReceivedAnnouncement { + aid: Int! + pid: Int! + read: Boolean! + pinned: Boolean! + + participant: Participant + announcement: Announcement + } + + type ReportRecipient { + email: String! + weekly: Boolean! + monthly: Boolean! + } + + type SystemBadge { + name: String! + icon: Icon! + description: String! + is_active: Boolean! + + BadgeLevel: [BadgeLevel!] + } + + type Task { + tid: Int! + name: String! + type: TaskType! + value: Int! + penalty: Int! + comment: String + day_preference: DayPreference! + days: [DayOfWeek!]! + time_preference: TimePreference! + start_time: Time + end_time: Time + } + + type Transaction { + pid: Int! + date: DateTime! + amount: Int! + type: TransactionType! + reason: String! + + participant: Participant + } +`; + +export default models; diff --git a/backend/gql/types/resolvers.ts b/backend/gql/types/resolvers.ts new file mode 100644 index 00000000..e4c1f35d --- /dev/null +++ b/backend/gql/types/resolvers.ts @@ -0,0 +1,193 @@ +import { gql } from "apollo-server-express"; + +const resolvers = gql` + type Query { + getNotes: [Note!]! + + getReportRecipients: [ReportRecipient!]! + + getAnnouncementsFromToday: [Announcement!]! + getAnnouncementsSentToParticipants(pids: [Int!]!): [Announcement!]! + + getReceivedAnnouncements( + pid: Int! + unread: Boolean + pinned: Boolean + important: Boolean + ): [ReceivedAnnouncement!]! + + getEarningGoal(pid: Int!): EarningGoal + + getTasksByType(type: TaskType!): [Task!]! + + getCustomBadges: [CustomBadge!]! + + getWeeklyEarnings(pid: Int!): GetWeeklyEarningsResponse! + + getParticipantByPid(pid: Int!): Participant! + getCurrentParticipants: [Participant!]! + getPastParticipants: [Participant!]! + + getSystemBadges: [SystemBadge!]! + + getNumberOfAssignedTasksByRoom: [Int!]! + getAssignedTasksForToday(pid: Int!): [AssignedTask!]! + getAssignedTasksByWeek(pid: Int!, weekStart: Date!): [AssignedTask!]! + hasCompletedAllRequiredTasks(pid: Int!): Boolean! + + getEarnedCustomBadges(pid: Int!): [EarnedCustomBadge!]! + + getAchievedBadgeLevels(pid: Int!): [AchievedBadgeLevel!]! + + getBadgeLevelProgress(pid: Int!): [BadgeLevelProgress!]! + } + + type Mutation { + createNote(message: String!): Note! + deleteNote(nid: Int!): Note! + + createReportRecipient( + email: String! + weekly: Boolean! + monthly: Boolean! + ): ReportRecipient! + updateReportRecipient( + email: String! + weekly: Boolean + monthly: Boolean + ): ReportRecipient! + deleteReportRecipient(email: String!): ReportRecipient! + + createAnnouncement( + priority: Priority! + pids: [Int!]! + message: String! + ): Announcement! + updateAnnouncement( + aid: Int! + priority: Priority + message: String + ): Announcement! + deleteAnnouncement(aid: Int!): Announcement! + + updateReceivedAnnouncement( + aid: Int! + pid: Int! + pinned: Boolean + read: Boolean + ): ReceivedAnnouncement! + + createEarningGoal(pid: Int!, action: GoalAction!, value: Int!): EarningGoal! + updateEarningGoal(pid: Int!, date: Date!, value: Int!): EarningGoal! + + createTask( + type: TaskType! + name: String + value: Int! + penalty: Int! + day_preference: DayPreference! + days: [DayOfWeek!]! + time_preference: TimePreference! + start_time: Date + end_time: Date + comment: String + ): Task! + updateTask( + tid: Int! + type: TaskType + name: String + value: Int + penalty: Int + day_preference: DayPreference + days: [DayOfWeek!] + time_preference: TimePreference + start_time: Date + end_time: Date + comment: String + ): Task! + deleteTask(tid: Int!): Task! + + adminLogin(role: String!, password: String!): LoginResponse! + participantLogin(pid: Int!, password: String!): LoginResponse! + + createCustomBadge( + name: String! + description: String! + icon: Icon! + ): CustomBadge! + updateCustomBadge( + cid: Int! + name: String + description: String + icon: Icon + ): CustomBadge! + deleteCustomBadge(cid: Int!): CustomBadge! + + createParticipant( + pid: Int! + password: String! + room: Int! + arrival: Date! + ): Participant! + updateParticipant( + pid: Int! + password: String + room: Int + arrival: Date + departure: String + ): Participant! + + updateBalance(pid: Int!, amount: Int!, reason: String!): Transaction! + + createEarnedCustomBadge( + pid: Int! + name: String! + icon: Icon! + description: String! + value: Int! + ): EarnedCustomBadge! + fetchNewEarnedCustomBadges(pid: Int!): [EarnedCustomBadge!]! + + updateSystemBadge( + name: String! + description: String + is_active: Boolean + ): SystemBadge! + + updateBadgeLevel( + name: String! + level: Level! + benchmark: Int + value: Int + ): BadgeLevel! + + createAssignedTask( + pid: Int! + tid: Int! + name: String! + type: TaskType! + value: Int! + penalty: Int! + start_date: Date! + end_date: Date! + comment: String + ): AssignedTask! + updateAssignedTask( + aid: Int! + pid: Int + name: String + type: TaskType + value: Int + penalty: Int + start_date: Date + end_date: Date + comment: String + ): AssignedTask! + updateAssignedTaskStatus(aid: Int!, status: TaskStatus!): AssignedTask! + deleteAssignedTask(aid: Int!): AssignedTask! + + fetchNewAchievedBadgeLevels(pid: Int!): [AchievedBadgeLevel!]! + } +`; + +export default resolvers; diff --git a/backend/gql/types/responses.ts b/backend/gql/types/responses.ts new file mode 100644 index 00000000..b8249d99 --- /dev/null +++ b/backend/gql/types/responses.ts @@ -0,0 +1,19 @@ +import { gql } from "apollo-server-express"; + +const responses = gql` + type LoginResponse { + token: String! + } + + type GetWeeklyEarningsResponse { + SUNDAY: Int! + MONDAY: Int! + TUESDAY: Int! + WEDNESDAY: Int! + THURSDAY: Int! + FRIDAY: Int! + SATURDAY: Int! + } +`; + +export default responses; diff --git a/backend/package.json b/backend/package.json index a21109bb..f3174186 100644 --- a/backend/package.json +++ b/backend/package.json @@ -4,16 +4,10 @@ "description": "", "main": "server.ts", "scripts": { - "dev": "nodemon -L", - "build": "tsc", "lint": "eslint . --ext .ts,.js", "fix": "eslint . --ext .ts,.js --fix", "postinstall": "npx prisma generate && tsc", - "prismaInitAndRun": "if [ \"$NODE_ENV\" = \"production\" ]; then npx prisma db push; else npx prisma migrate deploy; fi && npx prisma generate && npx @snaplet/seed sync && npx prisma db seed && nodemon -L", - "start": "npx prisma generate && node build/server.js", - "test:reports": "npx tsx test-report-emails.ts", - "test:reports:weekly": "npx tsx test-report-emails.ts weekly", - "test:reports:monthly": "npx tsx test-report-emails.ts monthly" + "start": "npx prisma migrate deploy && npx prisma generate && npx @snaplet/seed sync && npx prisma db seed && if [ \"$NODE_ENV\" = \"production\" ]; then node build/server.js; else nodemon -L; fi" }, "keywords": [], "author": "", @@ -33,9 +27,9 @@ "cookie-parser": "^1.4.5", "cors": "^2.8.5", "crypto-js": "^4.2.0", + "date-fns": "^4.1.0", "dotenv": "^8.2.0", "express": "^4.17.1", - "firebase-admin": "^9.5.0", "graphql": "15.5.0", "graphql-middleware": "^6.0.6", "graphql-scalars": "^1.22.4", @@ -43,12 +37,10 @@ "json2csv": "^5.0.6", "jsonwebtoken": "^9.0.2", "lodash": "^4.17.21", - "mongoose": "^5.12.12", "multer": "^1.4.2", "node-cron": "^3.0.3", "node-fetch": "^2.6.1", "nodemailer": "^6.5.0", - "@snaplet/seed": "^0.98.0", "pg": "^8.5.1", "reflect-metadata": "^0.1.13", "sequelize": "^6.5.0", @@ -63,6 +55,7 @@ "devDependencies": { "@faker-js/faker": "^9.8.0", "@snaplet/copycat": "^6.0.0", + "@snaplet/seed": "0.98.0", "@types/cookie-parser": "^1.4.2", "@types/cors": "^2.8.10", "@types/crypto-js": "^4.2.2", @@ -71,7 +64,6 @@ "@types/jest": "^26.0.23", "@types/jsonwebtoken": "^9.0.9", "@types/lodash": "^4.14.168", - "@types/mongoose": "^5.10.3", "@types/node": "^14.14.31", "@types/node-fetch": "^2.5.8", "@types/nodemailer": "^6.4.1", @@ -96,13 +88,13 @@ "graphql-upload": "^11.0.0" }, "@snaplet/seed": { - "config": "./seed/seed.config.ts" + "config": "prisma/seed/seed.config.ts" }, "prisma": { - "seed": "npx tsx ./seed/seed-snaplet.ts", + "seed": "npx tsx ./prisma/seed/seed.ts", "schema": "./prisma/schema.prisma" }, "engines": { "node": "18.18.2" } -} \ No newline at end of file +} diff --git a/backend/prisma/index.ts b/backend/prisma/index.ts index b5bf6ce8..7000be5a 100644 --- a/backend/prisma/index.ts +++ b/backend/prisma/index.ts @@ -1,5 +1,5 @@ import { PrismaClient } from "@prisma/client"; -const prisma = new PrismaClient(); +const db = new PrismaClient(); -export default prisma; +export default db; diff --git a/backend/prisma/schema.prisma b/backend/prisma/schema.prisma index 4930a7ae..b34583b2 100644 --- a/backend/prisma/schema.prisma +++ b/backend/prisma/schema.prisma @@ -7,27 +7,40 @@ datasource db { url = env("DATABASE_URL") } -enum TaskType { - REQUIRED - OPTIONAL - INDIVIDUAL_GOAL -} - enum TransactionType { EARNING PURCHASE REFUND } -enum BadgeType { - SYSTEM - CUSTOM +enum GoalAction { + SET + REACHED +} + +enum Priority { + NORMAL + HIGH + CRITICAL } -enum RecurrenceFrequency { +enum TaskType { + REQUIRED + OPTIONAL + INDIVIDUAL_GOAL +} + +enum TaskStatus { + ASSIGNED + INCOMPLETE + COMPLETE + EXCUSED +} + +enum DayPreference { DAILY EVERY_SELECTED_DAYS - ANY_SELECTED_DAYS + DAY_RANGE PARTICIPANT_PREFERENCE } @@ -41,23 +54,18 @@ enum DayOfWeek { SUNDAY } -enum TimeOption { +enum TimePreference { ANYTIME SPECIFIC PARTICIPANT_PREFERENCE } -enum Priority { - NORMAL - HIGH - CRITICAL -} - -enum Status { - ASSIGNED - INCOMPLETE - COMPLETE - EXCUSED +enum Level { + NOVICE + BRONZE + SILVER + GOLD + DIAMOND } enum Icon { @@ -74,204 +82,210 @@ enum Icon { DIAMOND PENCIL TOOL -} - -enum GoalAction { - SET - REACHED + PLANT } model Participant { - participant_id Int @id - password String - room_number Int - arrival_date String - departure_date String? - account_creation_date String - account_removal_date String? - marillac_bucks Int @default(0) - marillac_bucks_goal Int? - - assigned_tasks AssignedTask[] - user_announcements UserAnnouncement[] - - goal_history GoalHistory[] - - logins Login[] - transactions Transaction[] - earned_badges EarnedBadge[] - participant_progress ParticipantProgress? + pid Int @id + password String + room Int + arrival DateTime @default(now()) + departure DateTime? + balance Int @default(0) + total_earnings Int @default(0) + + Transaction Transaction[] + EarningGoal EarningGoal[] + LoginHistory LoginHistory[] + ReceivedAnnouncement ReceivedAnnouncement[] + AssignedTask AssignedTask[] + EarnedCustomBadge EarnedCustomBadge[] + AchievedBadgeLevel AchievedBadgeLevel[] + BadgeLevelProgress BadgeLevelProgress[] @@map("participant") } -model Task { - task_id Int @id @default(autoincrement()) - task_name String @unique - task_type TaskType - recurrence_preference RecurrenceFrequency - repeat_days DayOfWeek[] - time_preference TimeOption - start_time String? - end_time String? - marillac_bucks_addition Int - marillac_bucks_deduction Int - comment String? +model Transaction { + pid Int + date DateTime @default(now()) + amount Int + type TransactionType @default(EARNING) + reason String - @@map("task") + participant Participant @relation(fields: [pid], references: [pid], onDelete: Cascade, onUpdate: Cascade) + + @@id([pid, date]) + @@map("transaction") } -model AssignedTask { - assigned_task_id Int @id @default(autoincrement()) - participant_id Int - task_name String - task_status Status @default(ASSIGNED) - task_type TaskType - goal_name String? - goal_description String? - start_date String - end_date String - marillac_bucks_addition Int - marillac_bucks_deduction Int - comment String? - - participant Participant @relation(fields: [participant_id], references: [participant_id]) +model EarningGoal { + pid Int + action GoalAction + date DateTime @default(now()) + value Int - @@map("assigned_task") + participant Participant @relation(fields: [pid], references: [pid], onDelete: Cascade, onUpdate: Cascade) + + @@id([pid, date]) + @@map("earning_goal") } -model Note { - note_id Int @id @default(autoincrement()) - message String - creation_date String +model LoginHistory { + pid Int + date DateTime @default(now()) - @@map("note") + participant Participant @relation(fields: [pid], references: [pid], onDelete: Cascade, onUpdate: Cascade) + + @@id([pid, date]) + @@map("login_history") } model Announcement { - announcement_id Int @id @default(autoincrement()) - priority Priority @default(NORMAL) - creation_date String - message String + aid Int @id @default(autoincrement()) + date DateTime @default(now()) + message String + priority Priority @default(NORMAL) - user_announcements UserAnnouncement[] + ReceivedAnnouncement ReceivedAnnouncement[] @@map("announcement") } -model UserAnnouncement { - read Boolean @default(false) - pinned Boolean @default(false) - announcement_id Int - participant_id Int +model ReceivedAnnouncement { + aid Int + pid Int + read Boolean @default(false) + pinned Boolean @default(false) - announcement Announcement @relation(fields: [announcement_id], references: [announcement_id], onDelete: Cascade) - participant Participant @relation(fields: [participant_id], references: [participant_id]) + announcement Announcement @relation(fields: [aid], references: [aid], onDelete: Cascade, onUpdate: Cascade) + participant Participant @relation(fields: [pid], references: [pid], onDelete: Cascade, onUpdate: Cascade) - @@id([announcement_id, participant_id]) - @@map("user_announcement") + @@id([aid, pid]) + @@map("received_announcement") } -model Login { - participant_id Int - login_date String +model Task { + tid Int @id @default(autoincrement()) + name String @unique + type TaskType + value Int + penalty Int @default(0) + comment String? + day_preference DayPreference + days DayOfWeek[] + time_preference TimePreference + start_time DateTime? @db.Time + end_time DateTime? @db.Time - participant Participant @relation(fields: [participant_id], references: [participant_id]) + @@map("task") +} - @@id([participant_id, login_date]) - @@map("login") +model AssignedTask { + aid Int @id @default(autoincrement()) + pid Int + tid Int + name String + type TaskType + status TaskStatus @default(ASSIGNED) + value Int + penalty Int + comment String? + start_date DateTime + end_date DateTime + + participant Participant @relation(fields: [pid], references: [pid], onDelete: Cascade, onUpdate: Cascade) + + @@map("assigned_task") } -model Transaction { - transaction_id Int @id @default(autoincrement()) - participant_id Int - transaction_date String - transaction_type TransactionType - description String? - marillac_bucks Int +model CustomBadge { + cid Int @id @default(autoincrement()) + name String @unique + icon Icon + description String - participant Participant @relation(fields: [participant_id], references: [participant_id]) + @@map("custom_badge") +} - @@map("transaction") +model EarnedCustomBadge { + eid Int @id @default(autoincrement()) + pid Int + name String + icon Icon + description String + notified Boolean @default(false) + + participant Participant @relation(fields: [pid], references: [pid], onDelete: Cascade, onUpdate: Cascade) + + @@map("earned_custom_badge") } -model Badge { - badge_id Int @id @default(autoincrement()) - badge_type BadgeType - name String @unique - description String - is_active Boolean @default(true) - is_consecutive Boolean - icon Icon +model SystemBadge { + name String @id + icon Icon + description String + is_active Boolean @default(true) - badge_level BadgeLevel[] - earned_badge EarnedBadge[] + BadgeLevel BadgeLevel[] - @@map("badge") + @@map("system_badge") } model BadgeLevel { - badge_id Int - level Int - benchmark Int - marillac_bucks Int + name String + level Level + value Int + benchmark Int + + AchievedBadgeLevel AchievedBadgeLevel[] + BadgeLevelProgress BadgeLevelProgress[] - badge Badge @relation(fields: [badge_id], references: [badge_id]) + system_badge SystemBadge @relation(fields: [name], references: [name], onDelete: Cascade, onUpdate: Cascade) - @@id([badge_id, level]) + @@id([name, level]) @@map("badge_level") } -model EarnedBadge { - earned_badge_id Int @id @default(autoincrement()) - participant_id Int - badge_id Int - date_received String - name String - description String - badge_icon Icon - level Int +model AchievedBadgeLevel { + name String + level Level + pid Int + notified Boolean @default(false) + date DateTime @default(now()) - participant Participant @relation(fields: [participant_id], references: [participant_id]) - badge Badge @relation(fields: [badge_id], references: [badge_id]) + badge_level BadgeLevel @relation(fields: [name, level], references: [name, level], onDelete: Cascade, onUpdate: Cascade) + participant Participant @relation(fields: [pid], references: [pid], onDelete: Cascade, onUpdate: Cascade) - @@map("earned_badge") + @@id([name, level, pid]) + @@map("achieved_badge_level") } -model ParticipantProgress { - participant_id Int @id - optional_tasks_completed Int @default(0) - weeks_optional_tasks_complete Int @default(0) - weeks_mandatory_tasks_complete Int @default(0) - weeks_individual_goal_complete Int @default(0) - days_logged_in Int @default(0) - total_earnings Int @default(0) - badges_achieved Int[] @default([]) - task_types_tried String[] @default([]) +model BadgeLevelProgress { + name String + level Level + pid Int + progress Int - participant Participant @relation(fields: [participant_id], references: [participant_id], onDelete: Cascade) + badge_level BadgeLevel @relation(fields: [name, level], references: [name, level], onDelete: Cascade, onUpdate: Cascade) + participant Participant @relation(fields: [pid], references: [pid], onDelete: Cascade, onUpdate: Cascade) - @@map("participant_progress") + @@id([name, level, pid]) + @@map("badge_level_progress") } -model GoalHistory { - goal_history_id Int @id @default(autoincrement()) - participant_id Int - goal_action GoalAction - goal_value Int - action_date String - - participant Participant @relation(fields: [participant_id], references: [participant_id]) +model Note { + nid Int @id @default(autoincrement()) + message String + date DateTime @default(now()) - @@map("goal_history") + @@map("note") } model ReportRecipient { - report_recipient_id Int @id @default(autoincrement()) - email String - weekly Boolean @default(false) - monthly Boolean @default(false) - last_report_sent String? + email String @id + weekly Boolean @default(true) + monthly Boolean @default(true) @@map("report_recipient") -} \ No newline at end of file +} diff --git a/backend/seed/.snaplet/config.json b/backend/prisma/seed/.snaplet/config.json similarity index 100% rename from backend/seed/.snaplet/config.json rename to backend/prisma/seed/.snaplet/config.json diff --git a/backend/seed/.snaplet/dataModel.json b/backend/prisma/seed/.snaplet/dataModel.json similarity index 73% rename from backend/seed/.snaplet/dataModel.json rename to backend/prisma/seed/.snaplet/dataModel.json index 120c353a..c68a114f 100644 --- a/backend/seed/.snaplet/dataModel.json +++ b/backend/prisma/seed/.snaplet/dataModel.json @@ -128,22 +128,148 @@ } ] }, + "achieved_badge_level": { + "id": "public.achieved_badge_level", + "schemaName": "public", + "tableName": "achieved_badge_level", + "fields": [ + { + "id": "public.achieved_badge_level.name", + "name": "name", + "columnName": "name", + "type": "text", + "isRequired": true, + "kind": "scalar", + "isList": false, + "isGenerated": false, + "sequence": false, + "hasDefaultValue": false, + "isId": true, + "maxLength": null + }, + { + "id": "public.achieved_badge_level.level", + "name": "level", + "columnName": "level", + "type": "Level", + "isRequired": true, + "kind": "scalar", + "isList": false, + "isGenerated": false, + "sequence": false, + "hasDefaultValue": false, + "isId": true, + "maxLength": null + }, + { + "id": "public.achieved_badge_level.pid", + "name": "pid", + "columnName": "pid", + "type": "int4", + "isRequired": true, + "kind": "scalar", + "isList": false, + "isGenerated": false, + "sequence": false, + "hasDefaultValue": false, + "isId": true, + "maxLength": null + }, + { + "id": "public.achieved_badge_level.notified", + "name": "notified", + "columnName": "notified", + "type": "bool", + "isRequired": true, + "kind": "scalar", + "isList": false, + "isGenerated": false, + "sequence": false, + "hasDefaultValue": true, + "isId": false, + "maxLength": null + }, + { + "id": "public.achieved_badge_level.date", + "name": "date", + "columnName": "date", + "type": "timestamp", + "isRequired": true, + "kind": "scalar", + "isList": false, + "isGenerated": false, + "sequence": false, + "hasDefaultValue": true, + "isId": false, + "maxLength": null + }, + { + "name": "badge_level", + "type": "badge_level", + "isRequired": true, + "kind": "object", + "relationName": "achieved_badge_levelTobadge_level", + "relationFromFields": [ + "name", + "level" + ], + "relationToFields": [ + "name", + "level" + ], + "isList": false, + "isId": false, + "isGenerated": false, + "sequence": false, + "hasDefaultValue": false + }, + { + "name": "participant", + "type": "participant", + "isRequired": true, + "kind": "object", + "relationName": "achieved_badge_levelToparticipant", + "relationFromFields": [ + "pid" + ], + "relationToFields": [ + "pid" + ], + "isList": false, + "isId": false, + "isGenerated": false, + "sequence": false, + "hasDefaultValue": false + } + ], + "uniqueConstraints": [ + { + "name": "achieved_badge_level_pkey", + "fields": [ + "level", + "name", + "pid" + ], + "nullNotDistinct": false + } + ] + }, "announcement": { "id": "public.announcement", "schemaName": "public", "tableName": "announcement", "fields": [ { - "id": "public.announcement.announcement_id", - "name": "announcement_id", - "columnName": "announcement_id", + "id": "public.announcement.aid", + "name": "aid", + "columnName": "aid", "type": "int4", "isRequired": true, "kind": "scalar", "isList": false, "isGenerated": false, "sequence": { - "identifier": "\"public\".\"announcement_announcement_id_seq\"", + "identifier": "\"public\".\"announcement_aid_seq\"", "increment": 1, "start": 1 }, @@ -152,10 +278,10 @@ "maxLength": null }, { - "id": "public.announcement.priority", - "name": "priority", - "columnName": "priority", - "type": "Priority", + "id": "public.announcement.date", + "name": "date", + "columnName": "date", + "type": "timestamp", "isRequired": true, "kind": "scalar", "isList": false, @@ -166,9 +292,9 @@ "maxLength": null }, { - "id": "public.announcement.creation_date", - "name": "creation_date", - "columnName": "creation_date", + "id": "public.announcement.message", + "name": "message", + "columnName": "message", "type": "text", "isRequired": true, "kind": "scalar", @@ -180,25 +306,25 @@ "maxLength": null }, { - "id": "public.announcement.message", - "name": "message", - "columnName": "message", - "type": "text", + "id": "public.announcement.priority", + "name": "priority", + "columnName": "priority", + "type": "Priority", "isRequired": true, "kind": "scalar", "isList": false, "isGenerated": false, "sequence": false, - "hasDefaultValue": false, + "hasDefaultValue": true, "isId": false, "maxLength": null }, { - "name": "user_announcement", - "type": "user_announcement", + "name": "received_announcement", + "type": "received_announcement", "isRequired": false, "kind": "object", - "relationName": "user_announcementToannouncement", + "relationName": "received_announcementToannouncement", "relationFromFields": [], "relationToFields": [], "isList": true, @@ -212,7 +338,7 @@ { "name": "announcement_pkey", "fields": [ - "announcement_id" + "aid" ], "nullNotDistinct": false } @@ -224,16 +350,16 @@ "tableName": "assigned_task", "fields": [ { - "id": "public.assigned_task.assigned_task_id", - "name": "assigned_task_id", - "columnName": "assigned_task_id", + "id": "public.assigned_task.aid", + "name": "aid", + "columnName": "aid", "type": "int4", "isRequired": true, "kind": "scalar", "isList": false, "isGenerated": false, "sequence": { - "identifier": "\"public\".\"assigned_task_assigned_task_id_seq\"", + "identifier": "\"public\".\"assigned_task_aid_seq\"", "increment": 1, "start": 1 }, @@ -242,9 +368,9 @@ "maxLength": null }, { - "id": "public.assigned_task.participant_id", - "name": "participant_id", - "columnName": "participant_id", + "id": "public.assigned_task.pid", + "name": "pid", + "columnName": "pid", "type": "int4", "isRequired": true, "kind": "scalar", @@ -256,10 +382,10 @@ "maxLength": null }, { - "id": "public.assigned_task.task_name", - "name": "task_name", - "columnName": "task_name", - "type": "text", + "id": "public.assigned_task.tid", + "name": "tid", + "columnName": "tid", + "type": "int4", "isRequired": true, "kind": "scalar", "isList": false, @@ -270,23 +396,23 @@ "maxLength": null }, { - "id": "public.assigned_task.task_status", - "name": "task_status", - "columnName": "task_status", - "type": "Status", + "id": "public.assigned_task.name", + "name": "name", + "columnName": "name", + "type": "text", "isRequired": true, "kind": "scalar", "isList": false, "isGenerated": false, "sequence": false, - "hasDefaultValue": true, + "hasDefaultValue": false, "isId": false, "maxLength": null }, { - "id": "public.assigned_task.task_type", - "name": "task_type", - "columnName": "task_type", + "id": "public.assigned_task.type", + "name": "type", + "columnName": "type", "type": "TaskType", "isRequired": true, "kind": "scalar", @@ -298,25 +424,25 @@ "maxLength": null }, { - "id": "public.assigned_task.goal_name", - "name": "goal_name", - "columnName": "goal_name", - "type": "text", - "isRequired": false, + "id": "public.assigned_task.status", + "name": "status", + "columnName": "status", + "type": "TaskStatus", + "isRequired": true, "kind": "scalar", "isList": false, "isGenerated": false, "sequence": false, - "hasDefaultValue": false, + "hasDefaultValue": true, "isId": false, "maxLength": null }, { - "id": "public.assigned_task.goal_description", - "name": "goal_description", - "columnName": "goal_description", - "type": "text", - "isRequired": false, + "id": "public.assigned_task.value", + "name": "value", + "columnName": "value", + "type": "int4", + "isRequired": true, "kind": "scalar", "isList": false, "isGenerated": false, @@ -326,10 +452,10 @@ "maxLength": null }, { - "id": "public.assigned_task.start_date", - "name": "start_date", - "columnName": "start_date", - "type": "text", + "id": "public.assigned_task.penalty", + "name": "penalty", + "columnName": "penalty", + "type": "int4", "isRequired": true, "kind": "scalar", "isList": false, @@ -340,11 +466,11 @@ "maxLength": null }, { - "id": "public.assigned_task.end_date", - "name": "end_date", - "columnName": "end_date", + "id": "public.assigned_task.comment", + "name": "comment", + "columnName": "comment", "type": "text", - "isRequired": true, + "isRequired": false, "kind": "scalar", "isList": false, "isGenerated": false, @@ -354,10 +480,10 @@ "maxLength": null }, { - "id": "public.assigned_task.marillac_bucks_addition", - "name": "marillac_bucks_addition", - "columnName": "marillac_bucks_addition", - "type": "int4", + "id": "public.assigned_task.start_date", + "name": "start_date", + "columnName": "start_date", + "type": "timestamp", "isRequired": true, "kind": "scalar", "isList": false, @@ -368,10 +494,10 @@ "maxLength": null }, { - "id": "public.assigned_task.marillac_bucks_deduction", - "name": "marillac_bucks_deduction", - "columnName": "marillac_bucks_deduction", - "type": "int4", + "id": "public.assigned_task.end_date", + "name": "end_date", + "columnName": "end_date", + "type": "timestamp", "isRequired": true, "kind": "scalar", "isList": false, @@ -381,20 +507,6 @@ "isId": false, "maxLength": null }, - { - "id": "public.assigned_task.comment", - "name": "comment", - "columnName": "comment", - "type": "text", - "isRequired": false, - "kind": "scalar", - "isList": false, - "isGenerated": false, - "sequence": false, - "hasDefaultValue": false, - "isId": false, - "maxLength": null - }, { "name": "participant", "type": "participant", @@ -402,10 +514,10 @@ "kind": "object", "relationName": "assigned_taskToparticipant", "relationFromFields": [ - "participant_id" + "pid" ], "relationToFields": [ - "participant_id" + "pid" ], "isList": false, "isId": false, @@ -418,51 +530,19 @@ { "name": "assigned_task_pkey", "fields": [ - "assigned_task_id" + "aid" ], "nullNotDistinct": false } ] }, - "badge": { - "id": "public.badge", + "badge_level": { + "id": "public.badge_level", "schemaName": "public", - "tableName": "badge", + "tableName": "badge_level", "fields": [ { - "id": "public.badge.badge_id", - "name": "badge_id", - "columnName": "badge_id", - "type": "int4", - "isRequired": true, - "kind": "scalar", - "isList": false, - "isGenerated": false, - "sequence": { - "identifier": "\"public\".\"badge_badge_id_seq\"", - "increment": 1, - "start": 1 - }, - "hasDefaultValue": true, - "isId": true, - "maxLength": null - }, - { - "id": "public.badge.badge_type", - "name": "badge_type", - "columnName": "badge_type", - "type": "BadgeType", - "isRequired": true, - "kind": "scalar", - "isList": false, - "isGenerated": false, - "sequence": false, - "hasDefaultValue": false, - "isId": false, - "maxLength": null - }, - { - "id": "public.badge.name", + "id": "public.badge_level.name", "name": "name", "columnName": "name", "type": "text", @@ -472,42 +552,42 @@ "isGenerated": false, "sequence": false, "hasDefaultValue": false, - "isId": false, + "isId": true, "maxLength": null }, { - "id": "public.badge.description", - "name": "description", - "columnName": "description", - "type": "text", + "id": "public.badge_level.level", + "name": "level", + "columnName": "level", + "type": "Level", "isRequired": true, "kind": "scalar", "isList": false, "isGenerated": false, "sequence": false, "hasDefaultValue": false, - "isId": false, + "isId": true, "maxLength": null }, { - "id": "public.badge.is_active", - "name": "is_active", - "columnName": "is_active", - "type": "bool", + "id": "public.badge_level.value", + "name": "value", + "columnName": "value", + "type": "int4", "isRequired": true, "kind": "scalar", "isList": false, "isGenerated": false, "sequence": false, - "hasDefaultValue": true, + "hasDefaultValue": false, "isId": false, "maxLength": null }, { - "id": "public.badge.is_consecutive", - "name": "is_consecutive", - "columnName": "is_consecutive", - "type": "bool", + "id": "public.badge_level.benchmark", + "name": "benchmark", + "columnName": "benchmark", + "type": "int4", "isRequired": true, "kind": "scalar", "isList": false, @@ -518,25 +598,29 @@ "maxLength": null }, { - "id": "public.badge.icon", - "name": "icon", - "columnName": "icon", - "type": "Icon", + "name": "system_badge", + "type": "system_badge", "isRequired": true, - "kind": "scalar", + "kind": "object", + "relationName": "badge_levelTosystem_badge", + "relationFromFields": [ + "name" + ], + "relationToFields": [ + "name" + ], "isList": false, + "isId": false, "isGenerated": false, "sequence": false, - "hasDefaultValue": false, - "isId": false, - "maxLength": null + "hasDefaultValue": false }, { - "name": "badge_level", - "type": "badge_level", + "name": "achieved_badge_level", + "type": "achieved_badge_level", "isRequired": false, "kind": "object", - "relationName": "badge_levelTobadge", + "relationName": "achieved_badge_levelTobadge_level", "relationFromFields": [], "relationToFields": [], "isList": true, @@ -546,11 +630,11 @@ "hasDefaultValue": false }, { - "name": "earned_badge", - "type": "earned_badge", + "name": "badge_level_progress", + "type": "badge_level_progress", "isRequired": false, "kind": "object", - "relationName": "earned_badgeTobadge", + "relationName": "badge_level_progressTobadge_level", "relationFromFields": [], "relationToFields": [], "isList": true, @@ -562,31 +646,25 @@ ], "uniqueConstraints": [ { - "name": "badge_pkey", - "fields": [ - "badge_id" - ], - "nullNotDistinct": false - }, - { - "name": "badge_name_key", + "name": "badge_level_pkey", "fields": [ + "level", "name" ], "nullNotDistinct": false } ] }, - "badge_level": { - "id": "public.badge_level", + "badge_level_progress": { + "id": "public.badge_level_progress", "schemaName": "public", - "tableName": "badge_level", + "tableName": "badge_level_progress", "fields": [ { - "id": "public.badge_level.badge_id", - "name": "badge_id", - "columnName": "badge_id", - "type": "int4", + "id": "public.badge_level_progress.name", + "name": "name", + "columnName": "name", + "type": "text", "isRequired": true, "kind": "scalar", "isList": false, @@ -597,10 +675,10 @@ "maxLength": null }, { - "id": "public.badge_level.level", + "id": "public.badge_level_progress.level", "name": "level", "columnName": "level", - "type": "int4", + "type": "Level", "isRequired": true, "kind": "scalar", "isList": false, @@ -611,9 +689,9 @@ "maxLength": null }, { - "id": "public.badge_level.benchmark", - "name": "benchmark", - "columnName": "benchmark", + "id": "public.badge_level_progress.pid", + "name": "pid", + "columnName": "pid", "type": "int4", "isRequired": true, "kind": "scalar", @@ -621,13 +699,13 @@ "isGenerated": false, "sequence": false, "hasDefaultValue": false, - "isId": false, + "isId": true, "maxLength": null }, { - "id": "public.badge_level.marillac_bucks", - "name": "marillac_bucks", - "columnName": "marillac_bucks", + "id": "public.badge_level_progress.progress", + "name": "progress", + "columnName": "progress", "type": "int4", "isRequired": true, "kind": "scalar", @@ -639,16 +717,36 @@ "maxLength": null }, { - "name": "badge", - "type": "badge", + "name": "badge_level", + "type": "badge_level", + "isRequired": true, + "kind": "object", + "relationName": "badge_level_progressTobadge_level", + "relationFromFields": [ + "name", + "level" + ], + "relationToFields": [ + "name", + "level" + ], + "isList": false, + "isId": false, + "isGenerated": false, + "sequence": false, + "hasDefaultValue": false + }, + { + "name": "participant", + "type": "participant", "isRequired": true, "kind": "object", - "relationName": "badge_levelTobadge", + "relationName": "badge_level_progressToparticipant", "relationFromFields": [ - "badge_id" + "pid" ], "relationToFields": [ - "badge_id" + "pid" ], "isList": false, "isId": false, @@ -659,31 +757,32 @@ ], "uniqueConstraints": [ { - "name": "badge_level_pkey", + "name": "badge_level_progress_pkey", "fields": [ - "badge_id", - "level" + "level", + "name", + "pid" ], "nullNotDistinct": false } ] }, - "earned_badge": { - "id": "public.earned_badge", + "custom_badge": { + "id": "public.custom_badge", "schemaName": "public", - "tableName": "earned_badge", + "tableName": "custom_badge", "fields": [ { - "id": "public.earned_badge.earned_badge_id", - "name": "earned_badge_id", - "columnName": "earned_badge_id", + "id": "public.custom_badge.cid", + "name": "cid", + "columnName": "cid", "type": "int4", "isRequired": true, "kind": "scalar", "isList": false, "isGenerated": false, "sequence": { - "identifier": "\"public\".\"earned_badge_earned_badge_id_seq\"", + "identifier": "\"public\".\"custom_badge_cid_seq\"", "increment": 1, "start": 1 }, @@ -692,10 +791,10 @@ "maxLength": null }, { - "id": "public.earned_badge.participant_id", - "name": "participant_id", - "columnName": "participant_id", - "type": "int4", + "id": "public.custom_badge.name", + "name": "name", + "columnName": "name", + "type": "text", "isRequired": true, "kind": "scalar", "isList": false, @@ -706,10 +805,10 @@ "maxLength": null }, { - "id": "public.earned_badge.badge_id", - "name": "badge_id", - "columnName": "badge_id", - "type": "int4", + "id": "public.custom_badge.icon", + "name": "icon", + "columnName": "icon", + "type": "Icon", "isRequired": true, "kind": "scalar", "isList": false, @@ -720,9 +819,9 @@ "maxLength": null }, { - "id": "public.earned_badge.date_received", - "name": "date_received", - "columnName": "date_received", + "id": "public.custom_badge.description", + "name": "description", + "columnName": "description", "type": "text", "isRequired": true, "kind": "scalar", @@ -732,12 +831,53 @@ "hasDefaultValue": false, "isId": false, "maxLength": null + } + ], + "uniqueConstraints": [ + { + "name": "custom_badge_pkey", + "fields": [ + "cid" + ], + "nullNotDistinct": false + }, + { + "name": "custom_badge_name_key", + "fields": [ + "name" + ], + "nullNotDistinct": false + } + ] + }, + "earned_custom_badge": { + "id": "public.earned_custom_badge", + "schemaName": "public", + "tableName": "earned_custom_badge", + "fields": [ + { + "id": "public.earned_custom_badge.eid", + "name": "eid", + "columnName": "eid", + "type": "int4", + "isRequired": true, + "kind": "scalar", + "isList": false, + "isGenerated": false, + "sequence": { + "identifier": "\"public\".\"earned_custom_badge_eid_seq\"", + "increment": 1, + "start": 1 + }, + "hasDefaultValue": true, + "isId": true, + "maxLength": null }, { - "id": "public.earned_badge.name", - "name": "name", - "columnName": "name", - "type": "text", + "id": "public.earned_custom_badge.pid", + "name": "pid", + "columnName": "pid", + "type": "int4", "isRequired": true, "kind": "scalar", "isList": false, @@ -748,9 +888,9 @@ "maxLength": null }, { - "id": "public.earned_badge.description", - "name": "description", - "columnName": "description", + "id": "public.earned_custom_badge.name", + "name": "name", + "columnName": "name", "type": "text", "isRequired": true, "kind": "scalar", @@ -762,9 +902,9 @@ "maxLength": null }, { - "id": "public.earned_badge.badge_icon", - "name": "badge_icon", - "columnName": "badge_icon", + "id": "public.earned_custom_badge.icon", + "name": "icon", + "columnName": "icon", "type": "Icon", "isRequired": true, "kind": "scalar", @@ -776,10 +916,10 @@ "maxLength": null }, { - "id": "public.earned_badge.level", - "name": "level", - "columnName": "level", - "type": "int4", + "id": "public.earned_custom_badge.description", + "name": "description", + "columnName": "description", + "type": "text", "isRequired": true, "kind": "scalar", "isList": false, @@ -790,34 +930,30 @@ "maxLength": null }, { - "name": "badge", - "type": "badge", + "id": "public.earned_custom_badge.notified", + "name": "notified", + "columnName": "notified", + "type": "bool", "isRequired": true, - "kind": "object", - "relationName": "earned_badgeTobadge", - "relationFromFields": [ - "badge_id" - ], - "relationToFields": [ - "badge_id" - ], + "kind": "scalar", "isList": false, - "isId": false, "isGenerated": false, "sequence": false, - "hasDefaultValue": false + "hasDefaultValue": true, + "isId": false, + "maxLength": null }, { "name": "participant", "type": "participant", "isRequired": true, "kind": "object", - "relationName": "earned_badgeToparticipant", + "relationName": "earned_custom_badgeToparticipant", "relationFromFields": [ - "participant_id" + "pid" ], "relationToFields": [ - "participant_id" + "pid" ], "isList": false, "isId": false, @@ -828,41 +964,23 @@ ], "uniqueConstraints": [ { - "name": "earned_badge_pkey", + "name": "earned_custom_badge_pkey", "fields": [ - "earned_badge_id" + "eid" ], "nullNotDistinct": false } ] }, - "goal_history": { - "id": "public.goal_history", + "earning_goal": { + "id": "public.earning_goal", "schemaName": "public", - "tableName": "goal_history", + "tableName": "earning_goal", "fields": [ { - "id": "public.goal_history.goal_history_id", - "name": "goal_history_id", - "columnName": "goal_history_id", - "type": "int4", - "isRequired": true, - "kind": "scalar", - "isList": false, - "isGenerated": false, - "sequence": { - "identifier": "\"public\".\"goal_history_goal_history_id_seq\"", - "increment": 1, - "start": 1 - }, - "hasDefaultValue": true, - "isId": true, - "maxLength": null - }, - { - "id": "public.goal_history.participant_id", - "name": "participant_id", - "columnName": "participant_id", + "id": "public.earning_goal.pid", + "name": "pid", + "columnName": "pid", "type": "int4", "isRequired": true, "kind": "scalar", @@ -870,13 +988,13 @@ "isGenerated": false, "sequence": false, "hasDefaultValue": false, - "isId": false, + "isId": true, "maxLength": null }, { - "id": "public.goal_history.goal_action", - "name": "goal_action", - "columnName": "goal_action", + "id": "public.earning_goal.action", + "name": "action", + "columnName": "action", "type": "GoalAction", "isRequired": true, "kind": "scalar", @@ -888,24 +1006,24 @@ "maxLength": null }, { - "id": "public.goal_history.goal_value", - "name": "goal_value", - "columnName": "goal_value", - "type": "int4", + "id": "public.earning_goal.date", + "name": "date", + "columnName": "date", + "type": "timestamp", "isRequired": true, "kind": "scalar", "isList": false, "isGenerated": false, "sequence": false, - "hasDefaultValue": false, - "isId": false, + "hasDefaultValue": true, + "isId": true, "maxLength": null }, { - "id": "public.goal_history.action_date", - "name": "action_date", - "columnName": "action_date", - "type": "text", + "id": "public.earning_goal.value", + "name": "value", + "columnName": "value", + "type": "int4", "isRequired": true, "kind": "scalar", "isList": false, @@ -920,12 +1038,12 @@ "type": "participant", "isRequired": true, "kind": "object", - "relationName": "goal_historyToparticipant", + "relationName": "earning_goalToparticipant", "relationFromFields": [ - "participant_id" + "pid" ], "relationToFields": [ - "participant_id" + "pid" ], "isList": false, "isId": false, @@ -936,23 +1054,24 @@ ], "uniqueConstraints": [ { - "name": "goal_history_pkey", + "name": "earning_goal_pkey", "fields": [ - "goal_history_id" + "date", + "pid" ], "nullNotDistinct": false } ] }, - "login": { - "id": "public.login", + "login_history": { + "id": "public.login_history", "schemaName": "public", - "tableName": "login", + "tableName": "login_history", "fields": [ { - "id": "public.login.participant_id", - "name": "participant_id", - "columnName": "participant_id", + "id": "public.login_history.pid", + "name": "pid", + "columnName": "pid", "type": "int4", "isRequired": true, "kind": "scalar", @@ -964,16 +1083,16 @@ "maxLength": null }, { - "id": "public.login.login_date", - "name": "login_date", - "columnName": "login_date", - "type": "text", + "id": "public.login_history.date", + "name": "date", + "columnName": "date", + "type": "timestamp", "isRequired": true, "kind": "scalar", "isList": false, "isGenerated": false, "sequence": false, - "hasDefaultValue": false, + "hasDefaultValue": true, "isId": true, "maxLength": null }, @@ -982,12 +1101,12 @@ "type": "participant", "isRequired": true, "kind": "object", - "relationName": "loginToparticipant", + "relationName": "login_historyToparticipant", "relationFromFields": [ - "participant_id" + "pid" ], "relationToFields": [ - "participant_id" + "pid" ], "isList": false, "isId": false, @@ -998,10 +1117,10 @@ ], "uniqueConstraints": [ { - "name": "login_pkey", + "name": "login_history_pkey", "fields": [ - "login_date", - "participant_id" + "date", + "pid" ], "nullNotDistinct": false } @@ -1013,16 +1132,16 @@ "tableName": "note", "fields": [ { - "id": "public.note.note_id", - "name": "note_id", - "columnName": "note_id", + "id": "public.note.nid", + "name": "nid", + "columnName": "nid", "type": "int4", "isRequired": true, "kind": "scalar", "isList": false, "isGenerated": false, "sequence": { - "identifier": "\"public\".\"note_note_id_seq\"", + "identifier": "\"public\".\"note_nid_seq\"", "increment": 1, "start": 1 }, @@ -1045,16 +1164,16 @@ "maxLength": null }, { - "id": "public.note.creation_date", - "name": "creation_date", - "columnName": "creation_date", - "type": "text", + "id": "public.note.date", + "name": "date", + "columnName": "date", + "type": "timestamp", "isRequired": true, "kind": "scalar", "isList": false, "isGenerated": false, "sequence": false, - "hasDefaultValue": false, + "hasDefaultValue": true, "isId": false, "maxLength": null } @@ -1063,7 +1182,7 @@ { "name": "note_pkey", "fields": [ - "note_id" + "nid" ], "nullNotDistinct": false } @@ -1075,9 +1194,9 @@ "tableName": "participant", "fields": [ { - "id": "public.participant.participant_id", - "name": "participant_id", - "columnName": "participant_id", + "id": "public.participant.pid", + "name": "pid", + "columnName": "pid", "type": "int4", "isRequired": true, "kind": "scalar", @@ -1103,9 +1222,9 @@ "maxLength": null }, { - "id": "public.participant.room_number", - "name": "room_number", - "columnName": "room_number", + "id": "public.participant.room", + "name": "room", + "columnName": "room", "type": "int4", "isRequired": true, "kind": "scalar", @@ -1117,24 +1236,24 @@ "maxLength": null }, { - "id": "public.participant.arrival_date", - "name": "arrival_date", - "columnName": "arrival_date", - "type": "text", + "id": "public.participant.arrival", + "name": "arrival", + "columnName": "arrival", + "type": "timestamp", "isRequired": true, "kind": "scalar", "isList": false, "isGenerated": false, "sequence": false, - "hasDefaultValue": false, + "hasDefaultValue": true, "isId": false, "maxLength": null }, { - "id": "public.participant.departure_date", - "name": "departure_date", - "columnName": "departure_date", - "type": "text", + "id": "public.participant.departure", + "name": "departure", + "columnName": "departure", + "type": "timestamp", "isRequired": false, "kind": "scalar", "isList": false, @@ -1145,37 +1264,23 @@ "maxLength": null }, { - "id": "public.participant.account_creation_date", - "name": "account_creation_date", - "columnName": "account_creation_date", - "type": "text", + "id": "public.participant.balance", + "name": "balance", + "columnName": "balance", + "type": "int4", "isRequired": true, "kind": "scalar", "isList": false, "isGenerated": false, "sequence": false, - "hasDefaultValue": false, - "isId": false, - "maxLength": null - }, - { - "id": "public.participant.account_removal_date", - "name": "account_removal_date", - "columnName": "account_removal_date", - "type": "text", - "isRequired": false, - "kind": "scalar", - "isList": false, - "isGenerated": false, - "sequence": false, - "hasDefaultValue": false, + "hasDefaultValue": true, "isId": false, "maxLength": null }, { - "id": "public.participant.marillac_bucks", - "name": "marillac_bucks", - "columnName": "marillac_bucks", + "id": "public.participant.total_earnings", + "name": "total_earnings", + "columnName": "total_earnings", "type": "int4", "isRequired": true, "kind": "scalar", @@ -1187,18 +1292,18 @@ "maxLength": null }, { - "id": "public.participant.marillac_bucks_goal", - "name": "marillac_bucks_goal", - "columnName": "marillac_bucks_goal", - "type": "int4", + "name": "achieved_badge_level", + "type": "achieved_badge_level", "isRequired": false, - "kind": "scalar", - "isList": false, + "kind": "object", + "relationName": "achieved_badge_levelToparticipant", + "relationFromFields": [], + "relationToFields": [], + "isList": true, + "isId": false, "isGenerated": false, "sequence": false, - "hasDefaultValue": false, - "isId": false, - "maxLength": null + "hasDefaultValue": false }, { "name": "assigned_task", @@ -1215,11 +1320,11 @@ "hasDefaultValue": false }, { - "name": "earned_badge", - "type": "earned_badge", + "name": "badge_level_progress", + "type": "badge_level_progress", "isRequired": false, "kind": "object", - "relationName": "earned_badgeToparticipant", + "relationName": "badge_level_progressToparticipant", "relationFromFields": [], "relationToFields": [], "isList": true, @@ -1229,11 +1334,11 @@ "hasDefaultValue": false }, { - "name": "goal_history", - "type": "goal_history", + "name": "earned_custom_badge", + "type": "earned_custom_badge", "isRequired": false, "kind": "object", - "relationName": "goal_historyToparticipant", + "relationName": "earned_custom_badgeToparticipant", "relationFromFields": [], "relationToFields": [], "isList": true, @@ -1243,11 +1348,11 @@ "hasDefaultValue": false }, { - "name": "login", - "type": "login", + "name": "earning_goal", + "type": "earning_goal", "isRequired": false, "kind": "object", - "relationName": "loginToparticipant", + "relationName": "earning_goalToparticipant", "relationFromFields": [], "relationToFields": [], "isList": true, @@ -1257,11 +1362,11 @@ "hasDefaultValue": false }, { - "name": "participant_progress", - "type": "participant_progress", + "name": "login_history", + "type": "login_history", "isRequired": false, "kind": "object", - "relationName": "participant_progressToparticipant", + "relationName": "login_historyToparticipant", "relationFromFields": [], "relationToFields": [], "isList": true, @@ -1271,11 +1376,11 @@ "hasDefaultValue": false }, { - "name": "transaction", - "type": "transaction", + "name": "received_announcement", + "type": "received_announcement", "isRequired": false, "kind": "object", - "relationName": "transactionToparticipant", + "relationName": "received_announcementToparticipant", "relationFromFields": [], "relationToFields": [], "isList": true, @@ -1285,11 +1390,11 @@ "hasDefaultValue": false }, { - "name": "user_announcement", - "type": "user_announcement", + "name": "transaction", + "type": "transaction", "isRequired": false, "kind": "object", - "relationName": "user_announcementToparticipant", + "relationName": "transactionToparticipant", "relationFromFields": [], "relationToFields": [], "isList": true, @@ -1303,21 +1408,21 @@ { "name": "participant_pkey", "fields": [ - "participant_id" + "pid" ], "nullNotDistinct": false } ] }, - "participant_progress": { - "id": "public.participant_progress", + "received_announcement": { + "id": "public.received_announcement", "schemaName": "public", - "tableName": "participant_progress", + "tableName": "received_announcement", "fields": [ { - "id": "public.participant_progress.participant_id", - "name": "participant_id", - "columnName": "participant_id", + "id": "public.received_announcement.aid", + "name": "aid", + "columnName": "aid", "type": "int4", "isRequired": true, "kind": "scalar", @@ -1329,24 +1434,24 @@ "maxLength": null }, { - "id": "public.participant_progress.optional_tasks_completed", - "name": "optional_tasks_completed", - "columnName": "optional_tasks_completed", + "id": "public.received_announcement.pid", + "name": "pid", + "columnName": "pid", "type": "int4", "isRequired": true, "kind": "scalar", "isList": false, "isGenerated": false, "sequence": false, - "hasDefaultValue": true, - "isId": false, + "hasDefaultValue": false, + "isId": true, "maxLength": null }, { - "id": "public.participant_progress.weeks_optional_tasks_complete", - "name": "weeks_optional_tasks_complete", - "columnName": "weeks_optional_tasks_complete", - "type": "int4", + "id": "public.received_announcement.read", + "name": "read", + "columnName": "read", + "type": "bool", "isRequired": true, "kind": "scalar", "isList": false, @@ -1357,10 +1462,10 @@ "maxLength": null }, { - "id": "public.participant_progress.weeks_mandatory_tasks_complete", - "name": "weeks_mandatory_tasks_complete", - "columnName": "weeks_mandatory_tasks_complete", - "type": "int4", + "id": "public.received_announcement.pinned", + "name": "pinned", + "columnName": "pinned", + "type": "bool", "isRequired": true, "kind": "scalar", "isList": false, @@ -1371,53 +1476,78 @@ "maxLength": null }, { - "id": "public.participant_progress.weeks_individual_goal_complete", - "name": "weeks_individual_goal_complete", - "columnName": "weeks_individual_goal_complete", - "type": "int4", + "name": "announcement", + "type": "announcement", "isRequired": true, - "kind": "scalar", + "kind": "object", + "relationName": "received_announcementToannouncement", + "relationFromFields": [ + "aid" + ], + "relationToFields": [ + "aid" + ], "isList": false, + "isId": false, "isGenerated": false, "sequence": false, - "hasDefaultValue": true, - "isId": false, - "maxLength": null + "hasDefaultValue": false }, { - "id": "public.participant_progress.days_logged_in", - "name": "days_logged_in", - "columnName": "days_logged_in", - "type": "int4", + "name": "participant", + "type": "participant", "isRequired": true, - "kind": "scalar", + "kind": "object", + "relationName": "received_announcementToparticipant", + "relationFromFields": [ + "pid" + ], + "relationToFields": [ + "pid" + ], "isList": false, + "isId": false, "isGenerated": false, "sequence": false, - "hasDefaultValue": true, - "isId": false, - "maxLength": null - }, + "hasDefaultValue": false + } + ], + "uniqueConstraints": [ { - "id": "public.participant_progress.total_earnings", - "name": "total_earnings", - "columnName": "total_earnings", - "type": "int4", + "name": "received_announcement_pkey", + "fields": [ + "aid", + "pid" + ], + "nullNotDistinct": false + } + ] + }, + "report_recipient": { + "id": "public.report_recipient", + "schemaName": "public", + "tableName": "report_recipient", + "fields": [ + { + "id": "public.report_recipient.email", + "name": "email", + "columnName": "email", + "type": "text", "isRequired": true, "kind": "scalar", "isList": false, "isGenerated": false, "sequence": false, - "hasDefaultValue": true, - "isId": false, + "hasDefaultValue": false, + "isId": true, "maxLength": null }, { - "id": "public.participant_progress.badges_achieved", - "name": "badges_achieved", - "columnName": "badges_achieved", - "type": "int4[]", - "isRequired": false, + "id": "public.report_recipient.weekly", + "name": "weekly", + "columnName": "weekly", + "type": "bool", + "isRequired": true, "kind": "scalar", "isList": false, "isGenerated": false, @@ -1427,11 +1557,11 @@ "maxLength": null }, { - "id": "public.participant_progress.task_types_tried", - "name": "task_types_tried", - "columnName": "task_types_tried", - "type": "text[]", - "isRequired": false, + "id": "public.report_recipient.monthly", + "name": "monthly", + "columnName": "monthly", + "type": "bool", + "isRequired": true, "kind": "scalar", "isList": false, "isGenerated": false, @@ -1439,64 +1569,42 @@ "hasDefaultValue": true, "isId": false, "maxLength": null - }, - { - "name": "participant", - "type": "participant", - "isRequired": true, - "kind": "object", - "relationName": "participant_progressToparticipant", - "relationFromFields": [ - "participant_id" - ], - "relationToFields": [ - "participant_id" - ], - "isList": false, - "isId": false, - "isGenerated": false, - "sequence": false, - "hasDefaultValue": false } ], "uniqueConstraints": [ { - "name": "participant_progress_pkey", + "name": "report_recipient_pkey", "fields": [ - "participant_id" + "email" ], "nullNotDistinct": false } ] }, - "report_recipient": { - "id": "public.report_recipient", + "system_badge": { + "id": "public.system_badge", "schemaName": "public", - "tableName": "report_recipient", + "tableName": "system_badge", "fields": [ { - "id": "public.report_recipient.report_recipient_id", - "name": "report_recipient_id", - "columnName": "report_recipient_id", - "type": "int4", + "id": "public.system_badge.name", + "name": "name", + "columnName": "name", + "type": "text", "isRequired": true, "kind": "scalar", "isList": false, "isGenerated": false, - "sequence": { - "identifier": "\"public\".\"report_recipient_report_recipient_id_seq\"", - "increment": 1, - "start": 1 - }, - "hasDefaultValue": true, + "sequence": false, + "hasDefaultValue": false, "isId": true, "maxLength": null }, { - "id": "public.report_recipient.email", - "name": "email", - "columnName": "email", - "type": "text", + "id": "public.system_badge.icon", + "name": "icon", + "columnName": "icon", + "type": "Icon", "isRequired": true, "kind": "scalar", "isList": false, @@ -1507,23 +1615,23 @@ "maxLength": null }, { - "id": "public.report_recipient.weekly", - "name": "weekly", - "columnName": "weekly", - "type": "bool", + "id": "public.system_badge.description", + "name": "description", + "columnName": "description", + "type": "text", "isRequired": true, "kind": "scalar", "isList": false, "isGenerated": false, "sequence": false, - "hasDefaultValue": true, + "hasDefaultValue": false, "isId": false, "maxLength": null }, { - "id": "public.report_recipient.monthly", - "name": "monthly", - "columnName": "monthly", + "id": "public.system_badge.is_active", + "name": "is_active", + "columnName": "is_active", "type": "bool", "isRequired": true, "kind": "scalar", @@ -1535,25 +1643,25 @@ "maxLength": null }, { - "id": "public.report_recipient.last_report_sent", - "name": "last_report_sent", - "columnName": "last_report_sent", - "type": "text", + "name": "badge_level", + "type": "badge_level", "isRequired": false, - "kind": "scalar", - "isList": false, + "kind": "object", + "relationName": "badge_levelTosystem_badge", + "relationFromFields": [], + "relationToFields": [], + "isList": true, + "isId": false, "isGenerated": false, "sequence": false, - "hasDefaultValue": false, - "isId": false, - "maxLength": null + "hasDefaultValue": false } ], "uniqueConstraints": [ { - "name": "report_recipient_pkey", + "name": "system_badge_pkey", "fields": [ - "report_recipient_id" + "name" ], "nullNotDistinct": false } @@ -1565,16 +1673,16 @@ "tableName": "task", "fields": [ { - "id": "public.task.task_id", - "name": "task_id", - "columnName": "task_id", + "id": "public.task.tid", + "name": "tid", + "columnName": "tid", "type": "int4", "isRequired": true, "kind": "scalar", "isList": false, "isGenerated": false, "sequence": { - "identifier": "\"public\".\"task_task_id_seq\"", + "identifier": "\"public\".\"task_tid_seq\"", "increment": 1, "start": 1 }, @@ -1583,9 +1691,9 @@ "maxLength": null }, { - "id": "public.task.task_name", - "name": "task_name", - "columnName": "task_name", + "id": "public.task.name", + "name": "name", + "columnName": "name", "type": "text", "isRequired": true, "kind": "scalar", @@ -1597,9 +1705,9 @@ "maxLength": null }, { - "id": "public.task.task_type", - "name": "task_type", - "columnName": "task_type", + "id": "public.task.type", + "name": "type", + "columnName": "type", "type": "TaskType", "isRequired": true, "kind": "scalar", @@ -1611,10 +1719,10 @@ "maxLength": null }, { - "id": "public.task.recurrence_preference", - "name": "recurrence_preference", - "columnName": "recurrence_preference", - "type": "RecurrenceFrequency", + "id": "public.task.value", + "name": "value", + "columnName": "value", + "type": "int4", "isRequired": true, "kind": "scalar", "isList": false, @@ -1625,25 +1733,25 @@ "maxLength": null }, { - "id": "public.task.repeat_days", - "name": "repeat_days", - "columnName": "repeat_days", - "type": "DayOfWeek[]", - "isRequired": false, + "id": "public.task.penalty", + "name": "penalty", + "columnName": "penalty", + "type": "int4", + "isRequired": true, "kind": "scalar", "isList": false, "isGenerated": false, "sequence": false, - "hasDefaultValue": false, + "hasDefaultValue": true, "isId": false, "maxLength": null }, { - "id": "public.task.time_preference", - "name": "time_preference", - "columnName": "time_preference", - "type": "TimeOption", - "isRequired": true, + "id": "public.task.comment", + "name": "comment", + "columnName": "comment", + "type": "text", + "isRequired": false, "kind": "scalar", "isList": false, "isGenerated": false, @@ -1653,11 +1761,11 @@ "maxLength": null }, { - "id": "public.task.start_time", - "name": "start_time", - "columnName": "start_time", - "type": "text", - "isRequired": false, + "id": "public.task.day_preference", + "name": "day_preference", + "columnName": "day_preference", + "type": "DayPreference", + "isRequired": true, "kind": "scalar", "isList": false, "isGenerated": false, @@ -1667,10 +1775,10 @@ "maxLength": null }, { - "id": "public.task.end_time", - "name": "end_time", - "columnName": "end_time", - "type": "text", + "id": "public.task.days", + "name": "days", + "columnName": "days", + "type": "DayOfWeek[]", "isRequired": false, "kind": "scalar", "isList": false, @@ -1681,10 +1789,10 @@ "maxLength": null }, { - "id": "public.task.marillac_bucks_addition", - "name": "marillac_bucks_addition", - "columnName": "marillac_bucks_addition", - "type": "int4", + "id": "public.task.time_preference", + "name": "time_preference", + "columnName": "time_preference", + "type": "TimePreference", "isRequired": true, "kind": "scalar", "isList": false, @@ -1695,11 +1803,11 @@ "maxLength": null }, { - "id": "public.task.marillac_bucks_deduction", - "name": "marillac_bucks_deduction", - "columnName": "marillac_bucks_deduction", - "type": "int4", - "isRequired": true, + "id": "public.task.start_time", + "name": "start_time", + "columnName": "start_time", + "type": "time", + "isRequired": false, "kind": "scalar", "isList": false, "isGenerated": false, @@ -1709,10 +1817,10 @@ "maxLength": null }, { - "id": "public.task.comment", - "name": "comment", - "columnName": "comment", - "type": "text", + "id": "public.task.end_time", + "name": "end_time", + "columnName": "end_time", + "type": "time", "isRequired": false, "kind": "scalar", "isList": false, @@ -1727,14 +1835,14 @@ { "name": "task_pkey", "fields": [ - "task_id" + "tid" ], "nullNotDistinct": false }, { - "name": "task_task_name_key", + "name": "task_name_key", "fields": [ - "task_name" + "name" ], "nullNotDistinct": false } @@ -1746,42 +1854,38 @@ "tableName": "transaction", "fields": [ { - "id": "public.transaction.transaction_id", - "name": "transaction_id", - "columnName": "transaction_id", + "id": "public.transaction.pid", + "name": "pid", + "columnName": "pid", "type": "int4", "isRequired": true, "kind": "scalar", "isList": false, "isGenerated": false, - "sequence": { - "identifier": "\"public\".\"transaction_transaction_id_seq\"", - "increment": 1, - "start": 1 - }, - "hasDefaultValue": true, + "sequence": false, + "hasDefaultValue": false, "isId": true, "maxLength": null }, { - "id": "public.transaction.participant_id", - "name": "participant_id", - "columnName": "participant_id", - "type": "int4", + "id": "public.transaction.date", + "name": "date", + "columnName": "date", + "type": "timestamp", "isRequired": true, "kind": "scalar", "isList": false, "isGenerated": false, "sequence": false, - "hasDefaultValue": false, - "isId": false, + "hasDefaultValue": true, + "isId": true, "maxLength": null }, { - "id": "public.transaction.transaction_date", - "name": "transaction_date", - "columnName": "transaction_date", - "type": "text", + "id": "public.transaction.amount", + "name": "amount", + "columnName": "amount", + "type": "int4", "isRequired": true, "kind": "scalar", "isList": false, @@ -1792,38 +1896,24 @@ "maxLength": null }, { - "id": "public.transaction.transaction_type", - "name": "transaction_type", - "columnName": "transaction_type", + "id": "public.transaction.type", + "name": "type", + "columnName": "type", "type": "TransactionType", "isRequired": true, "kind": "scalar", "isList": false, "isGenerated": false, "sequence": false, - "hasDefaultValue": false, + "hasDefaultValue": true, "isId": false, "maxLength": null }, { - "id": "public.transaction.description", - "name": "description", - "columnName": "description", + "id": "public.transaction.reason", + "name": "reason", + "columnName": "reason", "type": "text", - "isRequired": false, - "kind": "scalar", - "isList": false, - "isGenerated": false, - "sequence": false, - "hasDefaultValue": false, - "isId": false, - "maxLength": null - }, - { - "id": "public.transaction.marillac_bucks", - "name": "marillac_bucks", - "columnName": "marillac_bucks", - "type": "int4", "isRequired": true, "kind": "scalar", "isList": false, @@ -1840,10 +1930,10 @@ "kind": "object", "relationName": "transactionToparticipant", "relationFromFields": [ - "participant_id" + "pid" ], "relationToFields": [ - "participant_id" + "pid" ], "isList": false, "isId": false, @@ -1856,116 +1946,8 @@ { "name": "transaction_pkey", "fields": [ - "transaction_id" - ], - "nullNotDistinct": false - } - ] - }, - "user_announcement": { - "id": "public.user_announcement", - "schemaName": "public", - "tableName": "user_announcement", - "fields": [ - { - "id": "public.user_announcement.read", - "name": "read", - "columnName": "read", - "type": "bool", - "isRequired": true, - "kind": "scalar", - "isList": false, - "isGenerated": false, - "sequence": false, - "hasDefaultValue": true, - "isId": false, - "maxLength": null - }, - { - "id": "public.user_announcement.pinned", - "name": "pinned", - "columnName": "pinned", - "type": "bool", - "isRequired": true, - "kind": "scalar", - "isList": false, - "isGenerated": false, - "sequence": false, - "hasDefaultValue": true, - "isId": false, - "maxLength": null - }, - { - "id": "public.user_announcement.announcement_id", - "name": "announcement_id", - "columnName": "announcement_id", - "type": "int4", - "isRequired": true, - "kind": "scalar", - "isList": false, - "isGenerated": false, - "sequence": false, - "hasDefaultValue": false, - "isId": true, - "maxLength": null - }, - { - "id": "public.user_announcement.participant_id", - "name": "participant_id", - "columnName": "participant_id", - "type": "int4", - "isRequired": true, - "kind": "scalar", - "isList": false, - "isGenerated": false, - "sequence": false, - "hasDefaultValue": false, - "isId": true, - "maxLength": null - }, - { - "name": "announcement", - "type": "announcement", - "isRequired": true, - "kind": "object", - "relationName": "user_announcementToannouncement", - "relationFromFields": [ - "announcement_id" - ], - "relationToFields": [ - "announcement_id" - ], - "isList": false, - "isId": false, - "isGenerated": false, - "sequence": false, - "hasDefaultValue": false - }, - { - "name": "participant", - "type": "participant", - "isRequired": true, - "kind": "object", - "relationName": "user_announcementToparticipant", - "relationFromFields": [ - "participant_id" - ], - "relationToFields": [ - "participant_id" - ], - "isList": false, - "isId": false, - "isGenerated": false, - "sequence": false, - "hasDefaultValue": false - } - ], - "uniqueConstraints": [ - { - "name": "user_announcement_pkey", - "fields": [ - "announcement_id", - "participant_id" + "date", + "pid" ], "nullNotDistinct": false } @@ -1973,17 +1955,6 @@ } }, "enums": { - "BadgeType": { - "schemaName": "public", - "values": [ - { - "name": "CUSTOM" - }, - { - "name": "SYSTEM" - } - ] - }, "DayOfWeek": { "schemaName": "public", "values": [ @@ -2010,6 +1981,23 @@ } ] }, + "DayPreference": { + "schemaName": "public", + "values": [ + { + "name": "DAILY" + }, + { + "name": "DAY_RANGE" + }, + { + "name": "EVERY_SELECTED_DAYS" + }, + { + "name": "PARTICIPANT_PREFERENCE" + } + ] + }, "GoalAction": { "schemaName": "public", "values": [ @@ -2057,6 +2045,9 @@ { "name": "PENCIL" }, + { + "name": "PLANT" + }, { "name": "TOOL" }, @@ -2065,38 +2056,41 @@ } ] }, - "Priority": { + "Level": { "schemaName": "public", "values": [ { - "name": "CRITICAL" + "name": "BRONZE" }, { - "name": "HIGH" + "name": "DIAMOND" }, { - "name": "NORMAL" + "name": "GOLD" + }, + { + "name": "NOVICE" + }, + { + "name": "SILVER" } ] }, - "RecurrenceFrequency": { + "Priority": { "schemaName": "public", "values": [ { - "name": "ANY_SELECTED_DAYS" - }, - { - "name": "DAILY" + "name": "CRITICAL" }, { - "name": "EVERY_SELECTED_DAYS" + "name": "HIGH" }, { - "name": "PARTICIPANT_PREFERENCE" + "name": "NORMAL" } ] }, - "Status": { + "TaskStatus": { "schemaName": "public", "values": [ { @@ -2127,7 +2121,7 @@ } ] }, - "TimeOption": { + "TimePreference": { "schemaName": "public", "values": [ { diff --git a/backend/prisma/seed/initialData.ts b/backend/prisma/seed/initialData.ts new file mode 100644 index 00000000..3070c2d5 --- /dev/null +++ b/backend/prisma/seed/initialData.ts @@ -0,0 +1,359 @@ +import { + DayOfWeek, + DayPreference, + Icon, + Level, + TaskType, + TimePreference, +} from "@prisma/client"; +import * as systemBadge from "../../constants/systemBadges"; + +export const systemBadges = [ + { + name: systemBadge.LOGIN, + description: "Logged in for several days in a row", + is_active: true, + icon: Icon.FOUR_STAR, + }, + { + name: systemBadge.PERFECT_SCORE_OPTIONAL, + description: "Completed 3+ optional tasks for several weeks", + is_active: true, + icon: Icon.FLOWER, + }, + { + name: systemBadge.PERFECT_SCORE_REQUIRED, + description: "Completed all mandatory tasks for several weeks", + is_active: true, + icon: Icon.PENCIL, + }, + { + name: systemBadge.MONEY_EARNED, + description: "Total marillac buck earnings", + is_active: true, + icon: Icon.MONEY, + }, + { + name: systemBadge.PR_LEADER, + description: "Accumulation of other badges & levels", + is_active: true, + icon: Icon.DIAMOND, + }, + { + name: systemBadge.INDIVIDUAL_GOAL, + description: "Set and completed all individual goals for several weeks", + is_active: true, + icon: Icon.GEMSTONE, + }, + { + name: systemBadge.FIRST_GOAL, + description: "Set and complete first individual goal", + is_active: true, + icon: Icon.FIVE_STAR, + }, + { + name: systemBadge.JACK_OF_ALL_TRADES, + description: "Total tried tasks", + is_active: true, + icon: Icon.TOOL, + }, +]; + +export const badgeLevels = [ + { + name: systemBadge.LOGIN, + level: Level.NOVICE, + value: 2, + benchmark: 1, + }, + { + name: systemBadge.LOGIN, + level: Level.BRONZE, + value: 5, + benchmark: 7, + }, + { + name: systemBadge.LOGIN, + level: Level.SILVER, + value: 10, + benchmark: 30, + }, + { + name: systemBadge.LOGIN, + level: Level.GOLD, + value: 20, + benchmark: 90, + }, + { + name: systemBadge.LOGIN, + level: Level.DIAMOND, + value: 40, + benchmark: 180, + }, + { + name: systemBadge.PERFECT_SCORE_OPTIONAL, + level: Level.NOVICE, + value: 2, + benchmark: 1, + }, + { + name: systemBadge.PERFECT_SCORE_OPTIONAL, + level: Level.BRONZE, + value: 5, + benchmark: 4, + }, + { + name: systemBadge.PERFECT_SCORE_OPTIONAL, + level: Level.SILVER, + value: 10, + benchmark: 8, + }, + { + name: systemBadge.PERFECT_SCORE_OPTIONAL, + level: Level.GOLD, + value: 20, + benchmark: 12, + }, + { + name: systemBadge.PERFECT_SCORE_OPTIONAL, + level: Level.DIAMOND, + value: 40, + benchmark: 16, + }, + { + name: systemBadge.PERFECT_SCORE_REQUIRED, + level: Level.NOVICE, + value: 2, + benchmark: 1, + }, + { + name: systemBadge.PERFECT_SCORE_REQUIRED, + level: Level.BRONZE, + value: 5, + benchmark: 4, + }, + { + name: systemBadge.PERFECT_SCORE_REQUIRED, + level: Level.SILVER, + value: 10, + benchmark: 8, + }, + { + name: systemBadge.PERFECT_SCORE_REQUIRED, + level: Level.GOLD, + value: 20, + benchmark: 12, + }, + { + name: systemBadge.PERFECT_SCORE_REQUIRED, + level: Level.DIAMOND, + value: 40, + benchmark: 16, + }, + { + name: systemBadge.MONEY_EARNED, + level: Level.NOVICE, + value: 2, + benchmark: 100, + }, + { + name: systemBadge.MONEY_EARNED, + level: Level.BRONZE, + value: 5, + benchmark: 500, + }, + { + name: systemBadge.MONEY_EARNED, + level: Level.SILVER, + value: 10, + benchmark: 1000, + }, + { + name: systemBadge.MONEY_EARNED, + level: Level.GOLD, + value: 20, + benchmark: 4000, + }, + { + name: systemBadge.MONEY_EARNED, + level: Level.DIAMOND, + value: 40, + benchmark: 8000, + }, + { + name: systemBadge.PR_LEADER, + level: Level.NOVICE, + value: 2, + benchmark: 4, + }, + { + name: systemBadge.PR_LEADER, + level: Level.BRONZE, + value: 5, + benchmark: 4, + }, + { + name: systemBadge.PR_LEADER, + level: Level.SILVER, + value: 10, + benchmark: 4, + }, + { + name: systemBadge.PR_LEADER, + level: Level.GOLD, + value: 20, + benchmark: 4, + }, + { + name: systemBadge.PR_LEADER, + level: Level.DIAMOND, + value: 40, + benchmark: 4, + }, + { + name: systemBadge.INDIVIDUAL_GOAL, + level: Level.NOVICE, + value: 2, + benchmark: 1, + }, + { + name: systemBadge.INDIVIDUAL_GOAL, + level: Level.BRONZE, + value: 5, + benchmark: 4, + }, + { + name: systemBadge.INDIVIDUAL_GOAL, + level: Level.SILVER, + value: 10, + benchmark: 8, + }, + { + name: systemBadge.INDIVIDUAL_GOAL, + level: Level.GOLD, + value: 20, + benchmark: 12, + }, + { + name: systemBadge.INDIVIDUAL_GOAL, + level: Level.DIAMOND, + value: 40, + benchmark: 16, + }, + { + name: systemBadge.FIRST_GOAL, + level: Level.NOVICE, + value: 2, + benchmark: 1, + }, + { + name: systemBadge.JACK_OF_ALL_TRADES, + level: Level.SILVER, + value: 10, + benchmark: 10, + }, +]; + +export const tasks = [ + { + name: "Weekly Review with CM", + type: TaskType.REQUIRED, + value: 5, + day_preference: DayPreference.DAY_RANGE, + days: [DayOfWeek.MONDAY, DayOfWeek.SUNDAY], + time_preference: TimePreference.ANYTIME, + }, + { + name: "Skill Session with PM", + type: TaskType.REQUIRED, + value: 5, + day_preference: DayPreference.DAY_RANGE, + days: [DayOfWeek.MONDAY, DayOfWeek.SUNDAY], + time_preference: TimePreference.ANYTIME, + }, + { + name: "Housing Plan", + type: TaskType.REQUIRED, + value: 10, + day_preference: DayPreference.DAY_RANGE, + days: [DayOfWeek.MONDAY, DayOfWeek.SUNDAY], + time_preference: TimePreference.ANYTIME, + }, + { + name: "Weekly House Meeting", + type: TaskType.OPTIONAL, + value: 5, + day_preference: DayPreference.DAY_RANGE, + days: [DayOfWeek.MONDAY, DayOfWeek.SUNDAY], + time_preference: TimePreference.ANYTIME, + }, + { + name: "Curfew", + type: TaskType.OPTIONAL, + value: 5, + day_preference: DayPreference.DAILY, + days: [], + time_preference: TimePreference.ANYTIME, + }, + { + name: "Chore", + type: TaskType.OPTIONAL, + value: 10, + day_preference: DayPreference.DAILY, + days: [], + time_preference: TimePreference.ANYTIME, + }, + { + name: "Laundry", + type: TaskType.OPTIONAL, + value: 2, + day_preference: DayPreference.DAY_RANGE, + days: [DayOfWeek.MONDAY, DayOfWeek.SUNDAY], + time_preference: TimePreference.ANYTIME, + }, + { + name: "Bedroom Inspection", + type: TaskType.OPTIONAL, + value: 5, + day_preference: DayPreference.EVERY_SELECTED_DAYS, + days: [ + DayOfWeek.MONDAY, + DayOfWeek.TUESDAY, + DayOfWeek.WEDNESDAY, + DayOfWeek.THURSDAY, + ], + time_preference: TimePreference.ANYTIME, + }, + { + name: "Speaker's Corner", + type: TaskType.OPTIONAL, + value: 10, + day_preference: DayPreference.DAY_RANGE, + days: [DayOfWeek.MONDAY, DayOfWeek.SUNDAY], + time_preference: TimePreference.ANYTIME, + }, + { + name: "Counselling", + type: TaskType.OPTIONAL, + value: 10, + day_preference: DayPreference.DAY_RANGE, + days: [DayOfWeek.MONDAY, DayOfWeek.SUNDAY], + time_preference: TimePreference.ANYTIME, + }, + { + name: "Community Program", + type: TaskType.OPTIONAL, + value: 10, + day_preference: DayPreference.DAILY, + days: [], + time_preference: TimePreference.ANYTIME, + }, + { + name: "Individual Goal", + type: TaskType.INDIVIDUAL_GOAL, + value: 10, + day_preference: DayPreference.PARTICIPANT_PREFERENCE, + days: [], + time_preference: TimePreference.PARTICIPANT_PREFERENCE, + }, +]; diff --git a/backend/prisma/seed/random.ts b/backend/prisma/seed/random.ts new file mode 100644 index 00000000..1e97acf5 --- /dev/null +++ b/backend/prisma/seed/random.ts @@ -0,0 +1,11 @@ +const chars = + "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*()_+-=[]{}|;:,.<>?~"; + +export const number = (min: number, max: number) => + Math.floor(Math.random() * (max - min + 1)) + min; +export const password = () => + Array.from({ length: 12 }, () => + chars.charAt(Math.floor(Math.random() * chars.length)) + ).join(""); +export const date = (start = new Date(2022, 0, 1), end = new Date()) => + new Date(start.getTime() + Math.random() * (end.getTime() - start.getTime())); diff --git a/backend/seed/seed.config.ts b/backend/prisma/seed/seed.config.ts similarity index 100% rename from backend/seed/seed.config.ts rename to backend/prisma/seed/seed.config.ts diff --git a/backend/prisma/seed/seed.ts b/backend/prisma/seed/seed.ts new file mode 100644 index 00000000..04a42918 --- /dev/null +++ b/backend/prisma/seed/seed.ts @@ -0,0 +1,70 @@ +import { createSeedClient } from "@snaplet/seed"; +import { badgeLevels, systemBadges, tasks } from "./initialData"; +import db from "../index"; +import * as random from "./random"; +import { initBadgeLevelProgress } from "../../utils/badgeUtils"; + +async function initDb() { + const systemBadgeCount = await db.systemBadge.count(); + const initialized = systemBadgeCount !== 0; + if (!initialized) { + await Promise.all( + systemBadges.map(async (systemBadge) => { + return db.systemBadge.create({ + data: systemBadge, + }); + }) + ); + + await Promise.all( + badgeLevels.map(async (badgeLevel) => { + return db.badgeLevel.create({ + data: badgeLevel, + }); + }) + ); + + await Promise.all( + tasks.map(async (task) => { + return db.task.create({ + data: task, + }); + }) + ); + } +} + +async function generateMockData(seed: any) { + const participants = await seed.participant((createMany: any) => + createMany(10, (ret: any) => ({ + pid: ret.index + 1, + password: random.password(), + room: ret.index + 1, + arrival: random.date(), + departure: null, + balance: random.number(0, 2500), + })) + ); + + await Promise.all( + participants.participant.map((p: any) => initBadgeLevelProgress(p.pid)) + ); +} + +const main = async () => { + const seed = await createSeedClient(); + const environment: string = process.env.NODE_ENV || "development"; + const isDevelopment: boolean = environment === "development"; + if (isDevelopment) { + await seed.$resetDatabase(); + await initDb(); + await generateMockData(seed); + } else { + await initDb(); + } +}; + +main().catch((e) => { + console.error(e); + process.exit(1); +}); diff --git a/backend/resolvers/announcementResolver.ts b/backend/resolvers/announcementResolver.ts deleted file mode 100644 index 7e8ed764..00000000 --- a/backend/resolvers/announcementResolver.ts +++ /dev/null @@ -1,255 +0,0 @@ -import { - PrismaClient, - Prisma, - Announcement, - Priority, - UserAnnouncement, -} from "@prisma/client"; -import { getNow } from "../utils/formatDateTime"; - -const prisma = new PrismaClient(); - -type AnnouncementFilter = "ALL" | "UNREAD" | "PINNED" | "IMPORTANT"; - -const announcementResolver = { - Query: { - getAllAnnouncements: async (): Promise => { - try { - return await prisma.announcement.findMany({ - orderBy: { - creation_date: "desc", - }, - include: { - user_announcements: true, - }, - }); - } catch (err) { - throw new Error("Failed to get all announcements"); - } - }, - getAnnouncementsInDateRange: async ( - _parent: undefined, - { start, end }: { start: string; end: string } - ): Promise => { - try { - return await prisma.announcement.findMany({ - where: { - creation_date: { - lte: end, - gte: start, - }, - }, - orderBy: { - creation_date: "desc", - }, - include: { - user_announcements: { - include: { - participant: { - select: { - room_number: true, - }, - }, - }, - }, - }, - }); - } catch (err) { - throw new Error("Failed to get announcements in date range"); - } - }, - getAnnouncementsByParticipants: async ( - _parent: undefined, - { participant_ids }: { participant_ids: number[] } - ): Promise => { - try { - return await prisma.announcement.findMany({ - orderBy: { - creation_date: "desc", - }, - where: { - user_announcements: { - every: { - participant_id: { - in: participant_ids, - }, - }, - }, - }, - include: { - user_announcements: true, - }, - }); - } catch (err) { - throw new Error("Failed to get announcements by participants"); - } - }, - getAnnouncementsByParticipantId: async ( - _parent: undefined, - { participant_id }: { participant_id: number } - ): Promise => { - try { - return await prisma.userAnnouncement.findMany({ - orderBy: { - announcement: { - creation_date: "desc", - }, - }, - where: { - participant_id, - }, - include: { - announcement: true, - }, - }); - } catch (err) { - throw new Error( - `Failed to get announcements by participant id: ${err}` - ); - } - }, - getParticipantAnnouncements: async ( - _parent: undefined, - { - participantId, - filter, - }: { participantId: number; filter: AnnouncementFilter } - ) => { - const where: Prisma.UserAnnouncementWhereInput = { - participant_id: participantId, - }; - - if (filter === "UNREAD") { - where.read = false; - } else if (filter === "PINNED") { - where.pinned = true; - } else if (filter === "IMPORTANT") { - where.announcement = { - priority: { in: [Priority.HIGH, Priority.CRITICAL] }, - }; - } - - return prisma.userAnnouncement.findMany({ - where, - include: { announcement: true }, - orderBy: { announcement: { creation_date: "desc" } }, - }); - }, - }, - Mutation: { - createAnnouncement: async ( - _parent: undefined, - { - priority, - participants, - message, - }: { - priority: Priority; - participants: number[]; - message: string; - } - ): Promise => { - try { - const newAnnouncement = await prisma.announcement.create({ - data: { - priority, - creation_date: getNow(), - message, - }, - }); - - await Promise.all( - participants.map((participant) => - prisma.userAnnouncement.create({ - data: { - participant_id: participant, - announcement_id: newAnnouncement.announcement_id, - }, - }) - ) - ); - - return true; - } catch (err) { - throw new Error("Failed to create announcement"); - } - }, - editAnnouncement: async ( - _parent: undefined, - { - announcement_id, - priority, - message, - }: { - announcement_id: number; - priority?: Priority; - message?: string; - } - ): Promise => { - const updatedData: { priority?: Priority; message?: string } = {}; - if (priority) updatedData.priority = priority; - if (message) updatedData.message = message; - - await prisma.announcement.update({ - where: { announcement_id }, - data: updatedData, - }); - return true; - }, - deleteAnnouncement: async ( - _parent: undefined, - { announcement_id }: { announcement_id: number } - ): Promise => { - await prisma.announcement.delete({ - where: { - announcement_id, - }, - }); - return true; - }, - updatePinReadAnnouncement: async ( - _parent: undefined, - { - announcement_id, - participant_id, - read, - pinned, - }: { - announcement_id: number; - participant_id: number; - pinned?: boolean; - read?: boolean; - } - ): Promise => { - const updatedData: { pinned?: boolean; read?: boolean } = {}; - if (pinned !== undefined) updatedData.pinned = pinned; - if (read !== undefined) updatedData.read = read; - - await prisma.userAnnouncement.update({ - where: { - announcement_id_participant_id: { - announcement_id, - participant_id, - }, - }, - data: updatedData, - }); - return true; - }, - }, - UserAnnouncement: { - participant: async (parent: { participant_id: number }) => { - try { - return await prisma.participant.findUnique({ - where: { - participant_id: parent.participant_id, - }, - }); - } catch (err) { - throw new Error("Failed to get participant by announcement"); - } - }, - }, -}; - -export default announcementResolver; diff --git a/backend/resolvers/assignedTaskResolver.ts b/backend/resolvers/assignedTaskResolver.ts deleted file mode 100644 index 1fb72a9b..00000000 --- a/backend/resolvers/assignedTaskResolver.ts +++ /dev/null @@ -1,240 +0,0 @@ -import { AssignedTask, TaskType, Status } from "@prisma/client"; -import prisma from "../prisma"; -import { - formatDateFromDateString, - formatDateTime, - getWeekBounds, -} from "../utils/formatDateTime"; - -type CalendarEvent = { - id: number; - title: string; - start: string; - end: string; - allDay: boolean; - task_status: Status; - task_type: TaskType; - marillacBucksAddition: number; - marillac_bucks_deduction: number; - comment: string | null; -}; - -function convertAssignedTaskToCalendarEvent( - task: AssignedTask, - is_specific: boolean -): CalendarEvent { - const event: CalendarEvent = { - id: task.assigned_task_id, - title: task.task_name, - start: task.start_date, - end: task.end_date, - allDay: !is_specific, - task_status: task.task_status, - task_type: task.task_type, - marillacBucksAddition: task.marillac_bucks_addition, - marillac_bucks_deduction: task.marillac_bucks_deduction, - comment: task.comment, - }; - return event; -} - -function groupTasks(tasks: AssignedTask[]) { - const specific: CalendarEvent[] = []; - const anytime: CalendarEvent[] = []; - const anyday: CalendarEvent[] = []; - const { weekStart, weekEnd } = getWeekBounds(); - - tasks.forEach((task) => { - if (task.start_date < weekStart || task.start_date > weekEnd) { - return; - } - - const start = formatDateFromDateString(task.start_date); - const end = formatDateFromDateString(task.end_date); - - const isSameDay = start.toDateString() === end.toDateString(); - const isDayStart = start.getHours() === 0 && start.getMinutes() === 0; - const isDayEnd = end.getHours() === 23 && end.getMinutes() === 59; - - if (!isSameDay) { - anyday.push(convertAssignedTaskToCalendarEvent(task, false)); - return; - } - - if (isDayStart && isDayEnd) { - anytime.push(convertAssignedTaskToCalendarEvent(task, false)); - } else { - specific.push(convertAssignedTaskToCalendarEvent(task, true)); - } - }); - - return { SPECIFIC: specific, ANYTIME: anytime, ANYDAY: anyday }; -} - -const assignedTaskResolver = { - Query: { - hasCompletedAllRequiredTasks: async ( - _parent: undefined, - { participantId }: { participantId: number } - ): Promise => { - const today = new Date(); - const dayOfWeek = today.getDay(); - const daysFromMonday = dayOfWeek === 0 ? 6 : dayOfWeek - 1; - - const monday = new Date(today); - monday.setDate(today.getDate() - daysFromMonday); - monday.setHours(0, 0, 0, 0); - - const sunday = new Date(monday); - sunday.setDate(monday.getDate() + 6); - sunday.setHours(23, 59, 59, 999); - - const weekStart = formatDateTime(monday, false); - const weekEnd = formatDateTime(sunday, false); - - // Get all required tasks assigned to this participant for the current week - const requiredTasks = await prisma.assignedTask.findMany({ - where: { - participant_id: participantId, - task_type: TaskType.REQUIRED, - start_date: { - gte: weekStart, - }, - end_date: { - lte: weekEnd, - }, - }, - }); - - // If no required tasks are assigned, consider it as completed - if (requiredTasks.length === 0) { - return true; - } - - // Check if all required tasks are completed - const completedTasks = requiredTasks.filter( - (task) => task.task_status === "COMPLETE" - ); - - return completedTasks.length === requiredTasks.length; - }, - getAssignedTasks: async ( - _parent: undefined, - { participant_id }: { participant_id: number } - ): Promise<{ - SPECIFIC: CalendarEvent[]; - ANYTIME: CalendarEvent[]; - ANYDAY: CalendarEvent[]; - }> => { - const assignedTasks = await prisma.assignedTask.findMany({ - where: { participant_id }, - }); - return groupTasks(assignedTasks); - }, - }, - Mutation: { - deleteAssignedTask: async ( - _parent: undefined, - { assigned_task_id }: { assigned_task_id: number } - ): Promise => { - await prisma.assignedTask.delete({ - where: { assigned_task_id }, - }); - return true; - }, - updateAssignedTask: async ( - _parent: undefined, - { - id, - taskName, - taskStatus, - taskType, - goalName, - goalDescription, - startDate, - endDate, - marillacBucksAddition, - marillacBucksDeduction, - comment, - }: { - id: number; - taskName?: string; - taskStatus?: Status; - taskType?: TaskType; - goalName?: string; - goalDescription?: string; - startDate?: string; - endDate?: string; - marillacBucksAddition?: number; - marillacBucksDeduction?: number; - comment?: string; - } - ): Promise => { - const updatedData: Partial = {}; - - if (taskName) updatedData.task_name = taskName; - if (taskType) updatedData.task_type = taskType; - if (taskStatus) updatedData.task_status = taskStatus; - if (goalName) updatedData.goal_name = goalName; - if (goalDescription) updatedData.goal_description = goalDescription; - if (startDate) updatedData.start_date = startDate; - if (endDate) updatedData.end_date = endDate; - if (marillacBucksAddition) - updatedData.marillac_bucks_addition = marillacBucksAddition; - if (marillacBucksDeduction) - updatedData.marillac_bucks_deduction = marillacBucksDeduction; - if (comment) updatedData.comment = comment; - - await prisma.assignedTask.update({ - where: { assigned_task_id: id }, - data: updatedData, - }); - - return true; - }, - createAssignedTask: async ( - _parent: undefined, - { - participantId, - taskName, - startDate, - endDate, - marillacBucksAddition, - marillacBucksDeduction, - taskType, - goalName, - goalDescription, - comment, - }: { - participantId: number; - taskName: string; - startDate: string; - endDate: string; - marillacBucksAddition: number; - marillacBucksDeduction: number; - taskType: TaskType; - goalName?: string; - goalDescription?: string; - comment?: string; - } - ): Promise => { - await prisma.assignedTask.create({ - data: { - participant_id: participantId, - task_name: taskName, - start_date: startDate, - end_date: endDate, - marillac_bucks_addition: marillacBucksAddition, - marillac_bucks_deduction: marillacBucksDeduction, - task_type: taskType, - goal_name: goalName, - goal_description: goalDescription, - comment, - }, - }); - return true; - }, - }, -}; - -export default assignedTaskResolver; diff --git a/backend/resolvers/badgeResolver.ts b/backend/resolvers/badgeResolver.ts deleted file mode 100644 index 6c66ad1c..00000000 --- a/backend/resolvers/badgeResolver.ts +++ /dev/null @@ -1,316 +0,0 @@ -import { - EarnedBadge, - BadgeType, - Icon, - Badge, - // BadgeLevel, - PrismaClient, -} from "@prisma/client"; - -// import { getNow } from "../utils/formatDateTime"; - -const prisma = new PrismaClient(); - -const badgeResolver = { - Query: { - getCustomBadges: async (): Promise => { - try { - return await prisma.badge.findMany({ - where: { - badge_type: "CUSTOM", - }, - include: { - badge_level: true, - }, - orderBy: { - name: "asc", - }, - }); - } catch (err) { - const message = - err instanceof Error ? err.message : "Error getting custom badges"; - throw new Error(message); - } - }, - getSystemBadges: async (): Promise => { - try { - return await prisma.badge.findMany({ - where: { - badge_type: "SYSTEM", - }, - include: { - badge_level: { - orderBy: { - level: "asc", - }, - }, - }, - orderBy: { - name: "asc", - }, - }); - } catch (err) { - const message = - err instanceof Error ? err.message : "Error getting system badges"; - throw new Error(message); - } - }, - getEarnedBadgesByParticipant: async ( - _parent: undefined, - { participantId }: { participantId: number } - ): Promise => { - return prisma.earnedBadge.findMany({ - where: { participant_id: participantId }, - orderBy: { date_received: "desc" }, - }); - }, - }, - - Mutation: { - updateBadgeStatus: async ( - _parent: undefined, - { - badge_id, - is_active, - }: { - badge_id: number; - is_active: boolean; - } - ): Promise => { - const badge = await prisma.badge.findUnique({ - where: { badge_id }, - }); - if (!badge) { - throw new Error("Badge not found"); - } - await prisma.badge.update({ - where: { badge_id }, - data: { - is_active, - }, - }); - return true; - }, - // fix: need to also add marillac bucks for participant here - assignCustomBadge: async ( - _parent: undefined, - { - badge_id, - marillac_bucks, - participant_ids, - }: { - badge_id: number; - marillac_bucks: number; - participant_ids: number[]; - } - ): Promise => { - const badge = await prisma.badge.findUnique({ - where: { badge_id }, - }); - if (!badge) throw new Error(`Badge with ID ${badge_id} not found`); - - const participants = await prisma.participant.findMany({ - where: { - participant_id: { - in: participant_ids, - }, - }, - }); - if (participants.length !== participant_ids.length) - throw new Error(`Some IDs were invalid!`); - - const existingBadges = await prisma.earnedBadge.findMany({ - where: { - participant_id: { in: participant_ids }, - name: badge.name, - }, - select: { participant_id: true }, - }); - const alreadyEarnedIds = new Set( - existingBadges.map((b) => b.participant_id) - ); - const eligibleParticipantIds = participant_ids.filter( - (id) => !alreadyEarnedIds.has(id) - ); - - if (eligibleParticipantIds.length === 0) { - throw new Error("Participants have already received this badge"); - } - - await prisma.$transaction( - eligibleParticipantIds.map((id) => - prisma.earnedBadge.create({ - data: { - badge_id: badge.badge_id, - participant_id: id, - date_received: new Date().toISOString(), - name: badge.name, - description: badge.description, - badge_icon: badge.icon, - level: 1, - }, - }) - ) - ); - - // also add marillac bucks for the earned badge - await prisma.$transaction( - eligibleParticipantIds.map((id) => - prisma.participant.update({ - where: { participant_id: id }, - data: { - marillac_bucks: { - increment: marillac_bucks, - }, - }, - }) - ) - ); - - return eligibleParticipantIds; - }, - - editCustomBadge: async ( - _parent: undefined, - { - custom_badge_id, - new_custom_badge_name, - new_custom_badge_description, - }: { - custom_badge_id: number; - new_custom_badge_name?: string; - new_custom_badge_description?: string; - } - ): Promise => { - if ( - new_custom_badge_name === undefined && - new_custom_badge_description === undefined - ) { - throw new Error("No edits provided"); - } - await prisma.badge.update({ - where: { badge_id: custom_badge_id, badge_type: "CUSTOM" }, - data: { - ...(new_custom_badge_name !== undefined && { - name: new_custom_badge_name, - }), - ...(new_custom_badge_description !== undefined && { - description: new_custom_badge_description, - }), - }, - }); - return true; - }, - editSystemBadge: async ( - _parent: undefined, - { - system_badge_id, - system_badge_name, - system_badge_criteria, - }: { - system_badge_id: number; - system_badge_name: string; - system_badge_criteria?: string; - } - ): Promise => { - const badge = await prisma.badge.findUnique({ - where: { badge_id: system_badge_id }, - }); - if (!badge || badge.badge_type !== "SYSTEM") { - throw new Error("BAdge not found or not a system badge"); - } - await prisma.badge.update({ - where: { badge_id: system_badge_id }, - data: { - name: system_badge_name, - ...(system_badge_criteria !== undefined && { - description: system_badge_criteria, - }), - }, - }); - return true; - }, - - createCustomBadge: async ( - _parent: undefined, - { - name, - description, - icon, - }: { - name: string; - description: string; - icon: Icon; - } - ): Promise => { - await prisma.badge.create({ - data: { - name, - description, - icon, - is_consecutive: false, - badge_type: "CUSTOM", - }, - }); - return true; - }, - deleteCustomBadge: async ( - _parent: undefined, - { - badge_id, - }: { - badge_id: number; - } - ): Promise => { - const badge = await prisma.badge.findUnique({ - where: { badge_id }, - }); - - if (!badge) { - throw new Error(`Badge with ID ${badge_id} does not exist`); - } - - if (badge.badge_type !== BadgeType.CUSTOM) { - throw new Error( - `Badge with ID ${badge_id} is not a custom badge and cannot be deleted` - ); - } - - await prisma.badge.delete({ - where: { badge_id }, - }); - - return true; - }, - editBadgeLevel: async ( - _parent: undefined, - { - badge_id, - badge_level, - benchmark, - marillac_bucks, - }: { - badge_id: number; - badge_level: number; - benchmark: number; - marillac_bucks: number; - } - ): Promise => { - await prisma.badgeLevel.update({ - where: { - badge_id_level: { - badge_id, - level: badge_level, - }, - }, - data: { - benchmark, - marillac_bucks, - }, - }); - return true; - }, - }, -}; - -export default badgeResolver; diff --git a/backend/resolvers/loginResolver.ts b/backend/resolvers/loginResolver.ts deleted file mode 100644 index 3b3db6ce..00000000 --- a/backend/resolvers/loginResolver.ts +++ /dev/null @@ -1,110 +0,0 @@ -import jwt from "jsonwebtoken"; -import { Participant, PrismaClient } from "@prisma/client"; -import { evaluateBadge } from "../utils/evaluateBadge"; -import { updateLoginStreak } from "../utils/updateLoginStreak"; - -const prisma = new PrismaClient(); - -const loginResolver = { - Mutation: { - adminLogin: async ( - _parent: undefined, - { - role, - password, - }: { - role: string; - password: string; - } - ) => { - let storedPasswordHash = ""; - - if (role === "admin") { - storedPasswordHash = process.env.ADMIN_STAFF_PASSWORD ?? ""; - } else if (role === "relief") { - storedPasswordHash = process.env.RELIEF_STAFF_PASSWORD ?? ""; - } else { - throw new Error("Role provided does not exist"); - } - - const isPasswordValid: boolean = password === storedPasswordHash; - - if (!isPasswordValid) { - throw new Error("Password is incorrect"); - } - - const jwtSecretKey = process.env.JWT_SECRET ?? ""; - - if (!jwtSecretKey) { - throw new Error("Something went wrong"); - } - - const token = jwt.sign({ role }, jwtSecretKey, { - expiresIn: "12h", - }); - - return { token }; - }, - participantLogin: async ( - _parent: undefined, - { - id, - password, - }: { - id: number; - password: string; - } - ) => { - let participant: Participant | null = null; - try { - participant = await prisma.participant.findUnique({ - where: { - participant_id: id, - account_removal_date: null, - }, - }); - } catch (err) { - throw new Error("Something went wrong"); - } - - if (!participant) { - throw new Error("ID # does not exist"); - } - - const isPasswordValid = password === participant.password; - - if (!isPasswordValid) { - throw new Error("Password is incorrect"); - } - - const jwtSecretKey = process.env.JWT_SECRET ?? ""; - - if (!jwtSecretKey) { - console.error("JWT secret key not setup"); - throw new Error("Something went wrong"); - } - - const token = jwt.sign( - { - role: "participant", - id, - }, - jwtSecretKey, - { - expiresIn: "12h", - } - ); - - try { - const days = await updateLoginStreak(participant.participant_id); - await evaluateBadge(days, id, "Log-in Badge"); - } catch (err) { - console.error("Failed to record login:", err); - } - - return { token }; - }, - }, -}; - -export default loginResolver; diff --git a/backend/resolvers/noteResolver.ts b/backend/resolvers/noteResolver.ts deleted file mode 100644 index ed8b7acd..00000000 --- a/backend/resolvers/noteResolver.ts +++ /dev/null @@ -1,55 +0,0 @@ -import { Note, PrismaClient } from "@prisma/client"; -import { getNow } from "../utils/formatDateTime"; - -const prisma = new PrismaClient(); - -const noteResolver = { - Query: { - getNotes: async (): Promise => { - try { - return await prisma.note.findMany({ - orderBy: [{ creation_date: "desc" }], - }); - } catch (err) { - const message = - err instanceof Error ? err.message : "Error getting notes"; - throw new Error(message); - } - }, - }, - Mutation: { - createNote: async ( - _parent: undefined, - { - message, - }: { - message: string; - } - ): Promise => { - await prisma.note.create({ - data: { - message, - creation_date: getNow(), - }, - }); - return true; - }, - deleteNote: async ( - _parent: undefined, - { - note_id, - }: { - note_id: number; - } - ): Promise => { - await prisma.note.delete({ - where: { - note_id, - }, - }); - return true; - }, - }, -}; - -export default noteResolver; diff --git a/backend/resolvers/participantResolver.ts b/backend/resolvers/participantResolver.ts deleted file mode 100644 index d994d9fe..00000000 --- a/backend/resolvers/participantResolver.ts +++ /dev/null @@ -1,404 +0,0 @@ -import { Participant, Prisma, PrismaClient } from "@prisma/client"; -import { getToday } from "../utils/formatDateTime"; -import { checkAndRecordGoalReached } from "../utils/checkGoalReached"; - -const prisma = new PrismaClient(); - -const participantResolver = { - Query: { - getCurrentParticipants: async (): Promise => { - const participants = await prisma.participant.findMany({ - where: { - OR: [ - { departure_date: null }, - { departure_date: { gt: getToday() } }, - ], - }, - orderBy: [{ room_number: "asc" }], - }); - return participants; - }, - getPastParticipants: async (): Promise => { - const participants = await prisma.participant.findMany({ - where: { - departure_date: { - not: null, - lte: getToday(), - }, - }, - orderBy: [{ departure_date: "desc" }], - }); - return participants; - }, - getParticipantByRoom: async ( - _parent: undefined, - { room_number }: { room_number: number } - ): Promise => { - try { - return await prisma.participant.findFirst({ - where: { - AND: [ - { room_number }, - { - OR: [ - { departure_date: null }, - { departure_date: { gt: getToday() } }, - ], - }, - ], - }, - include: { - assigned_tasks: true, - }, - }); - } catch (error) { - throw new Error("Failed to get participant by room"); - } - }, - getParticipantsByRooms: async ( - _parent: undefined, - { room_numbers }: { room_numbers: number[] } - ): Promise => { - try { - return await prisma.participant.findMany({ - where: { - AND: [ - { room_number: { in: room_numbers } }, - { - OR: [ - { departure_date: null }, - { departure_date: { gt: getToday() } }, - ], - }, - ], - }, - }); - } catch (error) { - throw new Error("Failed to get participants by rooms"); - } - }, - getParticipantById: async ( - _parent: undefined, - { participantId }: { participantId: number } - ): Promise => { - return prisma.participant.findUnique({ - where: { - participant_id: participantId, - }, - }); - }, - getGoalHistoryByParticipant: async ( - _parent: undefined, - { - participant_id, - start_date, - end_date, - }: { - participant_id: number; - start_date?: string; - end_date?: string; - } - ) => { - const result = await prisma.$queryRaw` - SELECT * FROM goal_history - WHERE participant_id = ${participant_id} - ${ - start_date - ? Prisma.sql`AND action_date >= ${start_date}` - : Prisma.empty - } - ${ - end_date ? Prisma.sql`AND action_date <= ${end_date}` : Prisma.empty - } - ORDER BY action_date DESC - `; - - return result; - }, - getWeeklyEarnings: async ( - _parent: undefined, - { participant_id }: { participant_id: number } - ): Promise => { - const today = new Date(); - - const dayOfWeek = today.getDay(); - const mondayOffset = dayOfWeek === 0 ? 6 : dayOfWeek - 1; - - const monday = new Date(today); - monday.setDate(today.getDate() - mondayOffset); - monday.setHours(0, 0, 0, 0); - - const todayStr = today.toISOString().split("T")[0]; - const mondayStr = monday.toISOString().split("T")[0]; - - const results = await prisma.$queryRaw< - { transaction_date: string; total: number }[] - >` - SELECT - transaction_date, - SUM(marillac_bucks) AS total - FROM transaction - WHERE participant_id = ${participant_id} - AND transaction_type = 'EARNING' - AND transaction_date >= ${mondayStr} - AND transaction_date <= ${todayStr} - GROUP BY transaction_date - ORDER BY transaction_date ASC - `; - - // Create array for Monday through Sunday (7 days) - const weekDays: string[] = Array.from({ length: 7 }, (_, i) => { - const d = new Date(monday); - d.setDate(monday.getDate() + i); - return d.toISOString().split("T")[0]; - }); - - const earningsMap = Object.fromEntries( - results.map((r) => [r.transaction_date, Number(r.total)]) - ); - - return weekDays.map((day) => earningsMap[day] || 0); - }, - }, - Mutation: { - createParticipant: async ( - _parent: undefined, - { - participant_id, - room_number, - arrival_date, - password, - }: { - participant_id: number; - room_number: number; - arrival_date: string; - password: string; - } - ): Promise => { - let existingParticipant: Participant | null = null; - - existingParticipant = await prisma.participant.findUnique({ - where: { participant_id }, - }); - - if (existingParticipant) { - throw new Error("Participant already exists"); - } - - let occupiedRoom: Participant | null = null; - - occupiedRoom = await prisma.participant.findFirst({ - where: { - room_number, - OR: [ - { departure_date: null }, - { departure_date: { gte: getToday() } }, - ], - }, - }); - - if (occupiedRoom) { - throw new Error("Room is occupied"); - } - - await prisma.participant.create({ - data: { - participant_id, - room_number, - arrival_date, - password, - account_creation_date: getToday(), - participant_progress: { - create: {}, - }, - }, - }); - return true; - }, - updateParticipant: async ( - _parent: undefined, - { - participant_id, - room_number, - arrival_date, - departure_date, - account_creation_date, - account_removal_date, - marillac_bucks, - marillac_bucks_goal, - password, - }: { - participant_id: number; - room_number?: number; - arrival_date?: string; - departure_date?: string; - account_creation_date?: string; - account_removal_date?: string; - marillac_bucks?: number; - marillac_bucks_goal?: number; - password?: string; - } - ): Promise => { - const updatedData: Partial = {}; - if (room_number) updatedData.room_number = room_number; - if (arrival_date) updatedData.arrival_date = arrival_date; - if (departure_date) updatedData.departure_date = departure_date; - if (account_creation_date) - updatedData.account_creation_date = account_creation_date; - if (account_removal_date) - updatedData.account_removal_date = account_removal_date; - if (marillac_bucks) updatedData.marillac_bucks = marillac_bucks; - if (marillac_bucks_goal) - updatedData.marillac_bucks_goal = marillac_bucks_goal; - if (password) updatedData.password = password; - - await prisma.participant.update({ - where: { participant_id }, - data: updatedData, - }); - - return true; - }, - updateMarillacBucks: async ( - _parent: undefined, - { - participant_id, - marillac_bucks, - }: { - participant_id: number; - marillac_bucks: number; - reason: string; - } - ): Promise => { - await prisma.participant.update({ - where: { participant_id }, - data: { marillac_bucks }, - }); - - // Check if this update caused the participant to reach their goal - await checkAndRecordGoalReached(participant_id); - - return true; - }, - setMarillacBucksGoal: async ( - _parent: undefined, - { - participant_id, - goal_value, - }: { - participant_id: number; - goal_value: number; - } - ): Promise => { - console.log("🎯 Backend: setMarillacBucksGoal called"); - console.log("📋 Params:", { participant_id, goal_value }); - - if (goal_value <= 0) { - console.error("❌ Invalid goal value:", goal_value); - throw new Error("Goal value must be greater than 0"); - } - - console.log("✅ Updating participant goal..."); - await prisma.participant.update({ - where: { participant_id }, - data: { marillac_bucks_goal: goal_value }, - }); - console.log("✅ Participant goal updated"); - - console.log("✅ Inserting into goal_history..."); - await prisma.$executeRaw` - INSERT INTO goal_history (participant_id, goal_action, goal_value, action_date) - VALUES (${participant_id}, 'SET', ${goal_value}, ${getToday()}) - `; - console.log("✅ Goal history recorded"); - - console.log("🎯 Goal successfully set!"); - return true; - }, - updateMarillacBucksGoal: async ( - _parent: undefined, - { - participant_id, - new_goal_value, - }: { - participant_id: number; - new_goal_value: number; - } - ): Promise => { - const participant = await prisma.participant.findUnique({ - where: { participant_id }, - }); - - if (!participant) { - throw new Error("Participant not found"); - } - - if (new_goal_value <= participant.marillac_bucks) { - throw new Error( - "Goals must be greater than current Marillac Bucks Balance" - ); - } - - await prisma.participant.update({ - where: { participant_id }, - data: { marillac_bucks_goal: new_goal_value }, - }); - - await prisma.$executeRaw` - INSERT INTO goal_history (participant_id, goal_action, goal_value, action_date) - VALUES (${participant_id}, 'SET', ${new_goal_value}, ${getToday()}) - `; - - return true; - }, - createEarningTransaction: async ( - _parent: undefined, - { - participant_id, - transaction_date, - marillac_bucks, - description, - }: { - participant_id: number; - transaction_date: string; - marillac_bucks: number; - description?: string; - } - ): Promise => { - if (marillac_bucks <= 0) { - throw new Error("Marillac bucks must be greater than 0"); - } - - const participant = await prisma.participant.findUnique({ - where: { participant_id }, - }); - - if (!participant) { - throw new Error("Participant not found"); - } - - await prisma.transaction.create({ - data: { - participant_id, - transaction_date, - transaction_type: "EARNING", - marillac_bucks, - description: description || "Daily earnings", - }, - }); - - const newBalance = participant.marillac_bucks + marillac_bucks; - - await prisma.participant.update({ - where: { participant_id }, - data: { marillac_bucks: newBalance }, - }); - - await checkAndRecordGoalReached(participant_id); - - return true; - }, - }, -}; - -export default participantResolver; diff --git a/backend/resolvers/reportResolver.ts b/backend/resolvers/reportResolver.ts deleted file mode 100644 index 7cfbd092..00000000 --- a/backend/resolvers/reportResolver.ts +++ /dev/null @@ -1,81 +0,0 @@ -/* eslint-disable @typescript-eslint/ban-ts-comment */ -// @ts-nocheck -import prisma from "../prisma"; -/* eslint-disable */ -const reportResolver = { - Query: { - getReportRecipients: async (): Promise => { - return await prisma.reportRecipient.findMany({ - orderBy: { email: "asc" }, - }); - }, - }, - Mutation: { - createReportRecipient: async ( - _parent: undefined, - { - email, - weekly, - monthly, - }: { email: string; weekly: boolean; monthly: boolean } - ): Promise => { - try { - await prisma.reportRecipient.create({ - data: { email, weekly, monthly }, - }); - return true; - } catch (err) { - console.error(err); - return false; - } - }, - - updateReportRecipient: async ( - _parent: undefined, - { - report_recipient_id, - email, - weekly, - monthly, - }: { - report_recipient_id: number; - email?: string; - weekly?: boolean; - monthly?: boolean; - } - ): Promise => { - try { - const updateData: any = {}; - if (email !== undefined) updateData.email = email; - if (weekly !== undefined) updateData.weekly = weekly; - if (monthly !== undefined) updateData.monthly = monthly; - - await prisma.reportRecipient.update({ - where: { report_recipient_id }, - data: updateData, - }); - return true; - } catch (err) { - console.error(err); - return false; - } - }, - - deleteReportRecipient: async ( - _parent: undefined, - { report_recipient_id }: { report_recipient_id: number } - ): Promise => { - try { - await prisma.reportRecipient.delete({ - where: { report_recipient_id }, - }); - return true; - } catch (err) { - console.error(err); - return false; - } - }, - }, -}; - -export default reportResolver; diff --git a/backend/resolvers/taskResolver.ts b/backend/resolvers/taskResolver.ts deleted file mode 100644 index 5ed357f5..00000000 --- a/backend/resolvers/taskResolver.ts +++ /dev/null @@ -1,171 +0,0 @@ -import { - DayOfWeek, - PrismaClient, - RecurrenceFrequency, - Task, - TaskType, - TimeOption, -} from "@prisma/client"; - -const prisma = new PrismaClient(); - -const taskResolver = { - Query: { - // getTaskById: async ( - // _parent: undefined, - // { taskId }: { taskId: number }, - // ): Promise => { - // return taskService.getTaskById(taskId); - // }, - getTasksByType: async ( - _parent: undefined, - { type }: { type: TaskType[] } - ): Promise> => { - try { - return await prisma.task.findMany({ - where: { task_type: { in: type } }, - }); - } catch (err) { - throw new Error(`Failed to get tasks by type`); - } - }, - // getTasksByRecurrenceFrequency: async ( - // _parent: undefined, - // { recurrencePreference }: { recurrencePreference: RecurrenceFrequency }, - // ): Promise => { - // return taskService.getTasksByRecurrenceFrequency(recurrencePreference); - // }, - getAssignedTasksByParticipantIdAndDate: async ( - _parent: undefined, - { participantId, date }: { participantId: number; date: string } - ) => { - try { - const dateStart = `${date}, 00:00`; - const dateEnd = `${date}, 23:59`; - const assignedTasks = await prisma.assignedTask.findMany({ - where: { - participant_id: participantId, - start_date: { lte: dateEnd }, - end_date: { gte: dateStart }, - }, - }); - return assignedTasks; - } catch (err) { - throw new Error("Something went wrong"); - } - }, - }, - Mutation: { - createTask: async ( - _parent: undefined, - { - type, - name, - recurrencePreference, - repeatDays, - timePreference, - marillacBucks, - deduction, - startTime, - endTime, - comment, - }: { - type: TaskType; - name: string; - recurrencePreference: RecurrenceFrequency; - repeatDays: DayOfWeek[]; - timePreference: TimeOption; - marillacBucks: number; - deduction: number; - startTime?: string; - endTime?: string; - comment?: string; - } - ): Promise => { - await prisma.task.create({ - data: { - task_type: type, - task_name: name, - recurrence_preference: recurrencePreference, - repeat_days: repeatDays, - time_preference: timePreference, - marillac_bucks_addition: marillacBucks, - marillac_bucks_deduction: deduction, - start_time: startTime, - end_time: endTime, - comment, - }, - }); - return true; - }, - updateTask: async ( - _parent: undefined, - { - id, - type, - name, - recurrencePreference, - repeatDays, - timePreference, - marillacBucks, - deduction, - startTime, - endTime, - comment, - }: { - id: number; - type?: TaskType; - name?: string; - recurrencePreference?: RecurrenceFrequency; - repeatDays?: DayOfWeek[]; - timePreference?: TimeOption; - marillacBucks?: number; - deduction?: number; - startTime?: string; - endTime?: string; - comment?: string; - } - ): Promise => { - const updatedData: { - task_type?: TaskType; - task_name?: string; - recurrence_preference?: RecurrenceFrequency; - repeat_days?: DayOfWeek[]; - time_preference?: TimeOption; - marillac_bucks_addition?: number; - marillac_bucks_deduction?: number; - start_time?: string; - end_time?: string; - comment?: string; - } = {}; - if (type) updatedData.task_type = type; - if (name) updatedData.task_name = name; - if (recurrencePreference) - updatedData.recurrence_preference = recurrencePreference; - if (repeatDays) updatedData.repeat_days = repeatDays; - if (timePreference) updatedData.time_preference = timePreference; - if (marillacBucks) updatedData.marillac_bucks_addition = marillacBucks; - if (deduction) updatedData.marillac_bucks_deduction = deduction; - if (startTime) updatedData.start_time = startTime; - if (endTime) updatedData.end_time = endTime; - if (comment) updatedData.comment = comment; - - await prisma.task.update({ - where: { task_id: id }, - data: updatedData, - }); - return true; - }, - deleteTaskById: async ( - _parent: undefined, - { taskId }: { taskId: number } - ): Promise => { - await prisma.task.delete({ - where: { task_id: taskId }, - }); - return true; - }, - }, -}; - -export default taskResolver; diff --git a/backend/seed/mockData.ts b/backend/seed/mockData.ts deleted file mode 100644 index 0f4238c5..00000000 --- a/backend/seed/mockData.ts +++ /dev/null @@ -1,651 +0,0 @@ -import { - TaskType, - BadgeType, - RecurrenceFrequency, - DayOfWeek, - TimeOption, - Priority, - Status, - Icon, -} from "@prisma/client"; -import { getRecentDate } from "../utils/formatDateTime"; - -export const participants = [ - { - participant_id: 1, - password: "test", - room_number: 1, - arrival_date: getRecentDate(0, false), - account_creation_date: getRecentDate(0, false), - departure_date: null, - account_removal_date: null, - marillac_bucks: 10, - marillac_bucks_goal: 150, - }, - { - participant_id: 2, - password: "test", - room_number: 3, - arrival_date: getRecentDate(1, false), - account_creation_date: getRecentDate(1, false), - departure_date: null, - account_removal_date: null, - marillac_bucks: 120, - marillac_bucks_goal: null, - }, - { - participant_id: 3, - password: "test", - room_number: 7, - arrival_date: getRecentDate(8, false), - account_creation_date: getRecentDate(8, false), - departure_date: null, - account_removal_date: null, - marillac_bucks: 75, - marillac_bucks_goal: null, - }, - { - participant_id: 8, - password: "test", - room_number: 8, - arrival_date: getRecentDate(100, false), - account_creation_date: getRecentDate(100, false), - departure_date: getRecentDate(3, false), - account_removal_date: getRecentDate(3, false), - marillac_bucks: 50, - marillac_bucks_goal: 800, - }, - { - participant_id: 9, - password: "test", - room_number: 9, - arrival_date: getRecentDate(20, false), - account_creation_date: getRecentDate(20, false), - departure_date: getRecentDate(4, false), - account_removal_date: getRecentDate(4, false), - marillac_bucks: 60, - marillac_bucks_goal: 720, - }, -]; - -export const tasks = [ - { - task_name: "Individual Goal", - task_type: TaskType.INDIVIDUAL_GOAL, - recurrence_preference: RecurrenceFrequency.PARTICIPANT_PREFERENCE, - repeat_days: [], - time_preference: RecurrenceFrequency.PARTICIPANT_PREFERENCE, - marillac_bucks_addition: 0, - marillac_bucks_deduction: 0, - }, - // Required tasks - { - task_name: "Weekly Review", - task_type: TaskType.REQUIRED, - recurrence_preference: RecurrenceFrequency.DAILY, - repeat_days: [ - DayOfWeek.MONDAY, - DayOfWeek.TUESDAY, - DayOfWeek.WEDNESDAY, - DayOfWeek.THURSDAY, - DayOfWeek.FRIDAY, - DayOfWeek.SATURDAY, - DayOfWeek.SUNDAY, - ], - time_preference: TimeOption.SPECIFIC, - start_time: "09:00", - end_time: "10:00", - marillac_bucks_addition: 20, - marillac_bucks_deduction: 5, - comment: "Weekly check-in.", - }, - { - task_name: "Skills Assessment", - task_type: TaskType.REQUIRED, - recurrence_preference: RecurrenceFrequency.DAILY, - repeat_days: [ - DayOfWeek.MONDAY, - DayOfWeek.TUESDAY, - DayOfWeek.WEDNESDAY, - DayOfWeek.THURSDAY, - DayOfWeek.FRIDAY, - DayOfWeek.SATURDAY, - DayOfWeek.SUNDAY, - ], - time_preference: TimeOption.ANYTIME, - start_time: null, - end_time: null, - marillac_bucks_addition: 30, - marillac_bucks_deduction: 10, - comment: null, - }, - { - task_name: "Housing Plan Update", - task_type: TaskType.REQUIRED, - recurrence_preference: RecurrenceFrequency.DAILY, - repeat_days: [ - DayOfWeek.MONDAY, - DayOfWeek.TUESDAY, - DayOfWeek.WEDNESDAY, - DayOfWeek.THURSDAY, - DayOfWeek.FRIDAY, - DayOfWeek.SATURDAY, - DayOfWeek.SUNDAY, - ], - time_preference: TimeOption.SPECIFIC, - start_time: "11:00", - end_time: "12:00", - marillac_bucks_addition: 25, - marillac_bucks_deduction: 8, - comment: "Update your housing plan.", - }, - { - task_name: "Therapy Session", - task_type: TaskType.REQUIRED, - recurrence_preference: RecurrenceFrequency.DAILY, - repeat_days: [ - DayOfWeek.MONDAY, - DayOfWeek.TUESDAY, - DayOfWeek.WEDNESDAY, - DayOfWeek.THURSDAY, - DayOfWeek.FRIDAY, - DayOfWeek.SATURDAY, - DayOfWeek.SUNDAY, - ], - time_preference: TimeOption.SPECIFIC, - start_time: "15:00", - end_time: "16:00", - marillac_bucks_addition: 40, - marillac_bucks_deduction: 10, - comment: null, - }, - { - task_name: "Case Management Meeting", - task_type: TaskType.REQUIRED, - recurrence_preference: RecurrenceFrequency.EVERY_SELECTED_DAYS, - repeat_days: [DayOfWeek.FRIDAY, DayOfWeek.SUNDAY], - time_preference: TimeOption.ANYTIME, - start_time: null, - end_time: null, - marillac_bucks_addition: 35, - marillac_bucks_deduction: 7, - comment: "Biweekly case management.", - }, - // Optional tasks - { - task_name: "Art Therapy", - task_type: TaskType.OPTIONAL, - recurrence_preference: RecurrenceFrequency.DAILY, - repeat_days: [ - DayOfWeek.MONDAY, - DayOfWeek.TUESDAY, - DayOfWeek.WEDNESDAY, - DayOfWeek.THURSDAY, - DayOfWeek.FRIDAY, - DayOfWeek.SATURDAY, - DayOfWeek.SUNDAY, - ], - time_preference: TimeOption.SPECIFIC, - start_time: "14:00", - end_time: "15:00", - marillac_bucks_addition: 10, - marillac_bucks_deduction: 0, - comment: null, - }, - { - task_name: "Exercise Class", - task_type: TaskType.OPTIONAL, - recurrence_preference: RecurrenceFrequency.ANY_SELECTED_DAYS, - repeat_days: [DayOfWeek.MONDAY, DayOfWeek.WEDNESDAY, DayOfWeek.FRIDAY], - time_preference: TimeOption.ANYTIME, - start_time: null, - end_time: null, - marillac_bucks_addition: 15, - marillac_bucks_deduction: 0, - comment: "Stay active!", - }, - { - task_name: "Cooking Workshop", - task_type: TaskType.OPTIONAL, - recurrence_preference: RecurrenceFrequency.PARTICIPANT_PREFERENCE, - repeat_days: [], - time_preference: TimeOption.SPECIFIC, - start_time: "13:00", - end_time: "15:00", - marillac_bucks_addition: 12, - marillac_bucks_deduction: 0, - comment: null, - }, - { - task_name: "Meditation Session", - task_type: TaskType.OPTIONAL, - recurrence_preference: RecurrenceFrequency.DAILY, - repeat_days: [ - DayOfWeek.MONDAY, - DayOfWeek.TUESDAY, - DayOfWeek.WEDNESDAY, - DayOfWeek.THURSDAY, - DayOfWeek.FRIDAY, - DayOfWeek.SATURDAY, - DayOfWeek.SUNDAY, - ], - time_preference: TimeOption.SPECIFIC, - start_time: "10:00", - end_time: "10:30", - marillac_bucks_addition: 8, - marillac_bucks_deduction: 0, - comment: "Relax and meditate.", - }, - { - task_name: "Peer Support Group", - task_type: TaskType.OPTIONAL, - recurrence_preference: RecurrenceFrequency.EVERY_SELECTED_DAYS, - repeat_days: [DayOfWeek.THURSDAY], - time_preference: TimeOption.ANYTIME, - start_time: null, - end_time: null, - marillac_bucks_addition: 10, - marillac_bucks_deduction: 0, - comment: null, - }, -]; - -export const assignedTasks = [ - { - participant_id: 1, - task_name: "Personal Development Goal", - task_status: Status.ASSIGNED, - task_type: TaskType.INDIVIDUAL_GOAL, - goal_name: "Complete Resume", - goal_description: "Finish and submit an updated resume to staff.", - start_date: getRecentDate(0, true, "10:30"), - end_date: getRecentDate(0, true, "14:00"), - marillac_bucks_addition: 15, - marillac_bucks_deduction: 0, - comment: "Great progress on your personal goal!", - }, - { - participant_id: 1, - task_name: "Budget Planning Session", - task_status: Status.COMPLETE, - task_type: TaskType.INDIVIDUAL_GOAL, - goal_name: "Create Monthly Budget", - goal_description: - "Develop a comprehensive monthly budget plan with staff guidance.", - start_date: getRecentDate(1, true, "09:00"), - end_date: getRecentDate(1, true, "11:00"), - marillac_bucks_addition: 25, - marillac_bucks_deduction: 0, - comment: null, - }, - { - participant_id: 1, - task_name: "Job Interview Preparation", - task_status: Status.ASSIGNED, - task_type: TaskType.INDIVIDUAL_GOAL, - goal_name: "Practice Interview Skills", - goal_description: - "Complete mock interview sessions and prepare responses to common questions.", - start_date: getRecentDate(2, true, "14:00"), - end_date: getRecentDate(2, true, "16:00"), - marillac_bucks_addition: 20, - marillac_bucks_deduction: 0, - comment: "Keep practicing - you're doing great!", - }, - { - participant_id: 1, - task_name: "Community Service Project", - task_status: Status.ASSIGNED, - task_type: TaskType.INDIVIDUAL_GOAL, - goal_name: "Volunteer Hours", - goal_description: - "Complete 10 hours of community service at local food bank.", - start_date: getRecentDate(3, true, "08:00"), - end_date: getRecentDate(3, true, "18:00"), - marillac_bucks_addition: 30, - marillac_bucks_deduction: 0, - comment: null, - }, - { - participant_id: 1, - task_name: "Life Skills Workshop", - task_status: Status.INCOMPLETE, - task_type: TaskType.INDIVIDUAL_GOAL, - goal_name: "Learn Basic Cooking", - goal_description: - "Attend cooking workshop and prepare a complete meal independently.", - start_date: getRecentDate(4, true, "12:00"), - end_date: getRecentDate(4, true, "15:00"), - marillac_bucks_addition: 18, - marillac_bucks_deduction: 5, - comment: "Please reschedule - this is important for independent living.", - }, - { - participant_id: 1, - task_name: "Housing Application Review", - task_status: Status.ASSIGNED, - task_type: TaskType.INDIVIDUAL_GOAL, - goal_name: "Submit Housing Applications", - goal_description: - "Review and submit applications for permanent housing options.", - start_date: getRecentDate(5, true, "13:00"), - end_date: getRecentDate(5, true, "15:00"), - marillac_bucks_addition: 35, - marillac_bucks_deduction: 0, - comment: null, - }, - // Tasks for participant 2 - { - participant_id: 2, - task_name: "Financial Literacy Course", - task_status: Status.COMPLETE, - task_type: TaskType.INDIVIDUAL_GOAL, - goal_name: "Complete Financial Education", - goal_description: "Attend all sessions of the financial literacy course.", - start_date: getRecentDate(1, true, "10:00"), - end_date: getRecentDate(1, true, "12:00"), - marillac_bucks_addition: 25, - marillac_bucks_deduction: 0, - comment: "Excellent completion of the course!", - }, - { - participant_id: 2, - task_name: "Mental Health Check-in", - task_status: Status.ASSIGNED, - task_type: TaskType.INDIVIDUAL_GOAL, - goal_name: "Weekly Therapy Sessions", - goal_description: - "Attend weekly one-on-one therapy sessions for mental health support.", - start_date: getRecentDate(0, true, "15:00"), - end_date: getRecentDate(0, true, "16:00"), - marillac_bucks_addition: 20, - marillac_bucks_deduction: 0, - comment: null, - }, - { - participant_id: 2, - task_name: "Peer Mentor Training", - task_status: Status.ASSIGNED, - task_type: TaskType.INDIVIDUAL_GOAL, - goal_name: "Become Peer Mentor", - goal_description: - "Complete training to become a peer mentor for new participants.", - start_date: getRecentDate(2, true, "09:00"), - end_date: getRecentDate(2, true, "17:00"), - marillac_bucks_addition: 40, - marillac_bucks_deduction: 0, - comment: "Great leadership potential!", - }, - // Tasks for participant 3 - { - participant_id: 3, - task_name: "Education Planning", - task_status: Status.ASSIGNED, - task_type: TaskType.INDIVIDUAL_GOAL, - goal_name: "Enroll in GED Program", - goal_description: - "Complete enrollment process for GED preparation classes.", - start_date: getRecentDate(1, true, "11:00"), - end_date: getRecentDate(1, true, "13:00"), - marillac_bucks_addition: 30, - marillac_bucks_deduction: 0, - comment: null, - }, - { - participant_id: 3, - task_name: "Substance Abuse Counseling", - task_status: Status.COMPLETE, - task_type: TaskType.INDIVIDUAL_GOAL, - goal_name: "Complete Counseling Sessions", - goal_description: - "Attend all required substance abuse counseling sessions.", - start_date: getRecentDate(3, true, "14:00"), - end_date: getRecentDate(3, true, "15:30"), - marillac_bucks_addition: 25, - marillac_bucks_deduction: 0, - comment: "Proud of your commitment to recovery!", - }, - { - participant_id: 3, - task_name: "Family Reconnection Session", - task_status: Status.ASSIGNED, - task_type: TaskType.INDIVIDUAL_GOAL, - goal_name: "Rebuild Family Relationships", - goal_description: "Participate in mediated family therapy session.", - start_date: getRecentDate(4, true, "16:00"), - end_date: getRecentDate(4, true, "17:30"), - marillac_bucks_addition: 35, - marillac_bucks_deduction: 0, - comment: null, - }, - // Tasks for departed participant 8 - { - participant_id: 8, - task_name: "Transition Planning", - task_status: Status.COMPLETE, - task_type: TaskType.INDIVIDUAL_GOAL, - goal_name: "Prepare for Departure", - goal_description: "Complete all exit requirements and transition planning.", - start_date: getRecentDate(5, true, "10:00"), - end_date: getRecentDate(5, true, "16:00"), - marillac_bucks_addition: 50, - marillac_bucks_deduction: 0, - comment: "Successfully completed all transition requirements!", - }, - // Tasks for departed participant 9 - { - participant_id: 9, - task_name: "Exit Interview", - task_status: Status.COMPLETE, - task_type: TaskType.INDIVIDUAL_GOAL, - goal_name: "Program Completion", - goal_description: "Complete final evaluation and exit interview process.", - start_date: getRecentDate(6, true, "13:00"), - end_date: getRecentDate(6, true, "14:30"), - marillac_bucks_addition: 25, - marillac_bucks_deduction: 0, - comment: null, - }, -]; - -export const announcements = [ - { - priority: Priority.HIGH, - creation_date: getRecentDate(0, true), - message: "Welcome to Marillac Place!", - }, - { - priority: Priority.NORMAL, - creation_date: getRecentDate(1, true), - message: "Art Therapy is on Wednesday at 2pm.", - }, - { - priority: Priority.NORMAL, - creation_date: getRecentDate(1, true), - message: "Remember to check the bulletin board for updates.", - }, - { - priority: Priority.CRITICAL, - creation_date: getRecentDate(0, true), - message: "Fire drill scheduled for Friday.", - }, - { - priority: Priority.NORMAL, - creation_date: getRecentDate(1, true), - message: "Exercise class every Monday, Wednesday, and Friday.", - }, - { - priority: Priority.NORMAL, - creation_date: getRecentDate(2, true), - message: "Kitchen will be closed for cleaning on Saturday.", - }, - { - priority: Priority.HIGH, - creation_date: getRecentDate(0, true), - message: "Therapy sessions available Thursday afternoons.", - }, -]; - -export const userAnnouncements = [ - { - announcement_id: 1, - participant_id: 1, - is_read: false, - read_date: null, - }, - { - announcement_id: 1, - participant_id: 3, - is_read: true, - read_date: getRecentDate(2, true), - }, - { - announcement_id: 1, - participant_id: 2, - is_read: false, - read_date: null, - }, - { - announcement_id: 2, - participant_id: 1, - is_read: false, - read_date: null, - }, - { - announcement_id: 3, - participant_id: 3, - is_read: false, - read_date: null, - }, - { - announcement_id: 3, - participant_id: 2, - is_read: false, - read_date: null, - }, - { - announcement_id: 4, - participant_id: 3, - is_read: false, - read_date: null, - }, - { - announcement_id: 5, - participant_id: 1, - is_read: false, - read_date: null, - }, - { - announcement_id: 6, - participant_id: 2, - is_read: false, - read_date: null, - }, - { - announcement_id: 7, - participant_id: 3, - is_read: false, - read_date: null, - }, -]; - -export const customBadges = [ - { - name: "Housing Plan Badge", - description: "Completed housing plan", - icon: Icon.HOME, - type: BadgeType.CUSTOM, - is_consecutive: false, - }, - { - name: "Helping Hands Badge", - description: - "For someone who did a thoughtful deed or action to help support staff and/or another participant", - icon: Icon.HEART, - type: BadgeType.CUSTOM, - is_consecutive: false, - }, - { - name: "Back on the Wagon Badge", - description: - "For someone who pulls together after a bad start to their week", - icon: Icon.GROUP, - type: BadgeType.CUSTOM, - is_consecutive: false, - }, - { - name: "Above and Beyond Badge", - description: - "For someone who put in extra effort or time to achieve their goals and/or complete a task", - icon: Icon.WINGS, - type: BadgeType.CUSTOM, - is_consecutive: false, - }, - { - name: "Consistency Star Badge", - description: "Awarded for consistent attendance over a month", - icon: Icon.FIVE_STAR, - type: BadgeType.CUSTOM, - is_consecutive: true, - }, - { - name: "Positive Attitude Badge", - description: "For maintaining a positive attitude throughout the week", - icon: Icon.FLOWER, - type: BadgeType.CUSTOM, - is_consecutive: false, - }, -]; - -export const earnedBadges = [ - { - earned_badge_id: 1, - participant_id: 1, - date_received: getRecentDate(0, false), - name: "Log-in Badge", - description: "Logged in for 1 day", - badge_icon: Icon.FIVE_STAR, - level: 0, - }, - { - earned_badge_id: 2, - participant_id: 2, - date_received: getRecentDate(1, false), - name: "Perfect Score Badge for Optional Tasks", - description: "Completed 4 optional tasks", - badge_icon: Icon.FLOWER, - level: 1, - }, - { - earned_badge_id: 3, - participant_id: 3, - date_received: getRecentDate(7, false), - name: "Individual Goals Completed Badge", - description: "Completed 1 individual goal", - badge_icon: Icon.GEMSTONE, - level: 0, - }, -]; - -export const notes = [ - { - message: "Need to contact organizations for Marie's housing plan", - creation_date: getRecentDate(0, true), - }, - { - message: "More classes to be scheduled", - creation_date: getRecentDate(1, true), - }, - { - message: "Excellent participation in group activities overall this week", - creation_date: getRecentDate(1, true), - }, - { - message: "Therapy session on Thursday", - creation_date: getRecentDate(0, true), - }, - { - message: "Help another participant with chores", - creation_date: getRecentDate(2, true), - }, -]; diff --git a/backend/seed/prodData.ts b/backend/seed/prodData.ts deleted file mode 100644 index 88dab1d1..00000000 --- a/backend/seed/prodData.ts +++ /dev/null @@ -1,106 +0,0 @@ -import { BadgeType, Icon } from "@prisma/client"; - -export const systemBadges = [ - { - name: "Log-in Badge", - description: "Log-in for several days in a row", - icon: Icon.FIVE_STAR, - type: BadgeType.SYSTEM, - is_consecutive: true, - levels: [ - { level: 0, benchmark: 1, marillac_bucks: 2 }, - { level: 1, benchmark: 7, marillac_bucks: 5 }, - { level: 2, benchmark: 30, marillac_bucks: 10 }, - { level: 3, benchmark: 90, marillac_bucks: 20 }, - { level: 4, benchmark: 180, marillac_bucks: 40 }, - ], - }, - { - name: "Perfect Score Badge for Optional Tasks", - description: "Completed optional tasks (3+ Optional Tasks)", - icon: Icon.FLOWER, - type: BadgeType.SYSTEM, - is_consecutive: false, - levels: [ - { level: 0, benchmark: 1, marillac_bucks: 2 }, - { level: 1, benchmark: 4, marillac_bucks: 5 }, - { level: 2, benchmark: 8, marillac_bucks: 10 }, - { level: 3, benchmark: 12, marillac_bucks: 20 }, - { level: 4, benchmark: 16, marillac_bucks: 40 }, - ], - }, - { - name: "Perfect Score Badge for Mandatory Tasks", - description: - "Completed mandatory tasks (Weekly Review, Skills, Housing Plan)", - icon: Icon.PENCIL, - type: BadgeType.SYSTEM, - is_consecutive: false, - levels: [ - { level: 0, benchmark: 1, marillac_bucks: 2 }, - { level: 1, benchmark: 4, marillac_bucks: 5 }, - { level: 2, benchmark: 8, marillac_bucks: 10 }, - { level: 3, benchmark: 12, marillac_bucks: 20 }, - { level: 4, benchmark: 16, marillac_bucks: 40 }, - ], - }, - { - name: "Money Earned Milestone Badge", - description: "Total money earned milestone", - icon: Icon.MONEY, - type: BadgeType.SYSTEM, - is_consecutive: false, - levels: [ - { level: 0, benchmark: 100, marillac_bucks: 2 }, - { level: 1, benchmark: 500, marillac_bucks: 5 }, - { level: 2, benchmark: 1000, marillac_bucks: 10 }, - { level: 3, benchmark: 4000, marillac_bucks: 20 }, - { level: 4, benchmark: 8000, marillac_bucks: 40 }, - ], - }, - { - name: "PR Leader Badge", - description: "Accumulation of other badges", - icon: Icon.DIAMOND, - type: BadgeType.SYSTEM, - is_consecutive: false, - levels: [ - { level: 0, benchmark: 4, marillac_bucks: 2 }, - { level: 1, benchmark: 4, marillac_bucks: 5 }, - { level: 2, benchmark: 4, marillac_bucks: 10 }, - { level: 3, benchmark: 4, marillac_bucks: 20 }, - { level: 4, benchmark: 4, marillac_bucks: 40 }, - ], - }, - { - name: "Individual Goals Completed Badge", - description: "Individual goal(s) set and completed", - icon: Icon.GEMSTONE, - type: BadgeType.SYSTEM, - is_consecutive: false, - levels: [ - { level: 0, benchmark: 1, marillac_bucks: 2 }, - { level: 1, benchmark: 4, marillac_bucks: 5 }, - { level: 2, benchmark: 8, marillac_bucks: 10 }, - { level: 3, benchmark: 12, marillac_bucks: 20 }, - { level: 4, benchmark: 16, marillac_bucks: 40 }, - ], - }, - { - name: "First Goal Set Badge", - description: "Set first goal", - icon: Icon.FOUR_STAR, // Only one level for first goal - type: BadgeType.SYSTEM, - is_consecutive: false, - levels: [{ level: 0, benchmark: 1, marillac_bucks: 2 }], - }, - { - name: "Jack of All Trades Badge", - description: - "Total tried tasks - if they have chosen and completed 10 different types of tasks", - icon: Icon.TOOL, - type: BadgeType.SYSTEM, - is_consecutive: false, - levels: [{ level: 2, benchmark: 10, marillac_bucks: 10 }], - }, -]; diff --git a/backend/seed/seed-snaplet.ts b/backend/seed/seed-snaplet.ts deleted file mode 100644 index 17320872..00000000 --- a/backend/seed/seed-snaplet.ts +++ /dev/null @@ -1,174 +0,0 @@ -/* eslint-disable */ -// @ts-nocheck -// Seed script for Marillac Place: -// Generates system badges and mock data for development/testing environments. - -import { createSeedClient } from "@snaplet/seed"; -import { PrismaClient } from "@prisma/client"; -import { systemBadges } from "./prodData"; -import { - participants, - tasks, - announcements, - notes, - assignedTasks, - userAnnouncements, - customBadges, -} from "./mockData"; -import { testParticipants } from "./testData"; - -async function seedProdData() { - const prisma = new PrismaClient(); - try { - // Check if there are any badges in the database - const badgeCount = await prisma.badge.count(); - - if (badgeCount === 0) { - // No badges exist, seed all system badges - await Promise.all( - systemBadges.map(async (badge) => { - return prisma.badge.create({ - data: { - name: badge.name, - description: badge.description, - badge_type: badge.type, - is_active: true, - is_consecutive: badge.is_consecutive, - icon: badge.icon, - badge_level: { - create: badge.levels, - }, - }, - }); - }) - ); - console.log("✅ System badges seeded"); - } else { - console.log("✅ Badges already exist, skipping seeding"); - } - } finally { - await prisma.$disconnect(); - } -} - -async function seedTestData() { - // Seed minimal test participants for production testing - const prisma = new PrismaClient(); - try { - await Promise.all( - testParticipants.map(async (participant) => { - // Check if participant already exists - const existing = await prisma.participant.findUnique({ - where: { participant_id: participant.participant_id }, - }); - - if (!existing) { - await prisma.participant.create({ data: participant }); - console.log( - `✅ Test participant ${participant.participant_id} created` - ); - } else { - console.log( - `ℹ️ Test participant ${participant.participant_id} already exists, skipping` - ); - } - }) - ); - } catch (error) { - console.error("⚠️ Error seeding test participants:", error); - } finally { - await prisma.$disconnect(); - } -} - -async function seedMockData(seed: any) { - await seed.participant((createMany) => - createMany(participants.length, (cur) => participants[cur.index]) - ); - console.log("✅ Participants seeded"); - - await seed.task((createMany) => - createMany(tasks.length, (cur) => tasks[cur.index]) - ); - console.log("✅ Tasks seeded"); - - await seed.assignedTask((createMany) => - createMany(assignedTasks.length, (cur) => assignedTasks[cur.index]) - ); - console.log("✅ Assigned tasks seeded"); - - await seed.announcement((createMany) => - createMany(announcements.length, (cur) => announcements[cur.index]) - ); - console.log("✅ Announcements seeded"); - - await seed.userAnnouncement((createMany) => - createMany(userAnnouncements.length, (cur) => userAnnouncements[cur.index]) - ); - console.log("✅ User announcements seeded"); - - await seed.note((createMany) => - createMany(notes.length, (cur) => notes[cur.index]) - ); - console.log("✅ Notes seeded"); - - const prisma = new PrismaClient(); - try { - await Promise.all( - customBadges.map(async (badge) => { - return prisma.badge.create({ - data: { - name: badge.name, - description: badge.description, - badge_type: badge.type, - is_active: true, - is_consecutive: badge.is_consecutive, - icon: badge.icon, - }, - }); - }) - ); - console.log("✅ Custom badges seeded"); - } catch (error) { - console.error("⚠️ Error seeding custom badges:", error); - } finally { - await prisma.$disconnect(); - } -} - -const main = async () => { - const seed = await createSeedClient({ - connect: true, - }); - - const environment = process.env.NODE_ENV || "development"; - const isProduction = environment === "production"; - const seedTestAccounts = process.env.SEED_TEST_DATA === "true"; - - console.log(`🌍 Running in ${environment} environment`); - - if (isProduction) { - // Production: only seed system badges, no database reset - console.log("🔒 Production mode: seeding system badges only"); - await seedProdData(); - - // Optionally seed test participants for production testing - if (seedTestAccounts) { - console.log("🧪 SEED_TEST_DATA enabled: seeding test participants"); - await seedTestData(); - } - } else { - // Development: reset database and seed all data - console.log("🔧 Development mode: resetting database and seeding all data"); - await seed.$resetDatabase(); - await seedProdData(); - await seedMockData(seed); - } - - console.log("✨ Seeding completed successfully"); -}; - -main().catch((e) => { - console.error("⚠️ Error during seeding: ", e); - process.exit(1); -}); diff --git a/backend/seed/testData.ts b/backend/seed/testData.ts deleted file mode 100644 index 1b79e93a..00000000 --- a/backend/seed/testData.ts +++ /dev/null @@ -1,28 +0,0 @@ -// Test data for production testing -// This is a minimal set of test accounts that can be used in production -// for testing purposes without cluttering the database with full mock data - -export const testParticipants = [ - { - participant_id: 100, - password: "test123", - room_number: 100, - arrival_date: new Date(), - account_creation_date: new Date(), - departure_date: null, - account_removal_date: null, - marillac_bucks: 50, - marillac_bucks_goal: 200, - }, - { - participant_id: 101, - password: "test123", - room_number: 101, - arrival_date: new Date(), - account_creation_date: new Date(), - departure_date: null, - account_removal_date: null, - marillac_bucks: 75, - marillac_bucks_goal: 300, - }, -]; diff --git a/backend/server.ts b/backend/server.ts index 7deb19ef..06be963b 100644 --- a/backend/server.ts +++ b/backend/server.ts @@ -1,19 +1,17 @@ import express from "express"; import path from "path"; import { ApolloServer } from "apollo-server-express"; -import getGraphQLSchema from "./utils/getGraphQLSchema"; +import getSchema from "./gql/schema"; require("./crons/index"); const app = express(); -// Health check app.get("/health", (req, res) => { res.status(200).json({ status: "ok", timestamp: new Date().toISOString() }); }); -// GraphQL -const schema = getGraphQLSchema(); +const schema = getSchema(); const server = new ApolloServer({ schema, context: ({ req, res }) => ({ req, res }), @@ -24,50 +22,27 @@ const server = new ApolloServer({ }, }); -// Helper function to ensure URL has protocol -const getFrontendOrigin = () => { - const url = process.env.FRONTEND_URL || ""; - if (!url) { - console.warn( - "⚠️ WARNING: FRONTEND_URL environment variable is not set. CORS may not work correctly!" - ); - return ""; - } - - // If URL already has protocol, return as-is - if (url.startsWith("http://") || url.startsWith("https://")) { - return url; - } - - // Otherwise, add https:// (production default) - return `https://${url}`; -}; - server.applyMiddleware({ app, path: "/graphql", cors: { - origin: getFrontendOrigin(), + origin: process.env.FRONTEND_URL, credentials: true, }, }); -// 👉 Serve frontend build (adjust "build" if your React output dir is "dist") const frontendPath = path.join(__dirname, "../frontend/build"); app.use(express.static(frontendPath)); -// 👉 Catch-all: send index.html for non-API routes app.get("*", (req, res) => { - // Don’t intercept API routes if (req.path.startsWith("/graphql") || req.path.startsWith("/health")) { - return res.status(404).json({ error: "Not found" }); + return res.status(404).json({ error: "Not Found" }); } - return res.sendFile(path.join(frontendPath, "index.html")); }); const PORT = process.env.PORT || 5000; app.listen({ port: PORT }, () => { console.info(`Server is listening on port ${PORT}!`); - console.info(`CORS enabled for origin: ${getFrontendOrigin() || "NOT SET"}`); + console.info(`CORS enabled for origin: ${process.env.FRONTEND_URL}`); }); diff --git a/backend/tsconfig.json b/backend/tsconfig.json index c049c086..5b502e00 100644 --- a/backend/tsconfig.json +++ b/backend/tsconfig.json @@ -74,5 +74,6 @@ "./**/*", "*.json", "./.eslintrc.js" - ] + ], + "exclude": ["prisma/seed/seed.ts"] } diff --git a/backend/types/models.ts b/backend/types/models.ts deleted file mode 100644 index 472adcd8..00000000 --- a/backend/types/models.ts +++ /dev/null @@ -1,167 +0,0 @@ -import { gql } from "apollo-server-express"; - -const models = gql` - type Participant { - participant_id: Int! - password: String! - room_number: Int! - arrival_date: String! - departure_date: String - account_creation_date: String! - account_removal_date: String - marillac_bucks: Int! - marillac_bucks_goal: Int - - assigned_tasks: [AssignedTask!]! - user_announcements: [UserAnnouncement!]! - logins: [Login!]! - transactions: [Transaction!]! - earned_badges: [EarnedBadge!]! - participant_progress: ParticipantProgress - goal_history: [GoalHistory!]! - } - - type Task { - task_id: Int! - task_name: String! - task_type: TaskType! - recurrence_preference: RecurrenceFrequency! - repeat_days: [DayOfWeek!]! - time_preference: TimeOption! - start_time: String - end_time: String - marillac_bucks_addition: Int! - marillac_bucks_deduction: Int! - comment: String - } - - type AssignedTask { - assigned_task_id: Int! - participant_id: Int! - task_name: String! - task_status: Status! - task_type: TaskType! - goal_name: String - goal_description: String - start_date: String! - end_date: String! - marillac_bucks_addition: Int! - marillac_bucks_deduction: Int! - comment: String - participant: Participant! - } - - type Note { - note_id: Int! - message: String! - creation_date: String! - } - - type Announcement { - announcement_id: Int! - priority: Priority! - creation_date: String! - message: String! - - user_announcements: [UserAnnouncement!]! - } - - type UserAnnouncement { - read: Boolean! - pinned: Boolean! - announcement_id: Int! - participant_id: Int! - - announcement: Announcement! - participant: Participant! - } - - type Login { - participant_id: Int! - login_date: String! - - participant: Participant! - } - - type Transaction { - transaction_id: Int! - participant_id: Int! - transaction_date: String! - transaction_type: TransactionType! - description: String - marillac_bucks: Int! - - participant: Participant! - } - - type Badge { - badge_id: Int! - badge_type: BadgeType! - name: String! - description: String! - is_active: Boolean! - is_consecutive: Boolean! - icon: Icon! - offered_levels: [String!]! - - badge_level: [BadgeLevel!]! - earned_badge: [EarnedBadge!]! - } - - type BadgeLevel { - badge_id: Int! - level: Int! - benchmark: Int! - marillac_bucks: Int! - - badge: Badge! - } - - type EarnedBadge { - earned_badge_id: Int! - participant_id: Int! - badge_id: Int! - date_received: String! - name: String! - description: String! - badge_icon: Icon! - level: Int! - - participant: Participant! - badge: Badge! - } - - type ParticipantProgress { - participant_id: Int! - optional_tasks_completed: Int! - weeks_optional_tasks_complete: Int! - weeks_mandatory_tasks_complete: Int! - weeks_individual_goal_complete: Int! - days_logged_in: Int! - total_earnings: Int! - badges_achieved: [Int!]! - task_types_tried: [String!]! - - participant: Participant! - } - - type GoalHistory { - goal_history_id: Int! - participant_id: Int! - goal_action: GoalAction! - goal_value: Int! - action_date: String! - - participant: Participant! - } - - type ReportRecipient { - report_recipient_id: Int! - email: String! - weekly: Boolean! - monthly: Boolean! - last_report_sent: String - } -`; - -export default models; diff --git a/backend/types/resolvers.ts b/backend/types/resolvers.ts deleted file mode 100644 index 89669329..00000000 --- a/backend/types/resolvers.ts +++ /dev/null @@ -1,181 +0,0 @@ -import { gql } from "apollo-server-express"; - -const resolvers = gql` - type Query { - getPastParticipants: [Participant] - getCurrentParticipants: [Participant] - getParticipantByRoom(room_number: Int!): Participant - getParticipantsByRooms(room_numbers: [Int!]!): [Participant] - getParticipantById(participantId: Int!): Participant - getWeeklyEarnings(participant_id: Int!): [Int!]! - getGoalHistoryByParticipant( - participant_id: Int! - start_date: String - end_date: String - ): [GoalHistory!]! - getNotes: [Note] - getAllAnnouncements: [Announcement] - getAnnouncementsInDateRange(start: String!, end: String!): [Announcement] - getAnnouncementsByParticipants(participant_ids: [Int!]!): [Announcement] - getAnnouncementsByParticipantId(participant_id: Int!): [UserAnnouncement] - getAssignedTasks(participant_id: Int!): GetAssignedTaskResponse! - getTasksByType(type: [TaskType!]!): [Task] - getCustomBadges: [Badge] - getSystemBadges: [Badge] - getParticipantAnnouncements( - participantId: Int! - filter: AnnouncementFilter = ALL - ): [UserAnnouncement!]! - getAssignedTasksByParticipantIdAndDate( - participantId: Int! - date: String! - ): [AssignedTask] - hasCompletedAllRequiredTasks(participantId: Int!): Boolean - getEarnedBadgesByParticipant(participantId: Int!): [EarnedBadge!]! - getReportRecipients: [ReportRecipient!]! - } - - type Mutation { - adminLogin(role: String!, password: String!): LoginResponse - participantLogin(id: Int!, password: String!): LoginResponse - createCustomBadge(name: String!, description: String!, icon: Icon!): Boolean - createParticipant( - participant_id: Int! - room_number: Int! - arrival_date: String! - password: String! - ): Boolean - updateParticipant( - participant_id: Int! - room_number: Int - arrival_date: String - password: String - departure_date: String - account_creation_date: String - account_removal_date: String - marillac_bucks: Int - marillac_bucks_goal: Int - ): Boolean - updateMarillacBucks( - participant_id: Int! - marillac_bucks: Int! - reason: String! - ): Boolean - createNote(message: String!): Boolean - deleteNote(note_id: Int!): Boolean - createAnnouncement( - priority: Priority! - participants: [Int!]! - message: String! - ): Boolean - editAnnouncement( - announcement_id: Int! - priority: Priority - message: String - ): Boolean - deleteAnnouncement(announcement_id: Int!): Boolean - updatePinReadAnnouncement( - announcement_id: Int! - participant_id: Int! - pinned: Boolean - read: Boolean - ): Boolean - createTask( - type: TaskType! - name: String! - recurrencePreference: RecurrenceFrequency! - repeatDays: [DayOfWeek!]! - timePreference: TimeOption! - marillacBucks: Int! - deduction: Int! - startTime: String - endTime: String - comment: String - ): Boolean - updateTask( - id: Int! - type: TaskType - name: String - recurrencePreference: RecurrenceFrequency - repeatDays: [DayOfWeek!] - timePreference: TimeOption - marillacBucks: Int - deduction: Int - startTime: String - endTime: String - comment: String - ): Boolean - deleteTaskById(taskId: Int!): Boolean - assignCustomBadge( - badge_id: Int! - marillac_bucks: Int! - participant_ids: [Int!]! - ): [Int!]! - updateAssignedTask( - id: Int! - taskName: String - taskStatus: Status - taskType: TaskType - goalName: String - goalDescription: String - startDate: String - endDate: String - marillacBucksAddition: Int - marillacBucksDeduction: Int - comment: String - ): Boolean - editCustomBadge( - custom_badge_id: Int! - new_custom_badge_name: String - new_custom_badge_description: String - ): Boolean - deleteCustomBadge(badge_id: Int!): Boolean! - deleteAssignedTask(assigned_task_id: Int!): Boolean! - createAssignedTask( - participantId: Int! - taskName: String! - startDate: String! - endDate: String! - marillacBucksAddition: Int! - marillacBucksDeduction: Int! - taskType: TaskType! - goalName: String - goalDescription: String - comment: String - ): Boolean - editBadgeLevel( - badge_id: Int! - badge_level: Int! - benchmark: Int! - marillac_bucks: Int! - ): Boolean - editSystemBadge( - system_badge_id: Int! - system_badge_name: String! - system_badge_criteria: String - ): Boolean - updateBadgeStatus(badge_id: Int!, is_active: Boolean!): Boolean - setMarillacBucksGoal(participant_id: Int!, goal_value: Int!): Boolean - updateMarillacBucksGoal(participant_id: Int!, new_goal_value: Int!): Boolean - createReportRecipient( - email: String! - weekly: Boolean! - monthly: Boolean! - ): Boolean - updateReportRecipient( - report_recipient_id: Int! - email: String - weekly: Boolean - monthly: Boolean - ): Boolean - deleteReportRecipient(report_recipient_id: Int!): Boolean - createEarningTransaction( - participant_id: Int! - transaction_date: String! - marillac_bucks: Int! - description: String - ): Boolean - } -`; - -export default resolvers; diff --git a/backend/types/responses.ts b/backend/types/responses.ts deleted file mode 100644 index 2ef83e51..00000000 --- a/backend/types/responses.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { gql } from "apollo-server-express"; - -const responses = gql` - type LoginResponse { - token: String! - } - - type CalendarEvent { - id: Int! - title: String! - start: String! - end: String! - allDay: Boolean! - task_status: Status! - task_type: TaskType! - marillacBucksAddition: Int! - marillac_bucks_deduction: Int! - comment: String - } - - type GetAssignedTaskResponse { - SPECIFIC: [CalendarEvent!]! - ANYTIME: [CalendarEvent!]! - ANYDAY: [CalendarEvent!]! - } -`; - -export default responses; diff --git a/backend/utils/badgeUtils.ts b/backend/utils/badgeUtils.ts new file mode 100644 index 00000000..5a408ae0 --- /dev/null +++ b/backend/utils/badgeUtils.ts @@ -0,0 +1,162 @@ +import { Level } from "@prisma/client"; +import { endOfDay } from "date-fns"; +import db from "../prisma"; +import { + SYSTEM_BADGES, + JACK_OF_ALL_TRADES, + PR_LEADER, +} from "../constants/systemBadges"; +import processEarning from "./transactionUtils"; + +async function getNextBadgeLevel(name: string, level: Level) { + const levels = [ + Level.NOVICE, + Level.BRONZE, + Level.SILVER, + Level.GOLD, + Level.DIAMOND, + ]; + const index = levels.indexOf(level); + if (index === levels.length - 1) return null; + const nextLevel = levels[index + 1]; + const nextBadgeLevel = await db.badgeLevel.findUnique({ + where: { name_level: { name, level: nextLevel } }, + }); + return nextBadgeLevel?.level; +} + +export async function initBadgeLevelProgress(pid: number) { + const allLevels = [ + Level.NOVICE, + Level.BRONZE, + Level.SILVER, + Level.GOLD, + Level.DIAMOND, + ]; + + const promises = SYSTEM_BADGES.flatMap((name) => { + if (name === PR_LEADER) { + return allLevels.map((level) => + db.badgeLevelProgress.create({ + data: { name, level, pid, progress: 0 }, + }) + ); + } + + const level = name !== JACK_OF_ALL_TRADES ? Level.NOVICE : Level.SILVER; + return db.badgeLevelProgress.create({ + data: { name, level, pid, progress: 0 }, + }); + }); + + await Promise.all(promises); +} + +export async function updateBadgeLevelProgress( + name: string, + pid: number, + inc: number +) { + const badgeLevelProgress = await db.badgeLevelProgress.findFirst({ + where: { pid, name }, + include: { + badge_level: true, + }, + }); + if (!badgeLevelProgress) return; + + const newAmount = badgeLevelProgress.progress + inc; + const reachedBenchmark = + newAmount >= badgeLevelProgress.badge_level.benchmark; + if (reachedBenchmark) { + await db.achievedBadgeLevel.create({ + data: { name, level: badgeLevelProgress.level, pid }, + }); + + const prLeaderProgress = await db.badgeLevelProgress.findFirst({ + where: { + pid, + name: PR_LEADER, + level: badgeLevelProgress.level, + }, + include: { + badge_level: true, + }, + }); + + if (prLeaderProgress) { + const newPrLeaderAmount = prLeaderProgress.progress + 1; + const reachedPrLeaderBenchmark = + newPrLeaderAmount >= prLeaderProgress.badge_level.benchmark; + if (reachedPrLeaderBenchmark) { + await db.achievedBadgeLevel.create({ + data: { + name: PR_LEADER, + level: prLeaderProgress.level, + pid, + }, + }); + + await db.badgeLevelProgress.delete({ + where: { + name_level_pid: { + name: PR_LEADER, + level: prLeaderProgress.level, + pid, + }, + }, + }); + } else { + await db.badgeLevelProgress.update({ + where: { + name_level_pid: { + name: PR_LEADER, + level: prLeaderProgress.level, + pid, + }, + }, + data: { progress: newPrLeaderAmount }, + }); + } + } + + await db.badgeLevelProgress.delete({ + where: { name_level_pid: { name, level: badgeLevelProgress.level, pid } }, + }); + + const reasonForEarning = `${badgeLevelProgress.level} ${name} badge achieved!`; + await processEarning( + pid, + badgeLevelProgress.badge_level.value, + reasonForEarning + ); + + const nextBadgeLevel = await getNextBadgeLevel( + name, + badgeLevelProgress.level + ); + if (!nextBadgeLevel) return; + await db.badgeLevelProgress.create({ + data: { name, level: nextBadgeLevel, pid, progress: newAmount }, + }); + } else { + await db.badgeLevelProgress.update({ + where: { name_level_pid: { name, level: badgeLevelProgress.level, pid } }, + data: { progress: newAmount }, + }); + } +} + +export async function validateBadgeLevelProgress(name: string) { + const currentParticipants = await db.participant.findMany({ + where: { + OR: [{ departure: null }, { departure: { gt: endOfDay(new Date()) } }], + }, + }); + + await Promise.all( + currentParticipants.map(async (participant) => { + return updateBadgeLevelProgress(name, participant.pid, 0); + }) + ); +} diff --git a/backend/utils/checkGoalReached.ts b/backend/utils/checkGoalReached.ts deleted file mode 100644 index b5343424..00000000 --- a/backend/utils/checkGoalReached.ts +++ /dev/null @@ -1,77 +0,0 @@ -import { PrismaClient } from "@prisma/client"; -import { getToday } from "./formatDateTime"; - -const prisma = new PrismaClient(); - -/** - * Checks if a participant has reached their current goal and records it if they have. - * Should be called whenever marillac_bucks is updated. - * - * @param participant_id - The ID of the participant to check - * @returns true if goal was reached and recorded, false otherwise - */ -export async function checkAndRecordGoalReached( - participant_id: number -): Promise { - try { - const participant = await prisma.participant.findUnique({ - where: { participant_id }, - select: { - marillac_bucks: true, - marillac_bucks_goal: true, - }, - }); - - // Participant doesn't exist - if (!participant) { - return false; - } - - // No goal set - if (!participant.marillac_bucks_goal) { - return false; - } - - // Goal not reached yet - if (participant.marillac_bucks < participant.marillac_bucks_goal) { - return false; - } - - // Check if we've already recorded REACHED for this goal - const alreadyRecorded = await prisma.$queryRaw` - SELECT * FROM goal_history - WHERE participant_id = ${participant_id} - AND goal_action = 'REACHED' - AND goal_value = ${participant.marillac_bucks_goal} - ORDER BY action_date DESC - LIMIT 1 - `; - - // Already recorded - if (Array.isArray(alreadyRecorded) && alreadyRecorded.length > 0) { - return false; - } - - // Record that the goal was reached - await prisma.$executeRaw` - INSERT INTO goal_history (participant_id, goal_action, goal_value, action_date) - VALUES ( - ${participant_id}, - 'REACHED', - ${participant.marillac_bucks_goal}, - ${getToday()} - ) - `; - - // Optional: Clear the goal so participant can set a new one - await prisma.participant.update({ - where: { participant_id }, - data: { marillac_bucks_goal: null }, - }); - - return true; - } catch (error) { - console.error("Error checking goal reached:", error); - return false; - } -} diff --git a/backend/utils/evaluateBadge.ts b/backend/utils/evaluateBadge.ts deleted file mode 100644 index 4d6fb8a4..00000000 --- a/backend/utils/evaluateBadge.ts +++ /dev/null @@ -1,47 +0,0 @@ -import prisma from "../prisma"; - -// returns an error if badge not found -// if new level reached, returns true and create corresponding BadgeLevel object -// if not a new level, returns false and doesn't create anything -export async function evaluateBadge( - current_benchmark: number, - participant_id: number, - badge_name: string -): Promise { - try { - const badge = await prisma.badge.findUnique({ - where: { name: badge_name }, - include: { - badge_level: true, - }, - }); - if (!badge) throw new Error(`Badge not found.`); - const earned = await prisma.earnedBadge.findFirst({ - where: { participant_id, name: badge_name }, - orderBy: { level: "asc" }, - }); - const nextLevel = earned ? earned.level + 1 : 0; - const nextLevelEntry = badge.badge_level.find( - (bl) => bl.level === nextLevel - ); - if (!nextLevelEntry) return false; - if (current_benchmark >= nextLevelEntry.benchmark) { - await prisma.earnedBadge.create({ - data: { - badge_id: badge.badge_id, - participant_id, - date_received: new Date().toISOString(), - name: badge.name, - description: badge.description, - badge_icon: badge.icon, - level: nextLevel, - }, - }); - return true; - } - return false; - } catch (err) { - const message = err instanceof Error ? err.message : "Something went wrong"; - throw new Error(message); - } -} diff --git a/backend/utils/formatDateTime.ts b/backend/utils/formatDateTime.ts deleted file mode 100644 index 5ab7a933..00000000 --- a/backend/utils/formatDateTime.ts +++ /dev/null @@ -1,67 +0,0 @@ -export function formatDateTime(date: Date, includeTime: boolean): string { - const year = date.getFullYear(); - const month = String(date.getMonth() + 1).padStart(2, "0"); - const day = String(date.getDate()).padStart(2, "0"); - - if (includeTime) { - const hours = String(date.getHours()).padStart(2, "0"); - const minutes = String(date.getMinutes()).padStart(2, "0"); - return `${year}-${month}-${day}, ${hours}:${minutes}`; - } - - return `${year}-${month}-${day}`; -} - -export function getToday(): string { - return formatDateTime(new Date(), false); -} - -export function getNow(): string { - return formatDateTime(new Date(), true); -} - -// Helper to get Date object for today and previous days -export function getRecentDate( - daysAgo: number, - includeTime: boolean, - time?: string -): string { - const date = new Date(); - date.setDate(date.getDate() - daysAgo); - - if (includeTime) { - if (time) { - const [hours, minutes] = time.split(":").map(Number); - date.setHours(hours, minutes, 0, 0); - } else { - date.setHours(0, 0, 0, 0); - } - } - return formatDateTime(date, includeTime); -} - -export function getWeekBounds(): { weekStart: string; weekEnd: string } { - const now = new Date(); - const day = now.getDay(); - - // Start of week (Sunday) - const sunday = new Date(now); - sunday.setDate(now.getDate() - day); - sunday.setHours(0, 0, 0, 0); - const weekStart = formatDateTime(sunday, true); - - // End of week (Saturday) - const saturday = new Date(sunday); - saturday.setDate(sunday.getDate() + 6); - saturday.setHours(23, 59, 0, 0); - const weekEnd = formatDateTime(saturday, true); - - return { weekStart, weekEnd }; -} - -// takes in "YY-MM-DD, HH:mm" and convert to Date object -export function formatDateFromDateString(dateString: string) { - const formatted = `${dateString.replace(", ", "T")}:00`; - const date = new Date(formatted); - return date; -} diff --git a/backend/utils/getGraphQLMiddleware.ts b/backend/utils/getGraphQLMiddleware.ts deleted file mode 100644 index b887f692..00000000 --- a/backend/utils/getGraphQLMiddleware.ts +++ /dev/null @@ -1,88 +0,0 @@ -import jwt from "jsonwebtoken"; -import { GraphQLResolveInfo } from "graphql"; - -type ResolverFunction = ( - parent: unknown, - args: Record, - context: { req: { headers: { authorization?: string } } }, - info: GraphQLResolveInfo -) => Promise | unknown; - -interface JWTPayload { - role: string; - [key: string]: unknown; -} - -function verifyRole(allowedRoles: string[]) { - return async function verifyRoleMiddleware( - resolve: ResolverFunction, - parent: unknown, - args: Record, - context: { req: { headers: { authorization?: string } } }, - info: GraphQLResolveInfo - ) { - const authHeader = context.req.headers.authorization; - if (!authHeader || !authHeader.startsWith("Bearer")) { - throw new Error("Missing or invalid authorization header"); - } - - try { - const TOKEN = authHeader.split(" ")[1]; - const JWT_SECRET = process.env.JWT_SECRET ?? ""; - const DATA = jwt.verify(TOKEN, JWT_SECRET) as JWTPayload; - const { role } = DATA; - - if (!allowedRoles.includes(role)) { - throw new Error("Request is not authorized"); - } - - return resolve(parent, args, context, info); - } catch (err) { - throw new Error("Invalid or expired token"); - } - }; -} - -export default function getGraphQLMiddleware() { - const middleware = { - Query: { - getPastParticipants: verifyRole(["admin", "relief"]), - getCurrentParticipants: verifyRole(["admin", "relief"]), - getParticipantByRoom: verifyRole(["admin", "relief"]), - getParticipantsByRooms: verifyRole(["admin", "relief"]), - getNotes: verifyRole(["admin", "relief"]), - getAllAnnouncements: verifyRole(["admin", "relief"]), - getAnnouncementsInDateRange: verifyRole(["admin", "relief"]), - getAssignedTasks: verifyRole(["admin", "relief"]), - getTasksByType: verifyRole(["admin", "relief"]), - getCustomBadges: verifyRole(["admin", "relief"]), - getSystemBadges: verifyRole(["admin", "relief"]), - hasCompletedAllRequiredTasks: verifyRole(["participant"]), - getEarnedBadgesByParticipant: verifyRole(["admin", "participant"]), - }, - Mutation: { - createParticipant: verifyRole(["admin", "relief"]), - updateParticipant: verifyRole(["admin", "relief"]), - updateMarillacBucks: verifyRole(["admin", "relief"]), - createNote: verifyRole(["admin", "relief"]), - deleteNote: verifyRole(["admin", "relief"]), - createAnnouncement: verifyRole(["admin", "relief"]), - editAnnouncement: verifyRole(["admin", "relief"]), - deleteAnnouncement: verifyRole(["admin", "relief"]), - createTask: verifyRole(["admin", "relief"]), - updateTask: verifyRole(["admin", "relief"]), - deleteTaskById: verifyRole(["admin", "relief"]), - editCustomBadge: verifyRole(["admin", "relief"]), - editBadgeLevel: verifyRole(["admin", "relief"]), - editSystemBadge: verifyRole(["admin", "relief"]), - assignCustomBadge: verifyRole(["admin", "relief"]), - createCustomBadge: verifyRole(["admin", "relief"]), - deleteCustomBadge: verifyRole(["admin", "relief"]), - deleteAssignedTask: verifyRole(["admin", "relief"]), - createAssignedTask: verifyRole(["admin", "relief"]), - updateBadgeStatus: verifyRole(["admin", "relief"]), - }, - }; - - return middleware; -} diff --git a/backend/utils/getGraphQLSchema.ts b/backend/utils/getGraphQLSchema.ts deleted file mode 100644 index a37f0458..00000000 --- a/backend/utils/getGraphQLSchema.ts +++ /dev/null @@ -1,44 +0,0 @@ -import { makeExecutableSchema } from "apollo-server-express"; -import { applyMiddleware } from "graphql-middleware"; -import { merge } from "lodash"; - -import { - typeDefs as scalarTypeDefs, - resolvers as scalarResolvers, -} from "graphql-scalars"; - -import models from "../types/models"; -import enums from "../types/enums"; -import resolvers from "../types/resolvers"; -import responses from "../types/responses"; - -import participantResolver from "../resolvers/participantResolver"; -import noteResolver from "../resolvers/noteResolver"; -import announcementResolver from "../resolvers/announcementResolver"; -import loginResolver from "../resolvers/loginResolver"; -import taskResolver from "../resolvers/taskResolver"; -import badgeResolver from "../resolvers/badgeResolver"; -import assignedTaskResolver from "../resolvers/assignedTaskResolver"; -import reportResolver from "../resolvers/reportResolver"; -import getGraphQLMiddleware from "./getGraphQLMiddleware"; - -export default function getGraphQLSchema() { - const middleware = getGraphQLMiddleware(); - const schema = makeExecutableSchema({ - typeDefs: [...scalarTypeDefs, models, enums, resolvers, responses], - resolvers: merge( - scalarResolvers, - loginResolver, - noteResolver, - announcementResolver, - participantResolver, - taskResolver, - badgeResolver, - assignedTaskResolver, - reportResolver - ), - }); - - const schemaWithMiddleware = applyMiddleware(schema, middleware); - return schemaWithMiddleware; -} diff --git a/backend/utils/mailUtils.ts b/backend/utils/mailUtils.ts new file mode 100644 index 00000000..b984747b --- /dev/null +++ b/backend/utils/mailUtils.ts @@ -0,0 +1,61 @@ +import nodemailer from "nodemailer"; +import { ReportType } from "./reportUtils"; + +// TODO: get smtp env vars +const transporter = nodemailer.createTransport({ + host: process.env.SMTP_HOST || "smtp.gmail.com", + port: parseInt(process.env.SMTP_PORT || "587", 10), + secure: false, + auth: { + user: process.env.SMTP_USER, + pass: process.env.SMTP_PASSWORD, + }, +}); + +export async function sendReportEmail( + to: string, + csvContent: string, + reportType: ReportType +) { + try { + const timestamp = new Date().toISOString().replace(/[:.]/g, "-"); + const filename = `${reportType.toLowerCase()}-report-${timestamp}.csv`; + + const firstLine = csvContent.split("\n")[0]; + const date = firstLine.split(",")[1]; + + await transporter.sendMail({ + from: process.env.SMTP_USER, + to, + subject: `${reportType} Report [${date}]`, + text: `Please find the ${reportType.toLowerCase()} attached as a CSV file.\n\nThis report contains comprehensive data for the reporting period.\n\nBest regards,\nMarillac Place System`, + html: ` + + +

🎉 Your ${reportType} Report is Here!

+

Please find the ${reportType.toLowerCase()} attached as a CSV file.

+

This report contains comprehensive data including:

+
    +
  • Praise With A Raise Tasks 📌
  • +
  • Participant Information 👥
  • +
  • Financial Information 💵
  • +
  • Badges 🏅
  • +
  • Login Stats 📊
  • +
  • Earning Goal ⭐️
  • +
+

Best regards,
Marillac Place System

+ + + `, + attachments: [ + { + filename, + content: csvContent, + contentType: "text/csv", + }, + ], + }); + } catch (err) { + console.error(err); + } +} diff --git a/backend/utils/reportUtils.ts b/backend/utils/reportUtils.ts new file mode 100644 index 00000000..79af9259 --- /dev/null +++ b/backend/utils/reportUtils.ts @@ -0,0 +1,306 @@ +import { GoalAction, Level, TaskStatus, TransactionType } from "@prisma/client"; +import { endOfMonth, endOfWeek, startOfMonth, startOfWeek } from "date-fns"; +import db from "../prisma"; + +export enum ReportType { + WEEKLY = "Weekly", + MONTHLY = "Monthly", +} + +interface PraiseWithARaiseTask { + participantId: number; + taskName: string; + taskStatus: TaskStatus; + date: string; + value: number; + comments: string; +} + +interface ParticipantInformation { + participantId: number; + accountCreationDate: string; + accountRemovalDate: string; +} + +interface FinancialInformation { + participantId: number; + transactionDate: string; + transactionType: TransactionType; + amount: number; +} + +interface Badges { + participantId: number; + issueDate: string; + badgeEarned: string; + level: Level; + description: string; +} + +interface LoginStats { + participantId: number; + loginDate: string; +} + +interface EarningGoal { + participantId: number; + goalAction: GoalAction; + value: number; + date: string; +} + +interface DataReport { + type: ReportType; + date: string; + praiseWithARaiseTasks: PraiseWithARaiseTask[]; + participantInformation: ParticipantInformation[]; + financialInformation: FinancialInformation[]; + badges: Badges[]; + loginStats: LoginStats[]; + earningGoal: EarningGoal[]; +} + +const dateFormatter = new Intl.DateTimeFormat("en-CA", { + month: "2-digit", + day: "2-digit", + year: "numeric", +}); + +function calculateDateRange(type: ReportType) { + if (type === ReportType.WEEKLY) { + const startDate = startOfWeek(new Date()); + const endDate = endOfWeek(new Date()); + return { startDate, endDate }; + } + + const startDate = startOfMonth(new Date()); + const endDate = endOfMonth(new Date()); + return { startDate, endDate }; +} + +export function jsonToCsv(data: object[], headers: string[]): string { + if (data.length === 0) return `${headers.join(",")}\n`; + const csvRows = [headers.join(",")]; + const rows = data.map((row) => { + const values = headers.map((header) => { + const value = (row as Record)[header]; + if ( + typeof value === "string" && + (value.includes(",") || value.includes('"')) + ) { + return `"${value.replace(/"/g, '""')}"`; + } + return value ?? ""; + }); + return values.join(","); + }); + csvRows.push(...rows); + return `${csvRows.join("\n")}\n`; +} + +export async function generateDataReport( + type: ReportType +): Promise { + const { startDate, endDate } = calculateDateRange(type); + try { + const praiseWithARaiseTasks = await db.assignedTask.findMany({ + where: { + status: { not: TaskStatus.ASSIGNED }, + start_date: { + lte: endDate, + gte: startDate, + }, + }, + orderBy: [{ pid: "asc" }, { start_date: "desc" }], + }); + + const participantInformation = await db.participant.findMany({ + where: { + OR: [ + { + arrival: { + gte: startDate, + lte: endDate, + }, + }, + { + departure: { + gte: startDate, + lte: endDate, + }, + }, + ], + }, + orderBy: { pid: "asc" }, + }); + + const financialInformation = await db.transaction.findMany({ + where: { + date: { + gte: startDate, + lte: endDate, + }, + }, + orderBy: [{ pid: "asc" }, { date: "desc" }], + }); + + const badges = await db.achievedBadgeLevel.findMany({ + where: { + date: { + gte: startDate, + lte: endDate, + }, + }, + select: { + pid: true, + date: true, + name: true, + level: true, + badge_level: { + select: { + system_badge: { + select: { + description: true, + }, + }, + }, + }, + }, + orderBy: [{ pid: "asc" }, { date: "desc" }], + }); + + const loginStats = await db.loginHistory.findMany({ + where: { + date: { + gte: startDate, + lte: endDate, + }, + }, + orderBy: [{ pid: "asc" }, { date: "desc" }], + }); + + const earningGoal = await db.earningGoal.findMany({ + where: { + date: { + gte: startDate, + lte: endDate, + }, + }, + orderBy: [{ pid: "asc" }, { date: "desc" }], + }); + + const report: DataReport = { + type, + date: dateFormatter.format(startDate), + praiseWithARaiseTasks: praiseWithARaiseTasks.map((task) => ({ + participantId: task.pid, + taskName: task.name, + taskStatus: task.status, + date: dateFormatter.format(task.start_date), + value: task.value, + comments: task.comment ?? "", + })), + participantInformation: participantInformation.map((participant) => ({ + participantId: participant.pid, + accountCreationDate: dateFormatter.format(participant.arrival), + accountRemovalDate: participant.departure + ? dateFormatter.format(participant.departure) + : "", + })), + financialInformation: financialInformation.map((transaction) => ({ + participantId: transaction.pid, + transactionDate: dateFormatter.format(transaction.date), + transactionType: transaction.type, + amount: transaction.amount, + })), + badges: badges.map((badge) => ({ + participantId: badge.pid, + issueDate: dateFormatter.format(badge.date), + badgeEarned: badge.name, + level: badge.level, + description: badge.badge_level.system_badge.description, + })), + loginStats: loginStats.map((login) => ({ + participantId: login.pid, + loginDate: dateFormatter.format(login.date), + })), + earningGoal: earningGoal.map((goal) => ({ + participantId: goal.pid, + goalAction: goal.action, + value: goal.value, + date: dateFormatter.format(goal.date), + })), + }; + + return report; + } catch (err) { + console.error(err); + return null; + } +} + +export function formatDataReport(report: DataReport): string { + const csvSections: string[] = []; + + csvSections.push(`${report.type} Report,${report.date}`); + csvSections.push(""); + + csvSections.push("=== PRAISE WITH A RAISE TASKS ==="); + csvSections.push( + jsonToCsv(report.praiseWithARaiseTasks, [ + "participantId", + "taskName", + "taskStatus", + "date", + "value", + "comments", + ]) + ); + + csvSections.push("=== PARTICIPANT INFORMATION ==="); + csvSections.push( + jsonToCsv(report.participantInformation, [ + "participantId", + "accountCreationDate", + "accountRemovalDate", + ]) + ); + + csvSections.push("=== FINANCIAL INFORMATION ==="); + csvSections.push( + jsonToCsv(report.financialInformation, [ + "participantId", + "transactionDate", + "transactionType", + "amount", + ]) + ); + + csvSections.push("=== BADGES ==="); + csvSections.push( + jsonToCsv(report.badges, [ + "participantId", + "issueDate", + "badgeEarned", + "level", + "description", + ]) + ); + + csvSections.push("=== LOGIN STATS ==="); + csvSections.push( + jsonToCsv(report.loginStats, ["participantId", "loginDate"]) + ); + + csvSections.push("=== EARNING GOAL ==="); + csvSections.push( + jsonToCsv(report.earningGoal, [ + "participantId", + "goalAction", + "value", + "date", + ]) + ); + + return csvSections.join("\n"); +} diff --git a/backend/utils/taskUtils.ts b/backend/utils/taskUtils.ts new file mode 100644 index 00000000..f49902c3 --- /dev/null +++ b/backend/utils/taskUtils.ts @@ -0,0 +1,179 @@ +import { addDays, endOfDay, startOfWeek, set, startOfDay } from "date-fns"; +import { Task, DayPreference, TimePreference } from "@prisma/client"; +import db from "../prisma"; +import { orderedDays } from "../constants/days"; + +export async function assignTasksToAllParticipants(tasks: Task[]) { + const participants = await db.participant.findMany({ + where: { + OR: [{ departure: null }, { departure: { gt: endOfDay(new Date()) } }], + }, + select: { pid: true }, + }); + + await Promise.all( + participants.map(async (participant) => { + await Promise.all( + tasks.map(async (task) => { + if ( + task.day_preference === DayPreference.PARTICIPANT_PREFERENCE || + task.time_preference === TimePreference.PARTICIPANT_PREFERENCE + ) { + throw new Error("required task must be strictly defined"); + } + + if (task.day_preference === DayPreference.DAILY) { + await Promise.all( + orderedDays.map(async (day) => { + const baseDate = addDays( + startOfWeek(new Date()), + orderedDays.indexOf(day) + ); + if (task.time_preference === TimePreference.SPECIFIC) { + if (task.start_time === null || task.end_time == null) { + throw new Error( + "required task is missing time information" + ); + } + + const startDate = set(baseDate, { + hours: task.start_time.getHours(), + minutes: task.start_time.getMinutes(), + seconds: task.start_time.getSeconds(), + milliseconds: task.start_time.getMilliseconds(), + }); + + const endDate = set(baseDate, { + hours: task.end_time.getHours(), + minutes: task.end_time.getMinutes(), + seconds: task.end_time.getSeconds(), + milliseconds: task.end_time.getMilliseconds(), + }); + + await db.assignedTask.create({ + data: { + pid: participant.pid, + tid: task.tid, + name: task.name, + type: task.type, + value: task.value, + penalty: task.penalty, + comment: task.comment, + start_date: startDate, + end_date: endDate, + }, + }); + } else if (task.time_preference === TimePreference.ANYTIME) { + const startDate = startOfDay(baseDate); + const endDate = addDays(startDate, 1); + + await db.assignedTask.create({ + data: { + pid: participant.pid, + tid: task.tid, + name: task.name, + type: task.type, + value: task.value, + penalty: task.penalty, + comment: task.comment, + start_date: startDate, + end_date: endDate, + }, + }); + } + }) + ); + } else if ( + task.day_preference === DayPreference.EVERY_SELECTED_DAYS + ) { + await Promise.all( + task.days.map(async (day) => { + const baseDate = addDays( + startOfWeek(new Date()), + orderedDays.indexOf(day) + ); + if (task.time_preference === TimePreference.SPECIFIC) { + if (task.start_time === null || task.end_time == null) { + throw new Error( + "required task is missing time information" + ); + } + + const startDate = set(baseDate, { + hours: task.start_time.getHours(), + minutes: task.start_time.getMinutes(), + seconds: task.start_time.getSeconds(), + milliseconds: task.start_time.getMilliseconds(), + }); + + const endDate = set(baseDate, { + hours: task.end_time.getHours(), + minutes: task.end_time.getMinutes(), + seconds: task.end_time.getSeconds(), + milliseconds: task.end_time.getMilliseconds(), + }); + + await db.assignedTask.create({ + data: { + pid: participant.pid, + tid: task.tid, + name: task.name, + type: task.type, + value: task.value, + penalty: task.penalty, + comment: task.comment, + start_date: startDate, + end_date: endDate, + }, + }); + } else if (task.time_preference === TimePreference.ANYTIME) { + const startDate = startOfDay(baseDate); + const endDate = addDays(startDate, 1); + + await db.assignedTask.create({ + data: { + pid: participant.pid, + tid: task.tid, + name: task.name, + type: task.type, + value: task.value, + penalty: task.penalty, + comment: task.comment, + start_date: startDate, + end_date: endDate, + }, + }); + } + }) + ); + } else if (task.day_preference === DayPreference.DAY_RANGE) { + if (task.days.length !== 2) + throw new Error("day range must contain exactly two elements"); + const startDate = addDays( + startOfWeek(new Date()), + orderedDays.indexOf(task.days[0]) + ); + const endDate = addDays( + startOfWeek(new Date()), + orderedDays.indexOf(task.days[1]) + 1 + ); + + await db.assignedTask.create({ + data: { + pid: participant.pid, + tid: task.tid, + name: task.name, + type: task.type, + value: task.value, + penalty: task.penalty, + comment: task.comment, + start_date: startDate, + end_date: endDate, + }, + }); + } + }) + ); + }) + ); +} diff --git a/backend/utils/transactionUtils.ts b/backend/utils/transactionUtils.ts new file mode 100644 index 00000000..e6f4a351 --- /dev/null +++ b/backend/utils/transactionUtils.ts @@ -0,0 +1,47 @@ +import { GoalAction } from "@prisma/client"; +import db from "../prisma"; +import { updateBadgeLevelProgress } from "./badgeUtils"; +import { MONEY_EARNED } from "../constants/systemBadges"; + +export default async function processEarning( + pid: number, + amount: number, + reason: string +) { + if (amount <= 0) throw new Error("invalid amount"); + + const participant = await db.participant.findUnique({ + where: { pid }, + }); + if (!participant) throw new Error("participant not found"); + + const newBalance = participant.balance + amount; + const newEarnings = participant.total_earnings + amount; + await db.participant.update({ + where: { pid }, + data: { + balance: newBalance, + total_earnings: newEarnings, + }, + }); + + const earningGoal = await db.earningGoal.findFirst({ + where: { pid }, + orderBy: [{ date: "desc" }], + }); + if ( + earningGoal !== null && + earningGoal.action !== GoalAction.REACHED && + earningGoal.value <= newEarnings + ) { + await db.earningGoal.create({ + data: { pid, action: GoalAction.REACHED, value: earningGoal.value }, + }); + } + + await db.transaction.create({ + data: { pid, amount, reason }, + }); + + await updateBadgeLevelProgress(MONEY_EARNED, pid, amount); +} diff --git a/backend/utils/updateLoginStreak.ts b/backend/utils/updateLoginStreak.ts deleted file mode 100644 index dbd21903..00000000 --- a/backend/utils/updateLoginStreak.ts +++ /dev/null @@ -1,46 +0,0 @@ -import prisma from "../prisma"; -import { getToday } from "./formatDateTime"; - -export async function addLogin(participant_id: number): Promise { - try { - await prisma.login.create({ - data: { - participant_id, - login_date: getToday(), - }, - }); - return true; - } catch (err) { - return false; - } -} - -export async function updateLoginStreak( - participant_id: number -): Promise { - const mostRecentLogin = await prisma.login.findFirst({ - where: { participant_id }, - orderBy: { login_date: "desc" }, - select: { login_date: true }, - }); - if (mostRecentLogin?.login_date) { - const today = new Date().toISOString().split(",")[0]; - const lastLoginDate = new Date(mostRecentLogin.login_date) - .toISOString() - .split(",")[0]; - if (today === lastLoginDate) { - const progress = await prisma.participantProgress.findUnique({ - where: { participant_id }, - }); - return progress!.days_logged_in; - } - } - const updated = await prisma.participantProgress.update({ - where: { participant_id }, - data: { - days_logged_in: { increment: 1 }, - }, - }); - await addLogin(participant_id); - return updated!.days_logged_in; -} diff --git a/backend/yarn.lock b/backend/yarn.lock index 2070119e..89ac9a02 100644 --- a/backend/yarn.lock +++ b/backend/yarn.lock @@ -4,7 +4,7 @@ "@apollo/protobufjs@1.2.2": version "1.2.2" - resolved "https://registry.npmjs.org/@apollo/protobufjs/-/protobufjs-1.2.2.tgz" + resolved "https://registry.yarnpkg.com/@apollo/protobufjs/-/protobufjs-1.2.2.tgz#4bd92cd7701ccaef6d517cdb75af2755f049f87c" integrity sha512-vF+zxhPiLtkwxONs6YanSt1EpwpGilThpneExUN5K3tCymuxNnVq2yojTvnpRjv2QfsEIt/n7ozPIIzBLwGIDQ== dependencies: "@protobufjs/aspromise" "^1.1.2" @@ -23,19 +23,19 @@ "@apollographql/apollo-tools@^0.5.0": version "0.5.4" - resolved "https://registry.npmjs.org/@apollographql/apollo-tools/-/apollo-tools-0.5.4.tgz" + resolved "https://registry.yarnpkg.com/@apollographql/apollo-tools/-/apollo-tools-0.5.4.tgz#cb3998c6cf12e494b90c733f44dd9935e2d8196c" integrity sha512-shM3q7rUbNyXVVRkQJQseXv6bnYM3BUma/eZhwXR4xsuM+bqWnJKvW7SAfRjP7LuSCocrexa5AXhjjawNHrIlw== "@apollographql/graphql-playground-html@1.6.27": version "1.6.27" - resolved "https://registry.npmjs.org/@apollographql/graphql-playground-html/-/graphql-playground-html-1.6.27.tgz" + resolved "https://registry.yarnpkg.com/@apollographql/graphql-playground-html/-/graphql-playground-html-1.6.27.tgz#bc9ab60e9445aa2a8813b4e94f152fa72b756335" integrity sha512-tea2LweZvn6y6xFV11K0KC8ETjmm52mQrW+ezgB2O/aTQf8JGyFmMcRPFgUaQZeHbWdm8iisDC6EjOKsXu0nfw== dependencies: xss "^1.0.8" "@apollographql/graphql-upload-8-fork@^8.1.4": version "8.1.4" - resolved "https://registry.npmjs.org/@apollographql/graphql-upload-8-fork/-/graphql-upload-8-fork-8.1.4.tgz" + resolved "https://registry.yarnpkg.com/@apollographql/graphql-upload-8-fork/-/graphql-upload-8-fork-8.1.4.tgz#898a6826cf53b13e42161884b0090d3bb8c8b2f3" integrity sha512-lHAj/PUegYu02zza9Pg0bQQYH5I0ah1nyIzu2YIqOv41P0vu3GCBISAmQCfFHThK7N3dy7dLFPhoKcXlXRLPoQ== dependencies: "@types/express" "*" @@ -48,7 +48,7 @@ "@aws-crypto/sha256-browser@5.2.0": version "5.2.0" - resolved "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-5.2.0.tgz" + resolved "https://registry.yarnpkg.com/@aws-crypto/sha256-browser/-/sha256-browser-5.2.0.tgz#153895ef1dba6f9fce38af550e0ef58988eb649e" integrity sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw== dependencies: "@aws-crypto/sha256-js" "^5.2.0" @@ -59,9 +59,9 @@ "@smithy/util-utf8" "^2.0.0" tslib "^2.6.2" -"@aws-crypto/sha256-js@^5.2.0", "@aws-crypto/sha256-js@5.2.0": +"@aws-crypto/sha256-js@5.2.0", "@aws-crypto/sha256-js@^5.2.0": version "5.2.0" - resolved "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-5.2.0.tgz" + resolved "https://registry.yarnpkg.com/@aws-crypto/sha256-js/-/sha256-js-5.2.0.tgz#c4fdb773fdbed9a664fc1a95724e206cf3860042" integrity sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA== dependencies: "@aws-crypto/util" "^5.2.0" @@ -70,398 +70,500 @@ "@aws-crypto/supports-web-crypto@^5.2.0": version "5.2.0" - resolved "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-5.2.0.tgz" + resolved "https://registry.yarnpkg.com/@aws-crypto/supports-web-crypto/-/supports-web-crypto-5.2.0.tgz#a1e399af29269be08e695109aa15da0a07b5b5fb" integrity sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg== dependencies: tslib "^2.6.2" "@aws-crypto/util@^5.2.0": version "5.2.0" - resolved "https://registry.npmjs.org/@aws-crypto/util/-/util-5.2.0.tgz" + resolved "https://registry.yarnpkg.com/@aws-crypto/util/-/util-5.2.0.tgz#71284c9cffe7927ddadac793c14f14886d3876da" integrity sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ== dependencies: "@aws-sdk/types" "^3.222.0" "@smithy/util-utf8" "^2.0.0" tslib "^2.6.2" -"@aws-sdk/client-cognito-identity@3.835.0": - version "3.835.0" +"@aws-sdk/client-cognito-identity@3.929.0": + version "3.929.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.929.0.tgz#d8783f28d06d05a185e00f5993e4d18ac350d3e1" + integrity sha512-2h4Vb4aIjsDWgfgbUaiy+3Q6u3j5kU3ZB7f9b5rADdM6MGlxWxAa8IKOUXYG6ST3XBL8lAdfUtoyj6yB67U6WA== dependencies: "@aws-crypto/sha256-browser" "5.2.0" "@aws-crypto/sha256-js" "5.2.0" - "@aws-sdk/core" "3.835.0" - "@aws-sdk/credential-provider-node" "3.835.0" - "@aws-sdk/middleware-host-header" "3.821.0" - "@aws-sdk/middleware-logger" "3.821.0" - "@aws-sdk/middleware-recursion-detection" "3.821.0" - "@aws-sdk/middleware-user-agent" "3.835.0" - "@aws-sdk/region-config-resolver" "3.821.0" - "@aws-sdk/types" "3.821.0" - "@aws-sdk/util-endpoints" "3.828.0" - "@aws-sdk/util-user-agent-browser" "3.821.0" - "@aws-sdk/util-user-agent-node" "3.835.0" - "@smithy/config-resolver" "^4.1.4" - "@smithy/core" "^3.5.3" - "@smithy/fetch-http-handler" "^5.0.4" - "@smithy/hash-node" "^4.0.4" - "@smithy/invalid-dependency" "^4.0.4" - "@smithy/middleware-content-length" "^4.0.4" - "@smithy/middleware-endpoint" "^4.1.12" - "@smithy/middleware-retry" "^4.1.13" - "@smithy/middleware-serde" "^4.0.8" - "@smithy/middleware-stack" "^4.0.4" - "@smithy/node-config-provider" "^4.1.3" - "@smithy/node-http-handler" "^4.0.6" - "@smithy/protocol-http" "^5.1.2" - "@smithy/smithy-client" "^4.4.4" - "@smithy/types" "^4.3.1" - "@smithy/url-parser" "^4.0.4" - "@smithy/util-base64" "^4.0.0" - "@smithy/util-body-length-browser" "^4.0.0" - "@smithy/util-body-length-node" "^4.0.0" - "@smithy/util-defaults-mode-browser" "^4.0.20" - "@smithy/util-defaults-mode-node" "^4.0.20" - "@smithy/util-endpoints" "^3.0.6" - "@smithy/util-middleware" "^4.0.4" - "@smithy/util-retry" "^4.0.6" - "@smithy/util-utf8" "^4.0.0" + "@aws-sdk/core" "3.928.0" + "@aws-sdk/credential-provider-node" "3.929.0" + "@aws-sdk/middleware-host-header" "3.922.0" + "@aws-sdk/middleware-logger" "3.922.0" + "@aws-sdk/middleware-recursion-detection" "3.922.0" + "@aws-sdk/middleware-user-agent" "3.928.0" + "@aws-sdk/region-config-resolver" "3.925.0" + "@aws-sdk/types" "3.922.0" + "@aws-sdk/util-endpoints" "3.922.0" + "@aws-sdk/util-user-agent-browser" "3.922.0" + "@aws-sdk/util-user-agent-node" "3.928.0" + "@smithy/config-resolver" "^4.4.2" + "@smithy/core" "^3.17.2" + "@smithy/fetch-http-handler" "^5.3.5" + "@smithy/hash-node" "^4.2.4" + "@smithy/invalid-dependency" "^4.2.4" + "@smithy/middleware-content-length" "^4.2.4" + "@smithy/middleware-endpoint" "^4.3.6" + "@smithy/middleware-retry" "^4.4.6" + "@smithy/middleware-serde" "^4.2.4" + "@smithy/middleware-stack" "^4.2.4" + "@smithy/node-config-provider" "^4.3.4" + "@smithy/node-http-handler" "^4.4.4" + "@smithy/protocol-http" "^5.3.4" + "@smithy/smithy-client" "^4.9.2" + "@smithy/types" "^4.8.1" + "@smithy/url-parser" "^4.2.4" + "@smithy/util-base64" "^4.3.0" + "@smithy/util-body-length-browser" "^4.2.0" + "@smithy/util-body-length-node" "^4.2.1" + "@smithy/util-defaults-mode-browser" "^4.3.5" + "@smithy/util-defaults-mode-node" "^4.2.8" + "@smithy/util-endpoints" "^3.2.4" + "@smithy/util-middleware" "^4.2.4" + "@smithy/util-retry" "^4.2.4" + "@smithy/util-utf8" "^4.2.0" tslib "^2.6.2" -"@aws-sdk/client-sso@3.835.0": - version "3.835.0" +"@aws-sdk/client-ses@^3.731.1": + version "3.929.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-ses/-/client-ses-3.929.0.tgz#5e3cac6350c80758052ec7f052d19c229520f749" + integrity sha512-CD0Y+aPV+NLy7lBM6yEs1PiwA7gRaokVU430mTrAA8YeHe9WT3HMlYVM9zrj6rKjzmvgl/OyZMyuzf+VKrxwvA== dependencies: "@aws-crypto/sha256-browser" "5.2.0" "@aws-crypto/sha256-js" "5.2.0" - "@aws-sdk/core" "3.835.0" - "@aws-sdk/middleware-host-header" "3.821.0" - "@aws-sdk/middleware-logger" "3.821.0" - "@aws-sdk/middleware-recursion-detection" "3.821.0" - "@aws-sdk/middleware-user-agent" "3.835.0" - "@aws-sdk/region-config-resolver" "3.821.0" - "@aws-sdk/types" "3.821.0" - "@aws-sdk/util-endpoints" "3.828.0" - "@aws-sdk/util-user-agent-browser" "3.821.0" - "@aws-sdk/util-user-agent-node" "3.835.0" - "@smithy/config-resolver" "^4.1.4" - "@smithy/core" "^3.5.3" - "@smithy/fetch-http-handler" "^5.0.4" - "@smithy/hash-node" "^4.0.4" - "@smithy/invalid-dependency" "^4.0.4" - "@smithy/middleware-content-length" "^4.0.4" - "@smithy/middleware-endpoint" "^4.1.12" - "@smithy/middleware-retry" "^4.1.13" - "@smithy/middleware-serde" "^4.0.8" - "@smithy/middleware-stack" "^4.0.4" - "@smithy/node-config-provider" "^4.1.3" - "@smithy/node-http-handler" "^4.0.6" - "@smithy/protocol-http" "^5.1.2" - "@smithy/smithy-client" "^4.4.4" - "@smithy/types" "^4.3.1" - "@smithy/url-parser" "^4.0.4" - "@smithy/util-base64" "^4.0.0" - "@smithy/util-body-length-browser" "^4.0.0" - "@smithy/util-body-length-node" "^4.0.0" - "@smithy/util-defaults-mode-browser" "^4.0.20" - "@smithy/util-defaults-mode-node" "^4.0.20" - "@smithy/util-endpoints" "^3.0.6" - "@smithy/util-middleware" "^4.0.4" - "@smithy/util-retry" "^4.0.6" - "@smithy/util-utf8" "^4.0.0" + "@aws-sdk/core" "3.928.0" + "@aws-sdk/credential-provider-node" "3.929.0" + "@aws-sdk/middleware-host-header" "3.922.0" + "@aws-sdk/middleware-logger" "3.922.0" + "@aws-sdk/middleware-recursion-detection" "3.922.0" + "@aws-sdk/middleware-user-agent" "3.928.0" + "@aws-sdk/region-config-resolver" "3.925.0" + "@aws-sdk/types" "3.922.0" + "@aws-sdk/util-endpoints" "3.922.0" + "@aws-sdk/util-user-agent-browser" "3.922.0" + "@aws-sdk/util-user-agent-node" "3.928.0" + "@smithy/config-resolver" "^4.4.2" + "@smithy/core" "^3.17.2" + "@smithy/fetch-http-handler" "^5.3.5" + "@smithy/hash-node" "^4.2.4" + "@smithy/invalid-dependency" "^4.2.4" + "@smithy/middleware-content-length" "^4.2.4" + "@smithy/middleware-endpoint" "^4.3.6" + "@smithy/middleware-retry" "^4.4.6" + "@smithy/middleware-serde" "^4.2.4" + "@smithy/middleware-stack" "^4.2.4" + "@smithy/node-config-provider" "^4.3.4" + "@smithy/node-http-handler" "^4.4.4" + "@smithy/protocol-http" "^5.3.4" + "@smithy/smithy-client" "^4.9.2" + "@smithy/types" "^4.8.1" + "@smithy/url-parser" "^4.2.4" + "@smithy/util-base64" "^4.3.0" + "@smithy/util-body-length-browser" "^4.2.0" + "@smithy/util-body-length-node" "^4.2.1" + "@smithy/util-defaults-mode-browser" "^4.3.5" + "@smithy/util-defaults-mode-node" "^4.2.8" + "@smithy/util-endpoints" "^3.2.4" + "@smithy/util-middleware" "^4.2.4" + "@smithy/util-retry" "^4.2.4" + "@smithy/util-utf8" "^4.2.0" + "@smithy/util-waiter" "^4.2.4" tslib "^2.6.2" -"@aws-sdk/core@3.835.0": - version "3.835.0" - dependencies: - "@aws-sdk/types" "3.821.0" - "@aws-sdk/xml-builder" "3.821.0" - "@smithy/core" "^3.5.3" - "@smithy/node-config-provider" "^4.1.3" - "@smithy/property-provider" "^4.0.4" - "@smithy/protocol-http" "^5.1.2" - "@smithy/signature-v4" "^5.1.2" - "@smithy/smithy-client" "^4.4.4" - "@smithy/types" "^4.3.1" - "@smithy/util-base64" "^4.0.0" - "@smithy/util-body-length-browser" "^4.0.0" - "@smithy/util-middleware" "^4.0.4" - "@smithy/util-utf8" "^4.0.0" - fast-xml-parser "4.4.1" +"@aws-sdk/client-sso@3.929.0": + version "3.929.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso/-/client-sso-3.929.0.tgz#82f85ac8a15ed296b94f391477a5f417bbc31549" + integrity sha512-CE1T7PvN2MDRCw96BTUz2Zcnb6Lae3Dl4w3TPB5auBv2sAiIPbQegFUwT2C8teMDGCNXyndzoTvAd4wmO9AcpA== + dependencies: + "@aws-crypto/sha256-browser" "5.2.0" + "@aws-crypto/sha256-js" "5.2.0" + "@aws-sdk/core" "3.928.0" + "@aws-sdk/middleware-host-header" "3.922.0" + "@aws-sdk/middleware-logger" "3.922.0" + "@aws-sdk/middleware-recursion-detection" "3.922.0" + "@aws-sdk/middleware-user-agent" "3.928.0" + "@aws-sdk/region-config-resolver" "3.925.0" + "@aws-sdk/types" "3.922.0" + "@aws-sdk/util-endpoints" "3.922.0" + "@aws-sdk/util-user-agent-browser" "3.922.0" + "@aws-sdk/util-user-agent-node" "3.928.0" + "@smithy/config-resolver" "^4.4.2" + "@smithy/core" "^3.17.2" + "@smithy/fetch-http-handler" "^5.3.5" + "@smithy/hash-node" "^4.2.4" + "@smithy/invalid-dependency" "^4.2.4" + "@smithy/middleware-content-length" "^4.2.4" + "@smithy/middleware-endpoint" "^4.3.6" + "@smithy/middleware-retry" "^4.4.6" + "@smithy/middleware-serde" "^4.2.4" + "@smithy/middleware-stack" "^4.2.4" + "@smithy/node-config-provider" "^4.3.4" + "@smithy/node-http-handler" "^4.4.4" + "@smithy/protocol-http" "^5.3.4" + "@smithy/smithy-client" "^4.9.2" + "@smithy/types" "^4.8.1" + "@smithy/url-parser" "^4.2.4" + "@smithy/util-base64" "^4.3.0" + "@smithy/util-body-length-browser" "^4.2.0" + "@smithy/util-body-length-node" "^4.2.1" + "@smithy/util-defaults-mode-browser" "^4.3.5" + "@smithy/util-defaults-mode-node" "^4.2.8" + "@smithy/util-endpoints" "^3.2.4" + "@smithy/util-middleware" "^4.2.4" + "@smithy/util-retry" "^4.2.4" + "@smithy/util-utf8" "^4.2.0" + tslib "^2.6.2" + +"@aws-sdk/core@3.928.0": + version "3.928.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/core/-/core-3.928.0.tgz#abbb1ad9e6f1ab0ea951245aa90a92f59f8722c5" + integrity sha512-e28J2uKjy2uub4u41dNnmzAu0AN3FGB+LRcLN2Qnwl9Oq3kIcByl5sM8ZD+vWpNG+SFUrUasBCq8cMnHxwXZ4w== + dependencies: + "@aws-sdk/types" "3.922.0" + "@aws-sdk/xml-builder" "3.921.0" + "@smithy/core" "^3.17.2" + "@smithy/node-config-provider" "^4.3.4" + "@smithy/property-provider" "^4.2.4" + "@smithy/protocol-http" "^5.3.4" + "@smithy/signature-v4" "^5.3.4" + "@smithy/smithy-client" "^4.9.2" + "@smithy/types" "^4.8.1" + "@smithy/util-base64" "^4.3.0" + "@smithy/util-middleware" "^4.2.4" + "@smithy/util-utf8" "^4.2.0" tslib "^2.6.2" -"@aws-sdk/credential-provider-cognito-identity@3.835.0": - version "3.835.0" +"@aws-sdk/credential-provider-cognito-identity@3.929.0": + version "3.929.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.929.0.tgz#dd930858187a6d0927f27fb091840ff6d6f1b3fc" + integrity sha512-M9h1z/Us5eJyOMijmngcfo/uBgwhIer5fk5rFI++3Bf1jqzjkF9xERW0xklbShRHKLlNfG6EOpBEhvbm8Clygw== dependencies: - "@aws-sdk/client-cognito-identity" "3.835.0" - "@aws-sdk/types" "3.821.0" - "@smithy/property-provider" "^4.0.4" - "@smithy/types" "^4.3.1" + "@aws-sdk/client-cognito-identity" "3.929.0" + "@aws-sdk/types" "3.922.0" + "@smithy/property-provider" "^4.2.4" + "@smithy/types" "^4.8.1" tslib "^2.6.2" -"@aws-sdk/credential-provider-env@3.835.0": - version "3.835.0" +"@aws-sdk/credential-provider-env@3.928.0": + version "3.928.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-env/-/credential-provider-env-3.928.0.tgz#4f6f59ee3504b208e2b36af66dcd56b1d0e9aa2f" + integrity sha512-tB8F9Ti0/NFyFVQX8UQtgRik88evtHpyT6WfXOB4bAY6lEnEHA0ubJZmk9y+aUeoE+OsGLx70dC3JUsiiCPJkQ== dependencies: - "@aws-sdk/core" "3.835.0" - "@aws-sdk/types" "3.821.0" - "@smithy/property-provider" "^4.0.4" - "@smithy/types" "^4.3.1" + "@aws-sdk/core" "3.928.0" + "@aws-sdk/types" "3.922.0" + "@smithy/property-provider" "^4.2.4" + "@smithy/types" "^4.8.1" tslib "^2.6.2" -"@aws-sdk/credential-provider-http@3.835.0": - version "3.835.0" - dependencies: - "@aws-sdk/core" "3.835.0" - "@aws-sdk/types" "3.821.0" - "@smithy/fetch-http-handler" "^5.0.4" - "@smithy/node-http-handler" "^4.0.6" - "@smithy/property-provider" "^4.0.4" - "@smithy/protocol-http" "^5.1.2" - "@smithy/smithy-client" "^4.4.4" - "@smithy/types" "^4.3.1" - "@smithy/util-stream" "^4.2.2" +"@aws-sdk/credential-provider-http@3.928.0": + version "3.928.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-http/-/credential-provider-http-3.928.0.tgz#6ca904bcda2e89c866a4209e2f5feff238da258e" + integrity sha512-67ynC/8UW9Y8Gn1ZZtC3OgcQDGWrJelHmkbgpmmxYUrzVhp+NINtz3wiTzrrBFhPH/8Uy6BxvhMfXhn0ptcMEQ== + dependencies: + "@aws-sdk/core" "3.928.0" + "@aws-sdk/types" "3.922.0" + "@smithy/fetch-http-handler" "^5.3.5" + "@smithy/node-http-handler" "^4.4.4" + "@smithy/property-provider" "^4.2.4" + "@smithy/protocol-http" "^5.3.4" + "@smithy/smithy-client" "^4.9.2" + "@smithy/types" "^4.8.1" + "@smithy/util-stream" "^4.5.5" tslib "^2.6.2" -"@aws-sdk/credential-provider-ini@3.835.0": - version "3.835.0" - dependencies: - "@aws-sdk/core" "3.835.0" - "@aws-sdk/credential-provider-env" "3.835.0" - "@aws-sdk/credential-provider-http" "3.835.0" - "@aws-sdk/credential-provider-process" "3.835.0" - "@aws-sdk/credential-provider-sso" "3.835.0" - "@aws-sdk/credential-provider-web-identity" "3.835.0" - "@aws-sdk/nested-clients" "3.835.0" - "@aws-sdk/types" "3.821.0" - "@smithy/credential-provider-imds" "^4.0.6" - "@smithy/property-provider" "^4.0.4" - "@smithy/shared-ini-file-loader" "^4.0.4" - "@smithy/types" "^4.3.1" +"@aws-sdk/credential-provider-ini@3.929.0": + version "3.929.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.929.0.tgz#45e08e5163ac6bdbb279892f56ec104508bd71f5" + integrity sha512-XIzWsJUYeS/DjggHFB53sGGjXdlN/BA6x+Y/JvLbpdkGD2yLISU34/cDPbK/O8BAQCRTCQ69VPa/1AdNgZZRQw== + dependencies: + "@aws-sdk/core" "3.928.0" + "@aws-sdk/credential-provider-env" "3.928.0" + "@aws-sdk/credential-provider-http" "3.928.0" + "@aws-sdk/credential-provider-process" "3.928.0" + "@aws-sdk/credential-provider-sso" "3.929.0" + "@aws-sdk/credential-provider-web-identity" "3.929.0" + "@aws-sdk/nested-clients" "3.929.0" + "@aws-sdk/types" "3.922.0" + "@smithy/credential-provider-imds" "^4.2.4" + "@smithy/property-provider" "^4.2.4" + "@smithy/shared-ini-file-loader" "^4.3.4" + "@smithy/types" "^4.8.1" tslib "^2.6.2" -"@aws-sdk/credential-provider-node@3.835.0": - version "3.835.0" - dependencies: - "@aws-sdk/credential-provider-env" "3.835.0" - "@aws-sdk/credential-provider-http" "3.835.0" - "@aws-sdk/credential-provider-ini" "3.835.0" - "@aws-sdk/credential-provider-process" "3.835.0" - "@aws-sdk/credential-provider-sso" "3.835.0" - "@aws-sdk/credential-provider-web-identity" "3.835.0" - "@aws-sdk/types" "3.821.0" - "@smithy/credential-provider-imds" "^4.0.6" - "@smithy/property-provider" "^4.0.4" - "@smithy/shared-ini-file-loader" "^4.0.4" - "@smithy/types" "^4.3.1" +"@aws-sdk/credential-provider-node@3.929.0": + version "3.929.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.929.0.tgz#83eddbee1a6c6b84ef1dc7b9244898effa1324c1" + integrity sha512-GhNZEacpa7fh8GNggshm5S93UK25bCV5aDK8c2vfe7Y3OxBiL89Ox5GUKCu0xIOqiBdfYkI9wvWCFsQRRn7Bjw== + dependencies: + "@aws-sdk/credential-provider-env" "3.928.0" + "@aws-sdk/credential-provider-http" "3.928.0" + "@aws-sdk/credential-provider-ini" "3.929.0" + "@aws-sdk/credential-provider-process" "3.928.0" + "@aws-sdk/credential-provider-sso" "3.929.0" + "@aws-sdk/credential-provider-web-identity" "3.929.0" + "@aws-sdk/types" "3.922.0" + "@smithy/credential-provider-imds" "^4.2.4" + "@smithy/property-provider" "^4.2.4" + "@smithy/shared-ini-file-loader" "^4.3.4" + "@smithy/types" "^4.8.1" tslib "^2.6.2" -"@aws-sdk/credential-provider-process@3.835.0": - version "3.835.0" +"@aws-sdk/credential-provider-process@3.928.0": + version "3.928.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-process/-/credential-provider-process-3.928.0.tgz#47771efe637d08ae7dd9ece8afbc52d2b0e92f39" + integrity sha512-XL0juran8yhqwn0mreV+NJeHJOkcRBaExsvVn9fXWW37A4gLh4esSJxM2KbSNh0t+/Bk3ehBI5sL9xad+yRDuw== dependencies: - "@aws-sdk/core" "3.835.0" - "@aws-sdk/types" "3.821.0" - "@smithy/property-provider" "^4.0.4" - "@smithy/shared-ini-file-loader" "^4.0.4" - "@smithy/types" "^4.3.1" + "@aws-sdk/core" "3.928.0" + "@aws-sdk/types" "3.922.0" + "@smithy/property-provider" "^4.2.4" + "@smithy/shared-ini-file-loader" "^4.3.4" + "@smithy/types" "^4.8.1" tslib "^2.6.2" -"@aws-sdk/credential-provider-sso@3.835.0": - version "3.835.0" - dependencies: - "@aws-sdk/client-sso" "3.835.0" - "@aws-sdk/core" "3.835.0" - "@aws-sdk/token-providers" "3.835.0" - "@aws-sdk/types" "3.821.0" - "@smithy/property-provider" "^4.0.4" - "@smithy/shared-ini-file-loader" "^4.0.4" - "@smithy/types" "^4.3.1" +"@aws-sdk/credential-provider-sso@3.929.0": + version "3.929.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.929.0.tgz#6390e8b3a06c95c1a6301d1658455f2881df4258" + integrity sha512-aADe6cLo4+9MUOe0GnC5kUn8IduEKnTxqBlsciZOplU0/0+Rdp9rRh/e9ZBskeIXZ33eO2HG+KDAf1lvtPT7dA== + dependencies: + "@aws-sdk/client-sso" "3.929.0" + "@aws-sdk/core" "3.928.0" + "@aws-sdk/token-providers" "3.929.0" + "@aws-sdk/types" "3.922.0" + "@smithy/property-provider" "^4.2.4" + "@smithy/shared-ini-file-loader" "^4.3.4" + "@smithy/types" "^4.8.1" tslib "^2.6.2" -"@aws-sdk/credential-provider-web-identity@3.835.0": - version "3.835.0" - dependencies: - "@aws-sdk/core" "3.835.0" - "@aws-sdk/nested-clients" "3.835.0" - "@aws-sdk/types" "3.821.0" - "@smithy/property-provider" "^4.0.4" - "@smithy/types" "^4.3.1" +"@aws-sdk/credential-provider-web-identity@3.929.0": + version "3.929.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.929.0.tgz#588070995f1756fc2818494ed8ae32ed6b6fed6a" + integrity sha512-L18JtW28xUZVTRHblgqZ8QTVGQfxpMLIuVYgQXrVWiY9Iz9EF4XrfZo3ywCAgqfgLi5pgg3fCxx/pe7uiMOs2w== + dependencies: + "@aws-sdk/core" "3.928.0" + "@aws-sdk/nested-clients" "3.929.0" + "@aws-sdk/types" "3.922.0" + "@smithy/property-provider" "^4.2.4" + "@smithy/shared-ini-file-loader" "^4.3.4" + "@smithy/types" "^4.8.1" tslib "^2.6.2" -"@aws-sdk/credential-providers@^3.186.0", "@aws-sdk/credential-providers@^3.188.0": - version "3.835.0" - dependencies: - "@aws-sdk/client-cognito-identity" "3.835.0" - "@aws-sdk/core" "3.835.0" - "@aws-sdk/credential-provider-cognito-identity" "3.835.0" - "@aws-sdk/credential-provider-env" "3.835.0" - "@aws-sdk/credential-provider-http" "3.835.0" - "@aws-sdk/credential-provider-ini" "3.835.0" - "@aws-sdk/credential-provider-node" "3.835.0" - "@aws-sdk/credential-provider-process" "3.835.0" - "@aws-sdk/credential-provider-sso" "3.835.0" - "@aws-sdk/credential-provider-web-identity" "3.835.0" - "@aws-sdk/nested-clients" "3.835.0" - "@aws-sdk/types" "3.821.0" - "@smithy/config-resolver" "^4.1.4" - "@smithy/core" "^3.5.3" - "@smithy/credential-provider-imds" "^4.0.6" - "@smithy/node-config-provider" "^4.1.3" - "@smithy/property-provider" "^4.0.4" - "@smithy/types" "^4.3.1" +"@aws-sdk/credential-providers@^3.186.0": + version "3.929.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-providers/-/credential-providers-3.929.0.tgz#85472407034970686fcdd54cfc31f7c3fdf13fc9" + integrity sha512-AOzXE24dnHtJLYVByqanxVyHk0A4K4OJRX/i37NqBweuDdt+cM35zEohYck/DbflIWjyQSOT9JO5zGLfrhbQEQ== + dependencies: + "@aws-sdk/client-cognito-identity" "3.929.0" + "@aws-sdk/core" "3.928.0" + "@aws-sdk/credential-provider-cognito-identity" "3.929.0" + "@aws-sdk/credential-provider-env" "3.928.0" + "@aws-sdk/credential-provider-http" "3.928.0" + "@aws-sdk/credential-provider-ini" "3.929.0" + "@aws-sdk/credential-provider-node" "3.929.0" + "@aws-sdk/credential-provider-process" "3.928.0" + "@aws-sdk/credential-provider-sso" "3.929.0" + "@aws-sdk/credential-provider-web-identity" "3.929.0" + "@aws-sdk/nested-clients" "3.929.0" + "@aws-sdk/types" "3.922.0" + "@smithy/config-resolver" "^4.4.2" + "@smithy/core" "^3.17.2" + "@smithy/credential-provider-imds" "^4.2.4" + "@smithy/node-config-provider" "^4.3.4" + "@smithy/property-provider" "^4.2.4" + "@smithy/types" "^4.8.1" tslib "^2.6.2" -"@aws-sdk/middleware-host-header@3.821.0": - version "3.821.0" +"@aws-sdk/middleware-host-header@3.922.0": + version "3.922.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-host-header/-/middleware-host-header-3.922.0.tgz#f19621fd19764f7eb0a33795ce0f43402080e394" + integrity sha512-HPquFgBnq/KqKRVkiuCt97PmWbKtxQ5iUNLEc6FIviqOoZTmaYG3EDsIbuFBz9C4RHJU4FKLmHL2bL3FEId6AA== dependencies: - "@aws-sdk/types" "3.821.0" - "@smithy/protocol-http" "^5.1.2" - "@smithy/types" "^4.3.1" + "@aws-sdk/types" "3.922.0" + "@smithy/protocol-http" "^5.3.4" + "@smithy/types" "^4.8.1" tslib "^2.6.2" -"@aws-sdk/middleware-logger@3.821.0": - version "3.821.0" +"@aws-sdk/middleware-logger@3.922.0": + version "3.922.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-logger/-/middleware-logger-3.922.0.tgz#3a43e2b7ec72b043751a7fd45f0514db77756be9" + integrity sha512-AkvYO6b80FBm5/kk2E636zNNcNgjztNNUxpqVx+huyGn9ZqGTzS4kLqW2hO6CBe5APzVtPCtiQsXL24nzuOlAg== dependencies: - "@aws-sdk/types" "3.821.0" - "@smithy/types" "^4.3.1" + "@aws-sdk/types" "3.922.0" + "@smithy/types" "^4.8.1" tslib "^2.6.2" -"@aws-sdk/middleware-recursion-detection@3.821.0": - version "3.821.0" +"@aws-sdk/middleware-recursion-detection@3.922.0": + version "3.922.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.922.0.tgz#cca89bd926ad05893f9b99b253fa50a6b6c7b829" + integrity sha512-TtSCEDonV/9R0VhVlCpxZbp/9sxQvTTRKzIf8LxW3uXpby6Wl8IxEciBJlxmSkoqxh542WRcko7NYODlvL/gDA== dependencies: - "@aws-sdk/types" "3.821.0" - "@smithy/protocol-http" "^5.1.2" - "@smithy/types" "^4.3.1" + "@aws-sdk/types" "3.922.0" + "@aws/lambda-invoke-store" "^0.1.1" + "@smithy/protocol-http" "^5.3.4" + "@smithy/types" "^4.8.1" tslib "^2.6.2" -"@aws-sdk/middleware-user-agent@3.835.0": - version "3.835.0" - dependencies: - "@aws-sdk/core" "3.835.0" - "@aws-sdk/types" "3.821.0" - "@aws-sdk/util-endpoints" "3.828.0" - "@smithy/core" "^3.5.3" - "@smithy/protocol-http" "^5.1.2" - "@smithy/types" "^4.3.1" +"@aws-sdk/middleware-user-agent@3.928.0": + version "3.928.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.928.0.tgz#51fb98b44849712fe01e655182c9b9d9cb1d9630" + integrity sha512-ESvcfLx5PtpdUM3ptCwb80toBTd3y5I4w5jaeOPHihiZr7jkRLE/nsaCKzlqscPs6UQ8xI0maav04JUiTskcHw== + dependencies: + "@aws-sdk/core" "3.928.0" + "@aws-sdk/types" "3.922.0" + "@aws-sdk/util-endpoints" "3.922.0" + "@smithy/core" "^3.17.2" + "@smithy/protocol-http" "^5.3.4" + "@smithy/types" "^4.8.1" tslib "^2.6.2" -"@aws-sdk/nested-clients@3.835.0": - version "3.835.0" +"@aws-sdk/nested-clients@3.929.0": + version "3.929.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/nested-clients/-/nested-clients-3.929.0.tgz#e8781115e6e237021e54830a7febcef840d808cc" + integrity sha512-emR4LTSupxPed1ni0zVxz5msezz/gA1YYXooiW567+NyhvLgSzDvNjK7GPU1waLCj1LrRFe7NkXX1pwa5sPrpw== dependencies: "@aws-crypto/sha256-browser" "5.2.0" "@aws-crypto/sha256-js" "5.2.0" - "@aws-sdk/core" "3.835.0" - "@aws-sdk/middleware-host-header" "3.821.0" - "@aws-sdk/middleware-logger" "3.821.0" - "@aws-sdk/middleware-recursion-detection" "3.821.0" - "@aws-sdk/middleware-user-agent" "3.835.0" - "@aws-sdk/region-config-resolver" "3.821.0" - "@aws-sdk/types" "3.821.0" - "@aws-sdk/util-endpoints" "3.828.0" - "@aws-sdk/util-user-agent-browser" "3.821.0" - "@aws-sdk/util-user-agent-node" "3.835.0" - "@smithy/config-resolver" "^4.1.4" - "@smithy/core" "^3.5.3" - "@smithy/fetch-http-handler" "^5.0.4" - "@smithy/hash-node" "^4.0.4" - "@smithy/invalid-dependency" "^4.0.4" - "@smithy/middleware-content-length" "^4.0.4" - "@smithy/middleware-endpoint" "^4.1.12" - "@smithy/middleware-retry" "^4.1.13" - "@smithy/middleware-serde" "^4.0.8" - "@smithy/middleware-stack" "^4.0.4" - "@smithy/node-config-provider" "^4.1.3" - "@smithy/node-http-handler" "^4.0.6" - "@smithy/protocol-http" "^5.1.2" - "@smithy/smithy-client" "^4.4.4" - "@smithy/types" "^4.3.1" - "@smithy/url-parser" "^4.0.4" - "@smithy/util-base64" "^4.0.0" - "@smithy/util-body-length-browser" "^4.0.0" - "@smithy/util-body-length-node" "^4.0.0" - "@smithy/util-defaults-mode-browser" "^4.0.20" - "@smithy/util-defaults-mode-node" "^4.0.20" - "@smithy/util-endpoints" "^3.0.6" - "@smithy/util-middleware" "^4.0.4" - "@smithy/util-retry" "^4.0.6" - "@smithy/util-utf8" "^4.0.0" + "@aws-sdk/core" "3.928.0" + "@aws-sdk/middleware-host-header" "3.922.0" + "@aws-sdk/middleware-logger" "3.922.0" + "@aws-sdk/middleware-recursion-detection" "3.922.0" + "@aws-sdk/middleware-user-agent" "3.928.0" + "@aws-sdk/region-config-resolver" "3.925.0" + "@aws-sdk/types" "3.922.0" + "@aws-sdk/util-endpoints" "3.922.0" + "@aws-sdk/util-user-agent-browser" "3.922.0" + "@aws-sdk/util-user-agent-node" "3.928.0" + "@smithy/config-resolver" "^4.4.2" + "@smithy/core" "^3.17.2" + "@smithy/fetch-http-handler" "^5.3.5" + "@smithy/hash-node" "^4.2.4" + "@smithy/invalid-dependency" "^4.2.4" + "@smithy/middleware-content-length" "^4.2.4" + "@smithy/middleware-endpoint" "^4.3.6" + "@smithy/middleware-retry" "^4.4.6" + "@smithy/middleware-serde" "^4.2.4" + "@smithy/middleware-stack" "^4.2.4" + "@smithy/node-config-provider" "^4.3.4" + "@smithy/node-http-handler" "^4.4.4" + "@smithy/protocol-http" "^5.3.4" + "@smithy/smithy-client" "^4.9.2" + "@smithy/types" "^4.8.1" + "@smithy/url-parser" "^4.2.4" + "@smithy/util-base64" "^4.3.0" + "@smithy/util-body-length-browser" "^4.2.0" + "@smithy/util-body-length-node" "^4.2.1" + "@smithy/util-defaults-mode-browser" "^4.3.5" + "@smithy/util-defaults-mode-node" "^4.2.8" + "@smithy/util-endpoints" "^3.2.4" + "@smithy/util-middleware" "^4.2.4" + "@smithy/util-retry" "^4.2.4" + "@smithy/util-utf8" "^4.2.0" tslib "^2.6.2" -"@aws-sdk/region-config-resolver@3.821.0": - version "3.821.0" +"@aws-sdk/region-config-resolver@3.925.0": + version "3.925.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/region-config-resolver/-/region-config-resolver-3.925.0.tgz#789fab5b277ec21753b908c78cee18bd70998475" + integrity sha512-FOthcdF9oDb1pfQBRCfWPZhJZT5wqpvdAS5aJzB1WDZ+6EuaAhLzLH/fW1slDunIqq1PSQGG3uSnVglVVOvPHQ== dependencies: - "@aws-sdk/types" "3.821.0" - "@smithy/node-config-provider" "^4.1.3" - "@smithy/types" "^4.3.1" - "@smithy/util-config-provider" "^4.0.0" - "@smithy/util-middleware" "^4.0.4" + "@aws-sdk/types" "3.922.0" + "@smithy/config-resolver" "^4.4.2" + "@smithy/node-config-provider" "^4.3.4" + "@smithy/types" "^4.8.1" tslib "^2.6.2" -"@aws-sdk/token-providers@3.835.0": - version "3.835.0" - dependencies: - "@aws-sdk/core" "3.835.0" - "@aws-sdk/nested-clients" "3.835.0" - "@aws-sdk/types" "3.821.0" - "@smithy/property-provider" "^4.0.4" - "@smithy/shared-ini-file-loader" "^4.0.4" - "@smithy/types" "^4.3.1" +"@aws-sdk/token-providers@3.929.0": + version "3.929.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/token-providers/-/token-providers-3.929.0.tgz#cc15bf597ad499f2e639a8ef15daeee169a2951f" + integrity sha512-78kph1R6TVJ53VXDKUmt64HMqWjTECLymJ7kLguz2QJiWh2ZdLvpyYGvaueEwwhisHYBh2qef1tGIf/PpEb8SQ== + dependencies: + "@aws-sdk/core" "3.928.0" + "@aws-sdk/nested-clients" "3.929.0" + "@aws-sdk/types" "3.922.0" + "@smithy/property-provider" "^4.2.4" + "@smithy/shared-ini-file-loader" "^4.3.4" + "@smithy/types" "^4.8.1" tslib "^2.6.2" -"@aws-sdk/types@^3.222.0", "@aws-sdk/types@3.821.0": - version "3.821.0" +"@aws-sdk/types@3.922.0", "@aws-sdk/types@^3.222.0": + version "3.922.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.922.0.tgz#e92daf55272171caac8dba9d425786646466d935" + integrity sha512-eLA6XjVobAUAMivvM7DBL79mnHyrm+32TkXNWZua5mnxF+6kQCfblKKJvxMZLGosO53/Ex46ogim8IY5Nbqv2w== dependencies: - "@smithy/types" "^4.3.1" + "@smithy/types" "^4.8.1" tslib "^2.6.2" -"@aws-sdk/util-endpoints@3.828.0": - version "3.828.0" +"@aws-sdk/util-endpoints@3.922.0": + version "3.922.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-endpoints/-/util-endpoints-3.922.0.tgz#817457d6a78ce366bdb7b201c638dba5ffdbfe60" + integrity sha512-4ZdQCSuNMY8HMlR1YN4MRDdXuKd+uQTeKIr5/pIM+g3TjInZoj8imvXudjcrFGA63UF3t92YVTkBq88mg58RXQ== dependencies: - "@aws-sdk/types" "3.821.0" - "@smithy/types" "^4.3.1" - "@smithy/util-endpoints" "^3.0.6" + "@aws-sdk/types" "3.922.0" + "@smithy/types" "^4.8.1" + "@smithy/url-parser" "^4.2.4" + "@smithy/util-endpoints" "^3.2.4" tslib "^2.6.2" "@aws-sdk/util-locate-window@^3.0.0": - version "3.804.0" + version "3.893.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-locate-window/-/util-locate-window-3.893.0.tgz#5df15f24e1edbe12ff1fe8906f823b51cd53bae8" + integrity sha512-T89pFfgat6c8nMmpI8eKjBcDcgJq36+m9oiXbcUzeU55MP9ZuGgBomGjGnHaEyF36jenW9gmg3NfZDm0AO2XPg== dependencies: tslib "^2.6.2" -"@aws-sdk/util-user-agent-browser@3.821.0": - version "3.821.0" +"@aws-sdk/util-user-agent-browser@3.922.0": + version "3.922.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.922.0.tgz#734bbe74d34c3fbdb96aca80a151d3d7e7e87c30" + integrity sha512-qOJAERZ3Plj1st7M4Q5henl5FRpE30uLm6L9edZqZXGR6c7ry9jzexWamWVpQ4H4xVAVmiO9dIEBAfbq4mduOA== dependencies: - "@aws-sdk/types" "3.821.0" - "@smithy/types" "^4.3.1" + "@aws-sdk/types" "3.922.0" + "@smithy/types" "^4.8.1" bowser "^2.11.0" tslib "^2.6.2" -"@aws-sdk/util-user-agent-node@3.835.0": - version "3.835.0" +"@aws-sdk/util-user-agent-node@3.928.0": + version "3.928.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.928.0.tgz#adcd93ae10d484e6c172369d6140ec6d09a2eb5c" + integrity sha512-s0jP67nQLLWVWfBtqTkZUkSWK5e6OI+rs+wFya2h9VLyWBFir17XSDI891s8HZKIVCEl8eBrup+hhywm4nsIAA== dependencies: - "@aws-sdk/middleware-user-agent" "3.835.0" - "@aws-sdk/types" "3.821.0" - "@smithy/node-config-provider" "^4.1.3" - "@smithy/types" "^4.3.1" + "@aws-sdk/middleware-user-agent" "3.928.0" + "@aws-sdk/types" "3.922.0" + "@smithy/node-config-provider" "^4.3.4" + "@smithy/types" "^4.8.1" tslib "^2.6.2" -"@aws-sdk/xml-builder@3.821.0": - version "3.821.0" +"@aws-sdk/xml-builder@3.921.0": + version "3.921.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/xml-builder/-/xml-builder-3.921.0.tgz#e4d4d21b09341648b598d720c602ee76d7a84594" + integrity sha512-LVHg0jgjyicKKvpNIEMXIMr1EBViESxcPkqfOlT+X1FkmUMTNZEEVF18tOJg4m4hV5vxtkWcqtr4IEeWa1C41Q== dependencies: - "@smithy/types" "^4.3.1" + "@smithy/types" "^4.8.1" + fast-xml-parser "5.2.5" tslib "^2.6.2" +"@aws/lambda-invoke-store@^0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@aws/lambda-invoke-store/-/lambda-invoke-store-0.1.1.tgz#2e67f17040b930bde00a79ffb484eb9e77472b06" + integrity sha512-RcLam17LdlbSOSp9VxmUu1eI6Mwxp+OwhD2QhiSNmNCzoDb0EeUXTD2n/WbcnrAYMGlmf05th6QYq23VqvJqpA== + "@babel/code-frame@7.12.11": version "7.12.11" - resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f" integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw== dependencies: "@babel/highlight" "^7.10.4" "@babel/helper-validator-identifier@^7.25.9": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz" - integrity sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow== + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz#010b6938fab7cb7df74aa2bbc06aa503b8fe5fb4" + integrity sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q== "@babel/highlight@^7.10.4": version "7.25.9" - resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.25.9.tgz" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.25.9.tgz#8141ce68fc73757946f983b343f1231f4691acc6" integrity sha512-llL88JShoCsth8fF8R4SJnIn+WLvR6ccFxu1H3FlMhDontdcmZWf2HgIZ7AIqV3Xcck1idlohrN4EUBQz6klbw== dependencies: "@babel/helper-validator-identifier" "^7.25.9" @@ -469,41 +571,172 @@ js-tokens "^4.0.0" picocolors "^1.0.0" -"@colors/colors@^1.6.0", "@colors/colors@1.6.0": +"@colors/colors@1.6.0", "@colors/colors@^1.6.0": version "1.6.0" - resolved "https://registry.npmjs.org/@colors/colors/-/colors-1.6.0.tgz" + resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.6.0.tgz#ec6cd237440700bc23ca23087f513c75508958b0" integrity sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA== "@cspotcode/source-map-support@^0.8.0": version "0.8.1" - resolved "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz" + resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== dependencies: "@jridgewell/trace-mapping" "0.3.9" -"@dabh/diagnostics@^2.0.2": - version "2.0.3" +"@dabh/diagnostics@^2.0.8": + version "2.0.8" + resolved "https://registry.yarnpkg.com/@dabh/diagnostics/-/diagnostics-2.0.8.tgz#ead97e72ca312cf0e6dd7af0d300b58993a31a5e" + integrity sha512-R4MSXTVnuMzGD7bzHdW2ZhhdPC/igELENcq5IjEverBvq5hn1SXCWcsi6eSsdWP0/Ur+SItRRjAktmdoX/8R/Q== dependencies: - colorspace "1.1.x" + "@so-ric/colorspace" "^1.1.6" enabled "2.0.x" kuler "^2.0.0" -"@esbuild/darwin-arm64@0.25.6": - version "0.25.6" +"@esbuild/aix-ppc64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz#80fcbe36130e58b7670511e888b8e88a259ed76c" + integrity sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA== + +"@esbuild/android-arm64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.25.12.tgz#8aa4965f8d0a7982dc21734bf6601323a66da752" + integrity sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg== + +"@esbuild/android-arm@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.25.12.tgz#300712101f7f50f1d2627a162e6e09b109b6767a" + integrity sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg== + +"@esbuild/android-x64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.25.12.tgz#87dfb27161202bdc958ef48bb61b09c758faee16" + integrity sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg== + +"@esbuild/darwin-arm64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.25.12.tgz#79197898ec1ff745d21c071e1c7cc3c802f0c1fd" + integrity sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg== + +"@esbuild/darwin-x64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.25.12.tgz#146400a8562133f45c4d2eadcf37ddd09718079e" + integrity sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA== + +"@esbuild/freebsd-arm64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.12.tgz#1c5f9ba7206e158fd2b24c59fa2d2c8bb47ca0fe" + integrity sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg== + +"@esbuild/freebsd-x64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.25.12.tgz#ea631f4a36beaac4b9279fa0fcc6ca29eaeeb2b3" + integrity sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ== + +"@esbuild/linux-arm64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.25.12.tgz#e1066bce58394f1b1141deec8557a5f0a22f5977" + integrity sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ== + +"@esbuild/linux-arm@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.25.12.tgz#452cd66b20932d08bdc53a8b61c0e30baf4348b9" + integrity sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw== + +"@esbuild/linux-ia32@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.25.12.tgz#b24f8acc45bcf54192c7f2f3be1b53e6551eafe0" + integrity sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA== + +"@esbuild/linux-loong64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.25.12.tgz#f9cfffa7fc8322571fbc4c8b3268caf15bd81ad0" + integrity sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng== + +"@esbuild/linux-mips64el@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.25.12.tgz#575a14bd74644ffab891adc7d7e60d275296f2cd" + integrity sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw== + +"@esbuild/linux-ppc64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.25.12.tgz#75b99c70a95fbd5f7739d7692befe60601591869" + integrity sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA== + +"@esbuild/linux-riscv64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.25.12.tgz#2e3259440321a44e79ddf7535c325057da875cd6" + integrity sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w== + +"@esbuild/linux-s390x@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.25.12.tgz#17676cabbfe5928da5b2a0d6df5d58cd08db2663" + integrity sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg== + +"@esbuild/linux-x64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.25.12.tgz#0583775685ca82066d04c3507f09524d3cd7a306" + integrity sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw== + +"@esbuild/netbsd-arm64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.12.tgz#f04c4049cb2e252fe96b16fed90f70746b13f4a4" + integrity sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg== + +"@esbuild/netbsd-x64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.25.12.tgz#77da0d0a0d826d7c921eea3d40292548b258a076" + integrity sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ== + +"@esbuild/openbsd-arm64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.12.tgz#6296f5867aedef28a81b22ab2009c786a952dccd" + integrity sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A== + +"@esbuild/openbsd-x64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.25.12.tgz#f8d23303360e27b16cf065b23bbff43c14142679" + integrity sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw== + +"@esbuild/openharmony-arm64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.12.tgz#49e0b768744a3924be0d7fd97dd6ce9b2923d88d" + integrity sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg== + +"@esbuild/sunos-x64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.25.12.tgz#a6ed7d6778d67e528c81fb165b23f4911b9b13d6" + integrity sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w== + +"@esbuild/win32-arm64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.25.12.tgz#9ac14c378e1b653af17d08e7d3ce34caef587323" + integrity sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg== + +"@esbuild/win32-ia32@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.25.12.tgz#918942dcbbb35cc14fca39afb91b5e6a3d127267" + integrity sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ== + +"@esbuild/win32-x64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.25.12.tgz#9bdad8176be7811ad148d1f8772359041f46c6c5" + integrity sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA== "@eslint-community/eslint-utils@^4.4.0": - version "4.7.0" + version "4.9.0" + resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.9.0.tgz#7308df158e064f0dd8b8fdb58aa14fa2a7f913b3" + integrity sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g== dependencies: eslint-visitor-keys "^3.4.3" "@eslint-community/regexpp@^4.5.1": - version "4.12.1" - resolved "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz" - integrity sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ== + version "4.12.2" + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.12.2.tgz#bccdf615bcf7b6e8db830ec0b8d21c9a25de597b" + integrity sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew== "@eslint/eslintrc@^0.4.3": version "0.4.3" - resolved "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.3.tgz#9e42981ef035beb3dd49add17acb96e8ff6f394c" integrity sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw== dependencies: ajv "^6.12.4" @@ -518,199 +751,22 @@ "@faker-js/faker@^8.4.1": version "8.4.1" - resolved "https://registry.npmjs.org/@faker-js/faker/-/faker-8.4.1.tgz" + resolved "https://registry.yarnpkg.com/@faker-js/faker/-/faker-8.4.1.tgz#5d5e8aee8fce48f5e189bf730ebd1f758f491451" integrity sha512-XQ3cU+Q8Uqmrbf2e0cIC/QN43sTBSC8KF12u29Mb47tWrt2hAgBXSgpZMj4Ao8Uk0iJcU99QsOCaIL8934obCg== "@faker-js/faker@^9.8.0": version "9.9.0" - resolved "https://registry.npmjs.org/@faker-js/faker/-/faker-9.9.0.tgz" + resolved "https://registry.yarnpkg.com/@faker-js/faker/-/faker-9.9.0.tgz#3ad015fbbaaae7af3149555e0f22b4b30134c69d" integrity sha512-OEl393iCOoo/z8bMezRlJu+GlRGlsKbUAN7jKB6LhnKoqKve5DXRpalbItIIcwnCjs1k/FOPjFzcA6Qn+H+YbA== -"@firebase/app-compat@0.x": - version "0.5.4" - resolved "https://registry.npmjs.org/@firebase/app-compat/-/app-compat-0.5.4.tgz" - integrity sha512-T7ifGmb+awJEcp542Ek4HtNfBxcBrnuk1ggUdqyFEdsXHdq7+wVlhvE6YukTL7NS8hIkEfL7TMAPx/uCNqt30g== - dependencies: - "@firebase/app" "0.14.4" - "@firebase/component" "0.7.0" - "@firebase/logger" "0.5.0" - "@firebase/util" "1.13.0" - tslib "^2.1.0" - -"@firebase/app-types@0.6.3", "@firebase/app-types@0.x": - version "0.6.3" - resolved "https://registry.npmjs.org/@firebase/app-types/-/app-types-0.6.3.tgz" - integrity sha512-/M13DPPati7FQHEQ9Minjk1HGLm/4K4gs9bR4rzLCWJg64yGtVC0zNg9gDpkw9yc2cvol/mNFxqTtd4geGrwdw== - -"@firebase/app-types@0.7.0": - version "0.7.0" - resolved "https://registry.npmjs.org/@firebase/app-types/-/app-types-0.7.0.tgz" - integrity sha512-6fbHQwDv2jp/v6bXhBw2eSRbNBpxHcd1NBF864UksSMVIqIyri9qpJB1Mn6sGZE+bnDsSQBC5j2TbMxYsJQkQg== - -"@firebase/app@0.14.4": - version "0.14.4" - resolved "https://registry.npmjs.org/@firebase/app/-/app-0.14.4.tgz" - integrity sha512-pUxEGmR+uu21OG/icAovjlu1fcYJzyVhhT0rsCrn+zi+nHtrS43Bp9KPn9KGa4NMspCUE++nkyiqziuIvJdwzw== - dependencies: - "@firebase/component" "0.7.0" - "@firebase/logger" "0.5.0" - "@firebase/util" "1.13.0" - idb "7.1.1" - tslib "^2.1.0" - -"@firebase/auth-interop-types@0.1.6": - version "0.1.6" - resolved "https://registry.npmjs.org/@firebase/auth-interop-types/-/auth-interop-types-0.1.6.tgz" - integrity sha512-etIi92fW3CctsmR9e3sYM3Uqnoq861M0Id9mdOPF6PWIg38BXL5k4upCNBggGUpLIS0H1grMOvy/wn1xymwe2g== - -"@firebase/component@0.5.13": - version "0.5.13" - resolved "https://registry.npmjs.org/@firebase/component/-/component-0.5.13.tgz" - integrity sha512-hxhJtpD8Ppf/VU2Rlos6KFCEV77TGIGD5bJlkPK1+B/WUe0mC6dTjW7KhZtXTc+qRBp9nFHWcsIORnT8liHP9w== - dependencies: - "@firebase/util" "1.5.2" - tslib "^2.1.0" - -"@firebase/component@0.7.0": - version "0.7.0" - resolved "https://registry.npmjs.org/@firebase/component/-/component-0.7.0.tgz" - integrity sha512-wR9En2A+WESUHexjmRHkqtaVH94WLNKt6rmeqZhSLBybg4Wyf0Umk04SZsS6sBq4102ZsDBFwoqMqJYj2IoDSg== - dependencies: - "@firebase/util" "1.13.0" - tslib "^2.1.0" - -"@firebase/database-compat@^0.1.1": - version "0.1.8" - resolved "https://registry.npmjs.org/@firebase/database-compat/-/database-compat-0.1.8.tgz" - integrity sha512-dhXr5CSieBuKNdU96HgeewMQCT9EgOIkfF1GNy+iRrdl7BWLxmlKuvLfK319rmIytSs/vnCzcD9uqyxTeU/A3A== - dependencies: - "@firebase/component" "0.5.13" - "@firebase/database" "0.12.8" - "@firebase/database-types" "0.9.7" - "@firebase/logger" "0.3.2" - "@firebase/util" "1.5.2" - tslib "^2.1.0" - -"@firebase/database-types@^0.7.2": - version "0.7.3" - resolved "https://registry.npmjs.org/@firebase/database-types/-/database-types-0.7.3.tgz" - integrity sha512-dSOJmhKQ0nL8O4EQMRNGpSExWCXeHtH57gGg0BfNAdWcKhC8/4Y+qfKLfWXzyHvrSecpLmO0SmAi/iK2D5fp5A== - dependencies: - "@firebase/app-types" "0.6.3" - -"@firebase/database-types@0.9.7": - version "0.9.7" - resolved "https://registry.npmjs.org/@firebase/database-types/-/database-types-0.9.7.tgz" - integrity sha512-EFhgL89Fz6DY3kkB8TzdHvdu8XaqqvzcF2DLVOXEnQ3Ms7L755p5EO42LfxXoJqb9jKFvgLpFmKicyJG25WFWw== - dependencies: - "@firebase/app-types" "0.7.0" - "@firebase/util" "1.5.2" - -"@firebase/database@0.12.8": - version "0.12.8" - resolved "https://registry.npmjs.org/@firebase/database/-/database-0.12.8.tgz" - integrity sha512-JBQVfFLzfhxlQbl4OU6ov9fdsddkytBQdtSSR49cz48homj38ccltAhK6seum+BI7f28cV2LFHF9672lcN+qxA== - dependencies: - "@firebase/auth-interop-types" "0.1.6" - "@firebase/component" "0.5.13" - "@firebase/logger" "0.3.2" - "@firebase/util" "1.5.2" - faye-websocket "0.11.4" - tslib "^2.1.0" - -"@firebase/logger@0.3.2": - version "0.3.2" - resolved "https://registry.npmjs.org/@firebase/logger/-/logger-0.3.2.tgz" - integrity sha512-lzLrcJp9QBWpo40OcOM9B8QEtBw2Fk1zOZQdvv+rWS6gKmhQBCEMc4SMABQfWdjsylBcDfniD1Q+fUX1dcBTXA== - dependencies: - tslib "^2.1.0" - -"@firebase/logger@0.5.0": - version "0.5.0" - resolved "https://registry.npmjs.org/@firebase/logger/-/logger-0.5.0.tgz" - integrity sha512-cGskaAvkrnh42b3BA3doDWeBmuHFO/Mx5A83rbRDYakPjO9bJtRL3dX7javzc2Rr/JHZf4HlterTW2lUkfeN4g== - dependencies: - tslib "^2.1.0" - -"@firebase/util@1.13.0": - version "1.13.0" - resolved "https://registry.npmjs.org/@firebase/util/-/util-1.13.0.tgz" - integrity sha512-0AZUyYUfpMNcztR5l09izHwXkZpghLgCUaAGjtMwXnCg3bj4ml5VgiwqOMOxJ+Nw4qN/zJAaOQBcJ7KGkWStqQ== - dependencies: - tslib "^2.1.0" - -"@firebase/util@1.5.2", "@firebase/util@1.x": - version "1.5.2" - resolved "https://registry.npmjs.org/@firebase/util/-/util-1.5.2.tgz" - integrity sha512-YvBH2UxFcdWG2HdFnhxZptPl2eVFlpOyTH66iDo13JPEYraWzWToZ5AMTtkyRHVmu7sssUpQlU9igy1KET7TOw== - dependencies: - tslib "^2.1.0" - "@glideapps/ts-necessities@2.2.3": version "2.2.3" - resolved "https://registry.npmjs.org/@glideapps/ts-necessities/-/ts-necessities-2.2.3.tgz" + resolved "https://registry.yarnpkg.com/@glideapps/ts-necessities/-/ts-necessities-2.2.3.tgz#62e25b3a1ace8b8c3f47e55e66d101a0a854eb23" integrity sha512-gXi0awOZLHk3TbW55GZLCPP6O+y/b5X1pBXKBVckFONSwF1z1E5ND2BGJsghQFah+pW7pkkyFb2VhUQI2qhL5w== -"@google-cloud/firestore@^4.5.0": - version "4.15.1" - resolved "https://registry.npmjs.org/@google-cloud/firestore/-/firestore-4.15.1.tgz" - integrity sha512-2PWsCkEF1W02QbghSeRsNdYKN1qavrHBP3m72gPDMHQSYrGULOaTi7fSJquQmAtc4iPVB2/x6h80rdLHTATQtA== - dependencies: - fast-deep-equal "^3.1.1" - functional-red-black-tree "^1.0.1" - google-gax "^2.24.1" - protobufjs "^6.8.6" - -"@google-cloud/paginator@^3.0.7": - version "3.0.7" - resolved "https://registry.npmjs.org/@google-cloud/paginator/-/paginator-3.0.7.tgz" - integrity sha512-jJNutk0arIQhmpUUQJPJErsojqo834KcyB6X7a1mxuic8i1tKXxde8E69IZxNZawRIlZdIK2QY4WALvlK5MzYQ== - dependencies: - arrify "^2.0.0" - extend "^3.0.2" - -"@google-cloud/projectify@^2.0.0": - version "2.1.1" - resolved "https://registry.npmjs.org/@google-cloud/projectify/-/projectify-2.1.1.tgz" - integrity sha512-+rssMZHnlh0twl122gXY4/aCrk0G1acBqkHFfYddtsqpYXGxA29nj9V5V9SfC+GyOG00l650f6lG9KL+EpFEWQ== - -"@google-cloud/promisify@^2.0.0": - version "2.0.4" - resolved "https://registry.npmjs.org/@google-cloud/promisify/-/promisify-2.0.4.tgz" - integrity sha512-j8yRSSqswWi1QqUGKVEKOG03Q7qOoZP6/h2zN2YO+F5h2+DHU0bSrHCK9Y7lo2DI9fBd8qGAw795sf+3Jva4yA== - -"@google-cloud/storage@^5.3.0": - version "5.20.5" - resolved "https://registry.npmjs.org/@google-cloud/storage/-/storage-5.20.5.tgz" - integrity sha512-lOs/dCyveVF8TkVFnFSF7IGd0CJrTm91qiK6JLu+Z8qiT+7Ag0RyVhxZIWkhiACqwABo7kSHDm8FdH8p2wxSSw== - dependencies: - "@google-cloud/paginator" "^3.0.7" - "@google-cloud/projectify" "^2.0.0" - "@google-cloud/promisify" "^2.0.0" - abort-controller "^3.0.0" - arrify "^2.0.0" - async-retry "^1.3.3" - compressible "^2.0.12" - configstore "^5.0.0" - duplexify "^4.0.0" - ent "^2.2.0" - extend "^3.0.2" - gaxios "^4.0.0" - google-auth-library "^7.14.1" - hash-stream-validation "^0.2.2" - mime "^3.0.0" - mime-types "^2.0.8" - p-limit "^3.0.1" - pumpify "^2.0.0" - retry-request "^4.2.2" - stream-events "^1.0.4" - teeny-request "^7.1.3" - uuid "^8.0.0" - xdg-basedir "^4.0.0" - "@graphql-tools/batch-execute@8.5.1": version "8.5.1" - resolved "https://registry.npmjs.org/@graphql-tools/batch-execute/-/batch-execute-8.5.1.tgz" + resolved "https://registry.yarnpkg.com/@graphql-tools/batch-execute/-/batch-execute-8.5.1.tgz#fa3321d58c64041650be44250b1ebc3aab0ba7a9" integrity sha512-hRVDduX0UDEneVyEWtc2nu5H2PxpfSfM/riUlgZvo/a/nG475uyehxR5cFGvTEPEQUKY3vGIlqvtRigzqTfCew== dependencies: "@graphql-tools/utils" "8.9.0" @@ -720,7 +776,7 @@ "@graphql-tools/delegate@^8.8.1": version "8.8.1" - resolved "https://registry.npmjs.org/@graphql-tools/delegate/-/delegate-8.8.1.tgz" + resolved "https://registry.yarnpkg.com/@graphql-tools/delegate/-/delegate-8.8.1.tgz#0653a72f38947f38ab7917dfac50ebf6a6b883e9" integrity sha512-NDcg3GEQmdEHlnF7QS8b4lM1PSF+DKeFcIlLEfZFBvVq84791UtJcDj8734sIHLukmyuAxXMfA1qLd2l4lZqzA== dependencies: "@graphql-tools/batch-execute" "8.5.1" @@ -732,15 +788,15 @@ "@graphql-tools/merge@8.3.1": version "8.3.1" - resolved "https://registry.npmjs.org/@graphql-tools/merge/-/merge-8.3.1.tgz" + resolved "https://registry.yarnpkg.com/@graphql-tools/merge/-/merge-8.3.1.tgz#06121942ad28982a14635dbc87b5d488a041d722" integrity sha512-BMm99mqdNZbEYeTPK3it9r9S6rsZsQKtlqJsSBknAclXq2pGEfOxjcIZi+kBSkHZKPKCRrYDd5vY0+rUmIHVLg== dependencies: "@graphql-tools/utils" "8.9.0" tslib "^2.4.0" -"@graphql-tools/schema@^8.5.1", "@graphql-tools/schema@8.5.1": +"@graphql-tools/schema@8.5.1", "@graphql-tools/schema@^8.5.1": version "8.5.1" - resolved "https://registry.npmjs.org/@graphql-tools/schema/-/schema-8.5.1.tgz" + resolved "https://registry.yarnpkg.com/@graphql-tools/schema/-/schema-8.5.1.tgz#c2f2ff1448380919a330312399c9471db2580b58" integrity sha512-0Esilsh0P/qYcB5DKQpiKeQs/jevzIadNTaT0jeWklPMwNbT7yMX4EqZany7mbeRRlSRwMzNzL5olyFdffHBZg== dependencies: "@graphql-tools/merge" "8.3.1" @@ -750,43 +806,14 @@ "@graphql-tools/utils@8.9.0": version "8.9.0" - resolved "https://registry.npmjs.org/@graphql-tools/utils/-/utils-8.9.0.tgz" + resolved "https://registry.yarnpkg.com/@graphql-tools/utils/-/utils-8.9.0.tgz#c6aa5f651c9c99e1aca55510af21b56ec296cdb7" integrity sha512-pjJIWH0XOVnYGXCqej8g/u/tsfV4LvLlj0eATKQu5zwnxd/TiTHq7Cg313qUPTFFHZ3PP5wJ15chYVtLDwaymg== dependencies: tslib "^2.4.0" -"@grpc/grpc-js@~1.6.0": - version "1.6.12" - resolved "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.6.12.tgz" - integrity sha512-JmvQ03OTSpVd9JTlj/K3IWHSz4Gk/JMLUTtW7Zb0KvO1LcOYGATh5cNuRYzCAeDR3O8wq+q8FZe97eO9MBrkUw== - dependencies: - "@grpc/proto-loader" "^0.7.0" - "@types/node" ">=12.12.47" - -"@grpc/proto-loader@^0.6.12": - version "0.6.13" - resolved "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.6.13.tgz" - integrity sha512-FjxPYDRTn6Ec3V0arm1FtSpmP6V50wuph2yILpyvTKzjc76oDdoihXqM1DzOW5ubvCC8GivfCnNtfaRE8myJ7g== - dependencies: - "@types/long" "^4.0.1" - lodash.camelcase "^4.3.0" - long "^4.0.0" - protobufjs "^6.11.3" - yargs "^16.2.0" - -"@grpc/proto-loader@^0.7.0": - version "0.7.15" - resolved "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.15.tgz" - integrity sha512-tMXdRCfYVixjuFK+Hk0Q1s38gV9zDiDJfWL3h1rv4Qc39oILCu1TRTDt7+fGUI8K4G1Fj125Hx/ru3azECWTyQ== - dependencies: - lodash.camelcase "^4.3.0" - long "^5.0.0" - protobufjs "^7.2.5" - yargs "^17.7.2" - "@humanwhocodes/config-array@^0.5.0": version "0.5.0" - resolved "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.5.0.tgz#1407967d4c6eecd7388f83acf1eaf4d0c6e58ef9" integrity sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg== dependencies: "@humanwhocodes/object-schema" "^1.2.0" @@ -795,12 +822,12 @@ "@humanwhocodes/object-schema@^1.2.0": version "1.2.1" - resolved "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== "@inquirer/checkbox@^2.5.0": version "2.5.0" - resolved "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-2.5.0.tgz" + resolved "https://registry.yarnpkg.com/@inquirer/checkbox/-/checkbox-2.5.0.tgz#41c5c9dd332c0a8fa159be23982ce080d0b199d4" integrity sha512-sMgdETOfi2dUHT8r7TT1BTKOwNvdDGFDXYWtQ2J69SvlYNntk9I/gJe7r5yvMwwsuKnYbuRs3pNhx4tgNck5aA== dependencies: "@inquirer/core" "^9.1.0" @@ -811,7 +838,7 @@ "@inquirer/confirm@^3.2.0": version "3.2.0" - resolved "https://registry.npmjs.org/@inquirer/confirm/-/confirm-3.2.0.tgz" + resolved "https://registry.yarnpkg.com/@inquirer/confirm/-/confirm-3.2.0.tgz#6af1284670ea7c7d95e3f1253684cfbd7228ad6a" integrity sha512-oOIwPs0Dvq5220Z8lGL/6LHRTEr9TgLHmiI99Rj1PJ1p1czTys+olrgBqZk4E2qC0YTzeHprxSQmoHioVdJ7Lw== dependencies: "@inquirer/core" "^9.1.0" @@ -819,7 +846,7 @@ "@inquirer/core@^9.1.0": version "9.2.1" - resolved "https://registry.npmjs.org/@inquirer/core/-/core-9.2.1.tgz" + resolved "https://registry.yarnpkg.com/@inquirer/core/-/core-9.2.1.tgz#677c49dee399c9063f31e0c93f0f37bddc67add1" integrity sha512-F2VBt7W/mwqEU4bL0RnHNZmC/OxzNx9cOYxHqnXX3MP6ruYvZUZAW9imgN9+h/uBT/oP8Gh888J2OZSbjSeWcg== dependencies: "@inquirer/figures" "^1.0.6" @@ -837,7 +864,7 @@ "@inquirer/editor@^2.2.0": version "2.2.0" - resolved "https://registry.npmjs.org/@inquirer/editor/-/editor-2.2.0.tgz" + resolved "https://registry.yarnpkg.com/@inquirer/editor/-/editor-2.2.0.tgz#a41eb7b151bd9a6bc3c0b69219d02d82547bc387" integrity sha512-9KHOpJ+dIL5SZli8lJ6xdaYLPPzB8xB9GZItg39MBybzhxA16vxmszmQFrRwbOA918WA2rvu8xhDEg/p6LXKbw== dependencies: "@inquirer/core" "^9.1.0" @@ -846,7 +873,7 @@ "@inquirer/expand@^2.3.0": version "2.3.0" - resolved "https://registry.npmjs.org/@inquirer/expand/-/expand-2.3.0.tgz" + resolved "https://registry.yarnpkg.com/@inquirer/expand/-/expand-2.3.0.tgz#afc44aee303315a85563e9d0275e658f0ee0e701" integrity sha512-qnJsUcOGCSG1e5DTOErmv2BPQqrtT6uzqn1vI/aYGiPKq+FgslGZmtdnXbhuI7IlT7OByDoEEqdnhUnVR2hhLw== dependencies: "@inquirer/core" "^9.1.0" @@ -854,11 +881,13 @@ yoctocolors-cjs "^2.1.2" "@inquirer/figures@^1.0.5", "@inquirer/figures@^1.0.6": - version "1.0.12" + version "1.0.15" + resolved "https://registry.yarnpkg.com/@inquirer/figures/-/figures-1.0.15.tgz#dbb49ed80df11df74268023b496ac5d9acd22b3a" + integrity sha512-t2IEY+unGHOzAaVM5Xx6DEWKeXlDDcNPeDyUpsRc6CUhBfU3VQOEl+Vssh7VNp1dR8MdUJBWhuObjXCsVpjN5g== "@inquirer/input@^2.3.0": version "2.3.0" - resolved "https://registry.npmjs.org/@inquirer/input/-/input-2.3.0.tgz" + resolved "https://registry.yarnpkg.com/@inquirer/input/-/input-2.3.0.tgz#9b99022f53780fecc842908f3f319b52a5a16865" integrity sha512-XfnpCStx2xgh1LIRqPXrTNEEByqQWoxsWYzNRSEUxJ5c6EQlhMogJ3vHKu8aXuTacebtaZzMAHwEL0kAflKOBw== dependencies: "@inquirer/core" "^9.1.0" @@ -866,7 +895,7 @@ "@inquirer/number@^1.1.0": version "1.1.0" - resolved "https://registry.npmjs.org/@inquirer/number/-/number-1.1.0.tgz" + resolved "https://registry.yarnpkg.com/@inquirer/number/-/number-1.1.0.tgz#4dac004021ea67c89552a261564f103a494cac96" integrity sha512-ilUnia/GZUtfSZy3YEErXLJ2Sljo/mf9fiKc08n18DdwdmDbOzRcTv65H1jjDvlsAuvdFXf4Sa/aL7iw/NanVA== dependencies: "@inquirer/core" "^9.1.0" @@ -874,7 +903,7 @@ "@inquirer/password@^2.2.0": version "2.2.0" - resolved "https://registry.npmjs.org/@inquirer/password/-/password-2.2.0.tgz" + resolved "https://registry.yarnpkg.com/@inquirer/password/-/password-2.2.0.tgz#0b6f26336c259c8a9e5f5a3f2e1a761564f764ba" integrity sha512-5otqIpgsPYIshqhgtEwSspBQE40etouR8VIxzpJkv9i0dVHIpyhiivbkH9/dGiMLdyamT54YRdGJLfl8TFnLHg== dependencies: "@inquirer/core" "^9.1.0" @@ -883,7 +912,7 @@ "@inquirer/prompts@^5.0.2": version "5.5.0" - resolved "https://registry.npmjs.org/@inquirer/prompts/-/prompts-5.5.0.tgz" + resolved "https://registry.yarnpkg.com/@inquirer/prompts/-/prompts-5.5.0.tgz#5805aa15a13180017829aa31d071fd37a43b735d" integrity sha512-BHDeL0catgHdcHbSFFUddNzvx/imzJMft+tWDPwTm3hfu8/tApk1HrooNngB2Mb4qY+KaRWF+iZqoVUPeslEog== dependencies: "@inquirer/checkbox" "^2.5.0" @@ -899,7 +928,7 @@ "@inquirer/rawlist@^2.3.0": version "2.3.0" - resolved "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-2.3.0.tgz" + resolved "https://registry.yarnpkg.com/@inquirer/rawlist/-/rawlist-2.3.0.tgz#6b2c0da39c1cd855af5608b2d627681cdac7277d" integrity sha512-zzfNuINhFF7OLAtGHfhwOW2TlYJyli7lOUoJUXw/uyklcwalV6WRXBXtFIicN8rTRK1XTiPWB4UY+YuW8dsnLQ== dependencies: "@inquirer/core" "^9.1.0" @@ -908,7 +937,7 @@ "@inquirer/search@^1.1.0": version "1.1.0" - resolved "https://registry.npmjs.org/@inquirer/search/-/search-1.1.0.tgz" + resolved "https://registry.yarnpkg.com/@inquirer/search/-/search-1.1.0.tgz#665928cac2326b9501ddafbb8606ce4823b3106b" integrity sha512-h+/5LSj51dx7hp5xOn4QFnUaKeARwUCLs6mIhtkJ0JYPBLmEYjdHSYh7I6GrLg9LwpJ3xeX0FZgAG1q0QdCpVQ== dependencies: "@inquirer/core" "^9.1.0" @@ -918,7 +947,7 @@ "@inquirer/select@^2.5.0": version "2.5.0" - resolved "https://registry.npmjs.org/@inquirer/select/-/select-2.5.0.tgz" + resolved "https://registry.yarnpkg.com/@inquirer/select/-/select-2.5.0.tgz#345c6908ecfaeef3d84ddd2f9feb2f487c558efb" integrity sha512-YmDobTItPP3WcEI86GvPo+T2sRHkxxOq/kXmsBjHS5BVXUgvgZ5AfJjkvQvZr03T81NnI3KrrRuMzeuYUQRFOA== dependencies: "@inquirer/core" "^9.1.0" @@ -929,21 +958,21 @@ "@inquirer/type@^1.5.3": version "1.5.5" - resolved "https://registry.npmjs.org/@inquirer/type/-/type-1.5.5.tgz" + resolved "https://registry.yarnpkg.com/@inquirer/type/-/type-1.5.5.tgz#303ea04ce7ad2e585b921b662b3be36ef7b4f09b" integrity sha512-MzICLu4yS7V8AA61sANROZ9vT1H3ooca5dSmI1FjZkzq7o/koMsRfQSzRtFo+F3Ao4Sf1C0bpLKejpKB/+j6MA== dependencies: mute-stream "^1.0.0" "@inquirer/type@^2.0.0": version "2.0.0" - resolved "https://registry.npmjs.org/@inquirer/type/-/type-2.0.0.tgz" + resolved "https://registry.yarnpkg.com/@inquirer/type/-/type-2.0.0.tgz#08fa513dca2cb6264fe1b0a2fabade051444e3f6" integrity sha512-XvJRx+2KR3YXyYtPUUy+qd9i7p+GO9Ko6VIIpWlBrpWwXDv8WLFeHTxz35CfQFUiBMLXlGHhGzys7lqit9gWag== dependencies: mute-stream "^1.0.0" "@jest/types@^26.6.2": version "26.6.2" - resolved "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-26.6.2.tgz#bef5a532030e1d88a2f5a6d933f84e97226ed48e" integrity sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ== dependencies: "@types/istanbul-lib-coverage" "^2.0.0" @@ -954,28 +983,30 @@ "@josephg/resolvable@^1.0.0": version "1.0.1" - resolved "https://registry.npmjs.org/@josephg/resolvable/-/resolvable-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/@josephg/resolvable/-/resolvable-1.0.1.tgz#69bc4db754d79e1a2f17a650d3466e038d94a5eb" integrity sha512-CtzORUwWTTOTqfVtHaKRJ0I1kNQd1bpn3sUh8I3nJDVY+5/M/Oe1DnEWzPQvqq/xPIIkzzzIP7mfCoAjFRvDhg== "@jridgewell/resolve-uri@^3.0.3": version "3.1.2" - resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== "@jridgewell/sourcemap-codec@^1.4.10": - version "1.5.0" + version "1.5.5" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz#6912b00d2c631c0d15ce1a7ab57cd657f2a8f8ba" + integrity sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og== "@jridgewell/trace-mapping@0.3.9": version "0.3.9" - resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9" integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== dependencies: "@jridgewell/resolve-uri" "^3.0.3" "@jridgewell/sourcemap-codec" "^1.4.10" -"@langchain/core@^0.2.18", "@langchain/core@>=0.2.16 <0.3.0", "@langchain/core@>=0.2.26 <0.3.0": +"@langchain/core@>=0.2.16 <0.3.0", "@langchain/core@>=0.2.26 <0.3.0", "@langchain/core@^0.2.18": version "0.2.36" - resolved "https://registry.npmjs.org/@langchain/core/-/core-0.2.36.tgz" + resolved "https://registry.yarnpkg.com/@langchain/core/-/core-0.2.36.tgz#75754c33aa5b9310dcf117047374a1ae011005a4" integrity sha512-qHLvScqERDeH7y2cLuJaSAlMwg3f/3Oc9nayRSXRU2UuaK/SOhI42cxiPLj1FnuHJSmN0rBQFkrLx02gI4mcVg== dependencies: ansi-styles "^5.0.0" @@ -992,7 +1023,7 @@ "@langchain/groq@^0.0.15": version "0.0.15" - resolved "https://registry.npmjs.org/@langchain/groq/-/groq-0.0.15.tgz" + resolved "https://registry.yarnpkg.com/@langchain/groq/-/groq-0.0.15.tgz#336c2c36aa119a030f29c8fd614e9cc85abc4b07" integrity sha512-JN6dlPNHZEFKc8JjQzO+H7IqCpcE3s/1nYnb+sHxpc22Amr3yxXgp6CvanLhmD+R8Wj1AE1vG7AkzjM8MLtv+A== dependencies: "@langchain/core" ">=0.2.16 <0.3.0" @@ -1003,7 +1034,7 @@ "@langchain/openai@^0.2.4", "@langchain/openai@~0.2.4": version "0.2.11" - resolved "https://registry.npmjs.org/@langchain/openai/-/openai-0.2.11.tgz" + resolved "https://registry.yarnpkg.com/@langchain/openai/-/openai-0.2.11.tgz#b1a0403eb5db8133bb4ff41fe0680e727b78ddfc" integrity sha512-Pu8+WfJojCgSf0bAsXb4AjqvcDyAWyoEB1AoCRNACgEnBWZuitz3hLwCo9I+6hAbeg3QJ37g82yKcmvKAg1feg== dependencies: "@langchain/core" ">=0.2.26 <0.3.0" @@ -1012,64 +1043,72 @@ zod "^3.22.4" zod-to-json-schema "^3.22.3" -"@mongodb-js/saslprep@^1.1.0", "@mongodb-js/saslprep@^1.1.9": - version "1.3.0" +"@mongodb-js/saslprep@^1.1.0": + version "1.3.2" + resolved "https://registry.yarnpkg.com/@mongodb-js/saslprep/-/saslprep-1.3.2.tgz#51e5cad2f24b8759702d9cc185da0a3ef3784bad" + integrity sha512-QgA5AySqB27cGTXBFmnpifAi7HxoGUeezwo6p9dI03MuDB6Pp33zgclqVb6oVK3j6I9Vesg0+oojW2XxB59SGg== dependencies: sparse-bitfield "^3.0.3" "@nodelib/fs.scandir@2.1.5": version "2.1.5" - resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== dependencies: "@nodelib/fs.stat" "2.0.5" run-parallel "^1.1.9" -"@nodelib/fs.stat@^2.0.2", "@nodelib/fs.stat@2.0.5": +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": version "2.0.5" - resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== "@nodelib/fs.walk@^1.2.3": version "1.2.8" - resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== dependencies: "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" -"@panva/asn1.js@^1.0.0": - version "1.0.0" - resolved "https://registry.npmjs.org/@panva/asn1.js/-/asn1.js-1.0.0.tgz" - integrity sha512-UdkG3mLEqXgnlKsWanWcgb6dOjUzJ+XC5f+aWw30qrtjxeNUSfKX1cd5FBzOaXQumoe9nIqeZUvrRJS03HCCtw== - -"@prisma/client@^6.9.0", "@prisma/client@>=5": - version "6.10.1" +"@prisma/client@^6.9.0": + version "6.19.0" + resolved "https://registry.yarnpkg.com/@prisma/client/-/client-6.19.0.tgz#25d5387cbcf1d92f234f6b07d6a1bb787ed71391" + integrity sha512-QXFT+N/bva/QI2qoXmjBzL7D6aliPffIwP+81AdTGq0FXDoLxLkWivGMawG8iM5B9BKfxLIXxfWWAF6wbuJU6g== -"@prisma/config@6.10.1": - version "6.10.1" +"@prisma/config@6.19.0": + version "6.19.0" + resolved "https://registry.yarnpkg.com/@prisma/config/-/config-6.19.0.tgz#08d9d24289887a026ef625f4f8e053003eb150ae" + integrity sha512-zwCayme+NzI/WfrvFEtkFhhOaZb/hI+X8TTjzjJ252VbPxAl2hWHK5NMczmnG9sXck2lsXrxIZuK524E25UNmg== dependencies: - jiti "2.4.2" + c12 "3.1.0" + deepmerge-ts "7.1.5" + effect "3.18.4" + empathic "2.0.0" "@prisma/debug@5.14.0-dev.34": version "5.14.0-dev.34" - resolved "https://registry.npmjs.org/@prisma/debug/-/debug-5.14.0-dev.34.tgz" + resolved "https://registry.yarnpkg.com/@prisma/debug/-/debug-5.14.0-dev.34.tgz#796a899946d24ef0638f6df6867e509d2afe6b8f" integrity sha512-mc4Ue07QjYcb4yV0ZXap2AJBLlBAk0owO3fHKWovQA9Ig2XXlxlAUesk9RxPYKj9zIpDZXYMPUC3iKIdUi5SUA== -"@prisma/debug@6.10.1": - version "6.10.1" +"@prisma/debug@6.19.0": + version "6.19.0" + resolved "https://registry.yarnpkg.com/@prisma/debug/-/debug-6.19.0.tgz#ade03d1372548157ccb33bb4ff32f22995346cc1" + integrity sha512-8hAdGG7JmxrzFcTzXZajlQCidX0XNkMJkpqtfbLV54wC6LSSX6Vni25W/G+nAANwLnZ2TmwkfIuWetA7jJxJFA== "@prisma/engines-version@5.14.0-6.264f24ce0b2f544ff968ff76bfaa999de1161361": version "5.14.0-6.264f24ce0b2f544ff968ff76bfaa999de1161361" - resolved "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-5.14.0-6.264f24ce0b2f544ff968ff76bfaa999de1161361.tgz" + resolved "https://registry.yarnpkg.com/@prisma/engines-version/-/engines-version-5.14.0-6.264f24ce0b2f544ff968ff76bfaa999de1161361.tgz#01dc977a2a843463c513e0e4d60dcfd247fec890" integrity sha512-XkTJYtdOIrJkJv/tzXzsaUsfyvp82IWSPx4DlR52G0cyKoqT6lC55daIdsnuEoKPM2jPcL6P7dJENYBMGHQLEg== -"@prisma/engines-version@6.10.1-1.9b628578b3b7cae625e8c927178f15a170e74a9c": - version "6.10.1-1.9b628578b3b7cae625e8c927178f15a170e74a9c" +"@prisma/engines-version@6.19.0-26.2ba551f319ab1df4bc874a89965d8b3641056773": + version "6.19.0-26.2ba551f319ab1df4bc874a89965d8b3641056773" + resolved "https://registry.yarnpkg.com/@prisma/engines-version/-/engines-version-6.19.0-26.2ba551f319ab1df4bc874a89965d8b3641056773.tgz#de216dc8b35e7ef7694f2596ab73a7ced607b89b" + integrity sha512-gV7uOBQfAFlWDvPJdQxMT1aSRur3a0EkU/6cfbAC5isV67tKDWUrPauyaHNpB+wN1ebM4A9jn/f4gH+3iHSYSQ== "@prisma/engines@5.14.0-dev.34": version "5.14.0-dev.34" - resolved "https://registry.npmjs.org/@prisma/engines/-/engines-5.14.0-dev.34.tgz" + resolved "https://registry.yarnpkg.com/@prisma/engines/-/engines-5.14.0-dev.34.tgz#d5a39635a0c5d8f0ecf4baf490de82b033fa34d7" integrity sha512-RWkQHOPxSfy0ANoE0hhrDTf7SuNACILx/LTM1LINlWSYG+Ev/do+5RFbrCv6liCxi1fRZuuhtTux9sH56o01cQ== dependencies: "@prisma/debug" "5.14.0-dev.34" @@ -1077,52 +1116,58 @@ "@prisma/fetch-engine" "5.14.0-dev.34" "@prisma/get-platform" "5.14.0-dev.34" -"@prisma/engines@6.10.1": - version "6.10.1" +"@prisma/engines@6.19.0": + version "6.19.0" + resolved "https://registry.yarnpkg.com/@prisma/engines/-/engines-6.19.0.tgz#e82334f41b57d96f7b155bdc7288f200602a4be7" + integrity sha512-pMRJ+1S6NVdXoB8QJAPIGpKZevFjxhKt0paCkRDTZiczKb7F4yTgRP8M4JdVkpQwmaD4EoJf6qA+p61godDokw== dependencies: - "@prisma/debug" "6.10.1" - "@prisma/engines-version" "6.10.1-1.9b628578b3b7cae625e8c927178f15a170e74a9c" - "@prisma/fetch-engine" "6.10.1" - "@prisma/get-platform" "6.10.1" + "@prisma/debug" "6.19.0" + "@prisma/engines-version" "6.19.0-26.2ba551f319ab1df4bc874a89965d8b3641056773" + "@prisma/fetch-engine" "6.19.0" + "@prisma/get-platform" "6.19.0" "@prisma/fetch-engine@5.14.0-dev.34": version "5.14.0-dev.34" - resolved "https://registry.npmjs.org/@prisma/fetch-engine/-/fetch-engine-5.14.0-dev.34.tgz" + resolved "https://registry.yarnpkg.com/@prisma/fetch-engine/-/fetch-engine-5.14.0-dev.34.tgz#409d4487369bb0eb67ba6be812e8545eba59fcee" integrity sha512-Ieqp/Zfq7KaZWndJAq2K0Z5r77DBPyvXlKXbztXnyvoQhce+9QTkjwJ8U3dOHUwSwNqIb6TY7j1dal3epSUZkg== dependencies: "@prisma/debug" "5.14.0-dev.34" "@prisma/engines-version" "5.14.0-6.264f24ce0b2f544ff968ff76bfaa999de1161361" "@prisma/get-platform" "5.14.0-dev.34" -"@prisma/fetch-engine@6.10.1": - version "6.10.1" +"@prisma/fetch-engine@6.19.0": + version "6.19.0" + resolved "https://registry.yarnpkg.com/@prisma/fetch-engine/-/fetch-engine-6.19.0.tgz#7662e17e284e69091c7228e38d394d73ee4176f8" + integrity sha512-OOx2Lda0DGrZ1rodADT06ZGqHzr7HY7LNMaFE2Vp8dp146uJld58sRuasdX0OiwpHgl8SqDTUKHNUyzEq7pDdQ== dependencies: - "@prisma/debug" "6.10.1" - "@prisma/engines-version" "6.10.1-1.9b628578b3b7cae625e8c927178f15a170e74a9c" - "@prisma/get-platform" "6.10.1" + "@prisma/debug" "6.19.0" + "@prisma/engines-version" "6.19.0-26.2ba551f319ab1df4bc874a89965d8b3641056773" + "@prisma/get-platform" "6.19.0" "@prisma/generator-helper@5.14.0-dev.34": version "5.14.0-dev.34" - resolved "https://registry.npmjs.org/@prisma/generator-helper/-/generator-helper-5.14.0-dev.34.tgz" + resolved "https://registry.yarnpkg.com/@prisma/generator-helper/-/generator-helper-5.14.0-dev.34.tgz#976a7638478850944aaf50961cfcc8ed13604a17" integrity sha512-AsY7piYVHtaGf/TjSoK2j7pZmG+xX/Mqv/VQMNJmfJDEGAnt1fXg6e6veSGLm/SqxA3JJhVCaX3XUHYDeXnsOg== dependencies: "@prisma/debug" "5.14.0-dev.34" "@prisma/get-platform@5.14.0-dev.34": version "5.14.0-dev.34" - resolved "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-5.14.0-dev.34.tgz" + resolved "https://registry.yarnpkg.com/@prisma/get-platform/-/get-platform-5.14.0-dev.34.tgz#510f661e08caf1723faced305ce4e7eab3a1535e" integrity sha512-JlzzUMQKsj1cFMXiGMkqrdP7dl3OZtZQapEeCAoH42J6GCrEuV+qNhTOlkywyNuFDj+j1VjfE7p9HRFO1+kiiw== dependencies: "@prisma/debug" "5.14.0-dev.34" -"@prisma/get-platform@6.10.1": - version "6.10.1" +"@prisma/get-platform@6.19.0": + version "6.19.0" + resolved "https://registry.yarnpkg.com/@prisma/get-platform/-/get-platform-6.19.0.tgz#54ac7ef82b6f6c41a1c302498e12061925f352cb" + integrity sha512-ym85WDO2yDhC3fIXHWYpG3kVMBA49cL1XD2GCsCF8xbwoy2OkDQY44gEbAt2X46IQ4Apq9H6g0Ex1iFfPqEkHA== dependencies: - "@prisma/debug" "6.10.1" + "@prisma/debug" "6.19.0" "@prisma/internals@5.14.0-dev.34": version "5.14.0-dev.34" - resolved "https://registry.npmjs.org/@prisma/internals/-/internals-5.14.0-dev.34.tgz" + resolved "https://registry.yarnpkg.com/@prisma/internals/-/internals-5.14.0-dev.34.tgz#af293ad498f6d3bd8471ae14be76db603081b6aa" integrity sha512-FKToi0h7DFkSZ+eAo737RisLAlRrHq2VPRnm53aVe7LH1J4qwVhl7U+Gy9CsifUgi5VDX311M2W5hyaRcBs46A== dependencies: "@prisma/debug" "5.14.0-dev.34" @@ -1137,39 +1182,39 @@ "@prisma/prisma-schema-wasm@5.14.0-6.264f24ce0b2f544ff968ff76bfaa999de1161361": version "5.14.0-6.264f24ce0b2f544ff968ff76bfaa999de1161361" - resolved "https://registry.npmjs.org/@prisma/prisma-schema-wasm/-/prisma-schema-wasm-5.14.0-6.264f24ce0b2f544ff968ff76bfaa999de1161361.tgz" + resolved "https://registry.yarnpkg.com/@prisma/prisma-schema-wasm/-/prisma-schema-wasm-5.14.0-6.264f24ce0b2f544ff968ff76bfaa999de1161361.tgz#2bc709cbd44c4775fdad96c5434bf2fa2ed73e05" integrity sha512-lMNW0WEI+eP5gPn+blBj2yK2znvQlWQbbcOdbqR6PmOOMZRPXbfoC1LgxFn0QrZalJ1csJSFPjmQiYcrv9/39w== "@prisma/schema-files-loader@5.14.0-dev.34": version "5.14.0-dev.34" - resolved "https://registry.npmjs.org/@prisma/schema-files-loader/-/schema-files-loader-5.14.0-dev.34.tgz" + resolved "https://registry.yarnpkg.com/@prisma/schema-files-loader/-/schema-files-loader-5.14.0-dev.34.tgz#7e1b23747f36e5745c0350d14bf11682c0e84c25" integrity sha512-oO0dMzBJbNN3OwcNpRpKO6iq/rqWg02OKBeUI+Qy3Cwrqo5SlKO+DeolkUnx2PPWiHitDX/8UkGRBkMRG0HI9g== dependencies: fs-extra "11.1.1" "@protobufjs/aspromise@^1.1.1", "@protobufjs/aspromise@^1.1.2": version "1.1.2" - resolved "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz" + resolved "https://registry.yarnpkg.com/@protobufjs/aspromise/-/aspromise-1.1.2.tgz#9b8b0cc663d669a7d8f6f5d0893a14d348f30fbf" integrity sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ== "@protobufjs/base64@^1.1.2": version "1.1.2" - resolved "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz" + resolved "https://registry.yarnpkg.com/@protobufjs/base64/-/base64-1.1.2.tgz#4c85730e59b9a1f1f349047dbf24296034bb2735" integrity sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg== "@protobufjs/codegen@^2.0.4": version "2.0.4" - resolved "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz" + resolved "https://registry.yarnpkg.com/@protobufjs/codegen/-/codegen-2.0.4.tgz#7ef37f0d010fb028ad1ad59722e506d9262815cb" integrity sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg== "@protobufjs/eventemitter@^1.1.0": version "1.1.0" - resolved "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz" + resolved "https://registry.yarnpkg.com/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz#355cbc98bafad5978f9ed095f397621f1d066b70" integrity sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q== "@protobufjs/fetch@^1.1.0": version "1.1.0" - resolved "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz" + resolved "https://registry.yarnpkg.com/@protobufjs/fetch/-/fetch-1.1.0.tgz#ba99fb598614af65700c1619ff06d454b0d84c45" integrity sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ== dependencies: "@protobufjs/aspromise" "^1.1.1" @@ -1177,37 +1222,37 @@ "@protobufjs/float@^1.0.2": version "1.0.2" - resolved "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz" + resolved "https://registry.yarnpkg.com/@protobufjs/float/-/float-1.0.2.tgz#5e9e1abdcb73fc0a7cb8b291df78c8cbd97b87d1" integrity sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ== "@protobufjs/inquire@^1.1.0": version "1.1.0" - resolved "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz" + resolved "https://registry.yarnpkg.com/@protobufjs/inquire/-/inquire-1.1.0.tgz#ff200e3e7cf2429e2dcafc1140828e8cc638f089" integrity sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q== "@protobufjs/path@^1.1.2": version "1.1.2" - resolved "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz" + resolved "https://registry.yarnpkg.com/@protobufjs/path/-/path-1.1.2.tgz#6cc2b20c5c9ad6ad0dccfd21ca7673d8d7fbf68d" integrity sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA== "@protobufjs/pool@^1.1.0": version "1.1.0" - resolved "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz" + resolved "https://registry.yarnpkg.com/@protobufjs/pool/-/pool-1.1.0.tgz#09fd15f2d6d3abfa9b65bc366506d6ad7846ff54" integrity sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw== "@protobufjs/utf8@^1.1.0": version "1.1.0" - resolved "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz" + resolved "https://registry.yarnpkg.com/@protobufjs/utf8/-/utf8-1.1.0.tgz#a777360b5b39a1a2e5106f8e858f2fd2d060c570" integrity sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw== "@rtsao/scc@^1.1.0": version "1.1.0" - resolved "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz" + resolved "https://registry.yarnpkg.com/@rtsao/scc/-/scc-1.1.0.tgz#927dd2fae9bc3361403ac2c7a00c32ddce9ad7e8" integrity sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g== "@rushstack/node-core-library@5.13.0": version "5.13.0" - resolved "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-5.13.0.tgz" + resolved "https://registry.yarnpkg.com/@rushstack/node-core-library/-/node-core-library-5.13.0.tgz#f79d6868b74be102eee75b93c37be45fb9b47ead" integrity sha512-IGVhy+JgUacAdCGXKUrRhwHMTzqhWwZUI+qEPcdzsb80heOw0QPbhhoVsoiMF7Klp8eYsp7hzpScMXmOa3Uhfg== dependencies: ajv "~8.13.0" @@ -1221,7 +1266,7 @@ "@rushstack/terminal@0.15.2": version "0.15.2" - resolved "https://registry.npmjs.org/@rushstack/terminal/-/terminal-0.15.2.tgz" + resolved "https://registry.yarnpkg.com/@rushstack/terminal/-/terminal-0.15.2.tgz#8fa030409603a22db606ecb18709050e46517add" integrity sha512-7Hmc0ysK5077R/IkLS9hYu0QuNafm+TbZbtYVzCMbeOdMjaRboLKrhryjwZSRJGJzu+TV1ON7qZHeqf58XfLpA== dependencies: "@rushstack/node-core-library" "5.13.0" @@ -1229,7 +1274,7 @@ "@rushstack/ts-command-line@^4.12.2": version "4.23.7" - resolved "https://registry.npmjs.org/@rushstack/ts-command-line/-/ts-command-line-4.23.7.tgz" + resolved "https://registry.yarnpkg.com/@rushstack/ts-command-line/-/ts-command-line-4.23.7.tgz#9c6f05a00f776c7b8ea3321e2b5a03acc5e9efa8" integrity sha512-Gr9cB7DGe6uz5vq2wdr89WbVDKz0UeuFEn5H2CfWDe7JvjFFaiV15gi6mqDBTbHhHCWS7w8mF1h3BnIfUndqdA== dependencies: "@rushstack/terminal" "0.15.2" @@ -1239,12 +1284,12 @@ "@sagold/json-pointer@^5.1.2": version "5.1.2" - resolved "https://registry.npmjs.org/@sagold/json-pointer/-/json-pointer-5.1.2.tgz" + resolved "https://registry.yarnpkg.com/@sagold/json-pointer/-/json-pointer-5.1.2.tgz#7f07884050fd2139eeb5d7423e917160ee7e0b8d" integrity sha512-+wAhJZBXa6MNxRScg6tkqEbChEHMgVZAhTHVJ60Y7sbtXtu9XA49KfUkdWlS2x78D6H9nryiKePiYozumauPfA== "@sagold/json-query@^6.1.3": version "6.2.0" - resolved "https://registry.npmjs.org/@sagold/json-query/-/json-query-6.2.0.tgz" + resolved "https://registry.yarnpkg.com/@sagold/json-query/-/json-query-6.2.0.tgz#2204a0259ea10f36cd5cb0a1505078e6d751eecd" integrity sha512-7bOIdUE6eHeoWtFm8TvHQHfTVSZuCs+3RpOKmZCDBIOrxpvF/rNFTeuvIyjHva/RR0yVS3kQtr+9TW72LQEZjA== dependencies: "@sagold/json-pointer" "^5.1.2" @@ -1252,334 +1297,429 @@ "@scaleleap/pg-format@^1.0.0": version "1.0.0" - resolved "https://registry.npmjs.org/@scaleleap/pg-format/-/pg-format-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/@scaleleap/pg-format/-/pg-format-1.0.0.tgz#fe001f2615e0faf2f4d17af3e8dc3a90ae575be9" integrity sha512-gFkcYMnpeylF2OJ30FsDBjwICB9JTiZ5i3guPwdiBDrJFwIKr+Zk6jwI8Mg22a4FwXn5ezd5cHEFMKqBqBz4RQ== "@scarf/scarf@=1.4.0": version "1.4.0" - resolved "https://registry.npmjs.org/@scarf/scarf/-/scarf-1.4.0.tgz" + resolved "https://registry.yarnpkg.com/@scarf/scarf/-/scarf-1.4.0.tgz#3bbb984085dbd6d982494538b523be1ce6562972" integrity sha512-xxeapPiUXdZAE3che6f3xogoJPeZgig6omHEy1rIY5WVsB3H2BHNnZH+gHG6x91SCWyQCzWGsuL2Hh3ClO5/qQ== -"@smithy/abort-controller@^4.0.4": - version "4.0.4" +"@smithy/abort-controller@^4.2.5": + version "4.2.5" + resolved "https://registry.yarnpkg.com/@smithy/abort-controller/-/abort-controller-4.2.5.tgz#3386e8fff5a8d05930996d891d06803f2b7e5e2c" + integrity sha512-j7HwVkBw68YW8UmFRcjZOmssE77Rvk0GWAIN1oFBhsaovQmZWYCIcGa9/pwRB0ExI8Sk9MWNALTjftjHZea7VA== dependencies: - "@smithy/types" "^4.3.1" + "@smithy/types" "^4.9.0" tslib "^2.6.2" -"@smithy/config-resolver@^4.1.4": - version "4.1.4" +"@smithy/config-resolver@^4.4.2", "@smithy/config-resolver@^4.4.3": + version "4.4.3" + resolved "https://registry.yarnpkg.com/@smithy/config-resolver/-/config-resolver-4.4.3.tgz#37b0e3cba827272e92612e998a2b17e841e20bab" + integrity sha512-ezHLe1tKLUxDJo2LHtDuEDyWXolw8WGOR92qb4bQdWq/zKenO5BvctZGrVJBK08zjezSk7bmbKFOXIVyChvDLw== dependencies: - "@smithy/node-config-provider" "^4.1.3" - "@smithy/types" "^4.3.1" - "@smithy/util-config-provider" "^4.0.0" - "@smithy/util-middleware" "^4.0.4" + "@smithy/node-config-provider" "^4.3.5" + "@smithy/types" "^4.9.0" + "@smithy/util-config-provider" "^4.2.0" + "@smithy/util-endpoints" "^3.2.5" + "@smithy/util-middleware" "^4.2.5" tslib "^2.6.2" -"@smithy/core@^3.5.3", "@smithy/core@^3.6.0": - version "3.6.0" - dependencies: - "@smithy/middleware-serde" "^4.0.8" - "@smithy/protocol-http" "^5.1.2" - "@smithy/types" "^4.3.1" - "@smithy/util-base64" "^4.0.0" - "@smithy/util-body-length-browser" "^4.0.0" - "@smithy/util-middleware" "^4.0.4" - "@smithy/util-stream" "^4.2.2" - "@smithy/util-utf8" "^4.0.0" +"@smithy/core@^3.17.2", "@smithy/core@^3.18.0": + version "3.18.0" + resolved "https://registry.yarnpkg.com/@smithy/core/-/core-3.18.0.tgz#6b58772b9421e17194f15f9c401147f4c39dc8ba" + integrity sha512-vGSDXOJFZgOPTatSI1ly7Gwyy/d/R9zh2TO3y0JZ0uut5qQ88p9IaWaZYIWSSqtdekNM4CGok/JppxbAff4KcQ== + dependencies: + "@smithy/middleware-serde" "^4.2.5" + "@smithy/protocol-http" "^5.3.5" + "@smithy/types" "^4.9.0" + "@smithy/util-base64" "^4.3.0" + "@smithy/util-body-length-browser" "^4.2.0" + "@smithy/util-middleware" "^4.2.5" + "@smithy/util-stream" "^4.5.6" + "@smithy/util-utf8" "^4.2.0" + "@smithy/uuid" "^1.1.0" tslib "^2.6.2" -"@smithy/credential-provider-imds@^4.0.6": - version "4.0.6" +"@smithy/credential-provider-imds@^4.2.4", "@smithy/credential-provider-imds@^4.2.5": + version "4.2.5" + resolved "https://registry.yarnpkg.com/@smithy/credential-provider-imds/-/credential-provider-imds-4.2.5.tgz#5acbcd1d02ae31700c2f027090c202d7315d70d3" + integrity sha512-BZwotjoZWn9+36nimwm/OLIcVe+KYRwzMjfhd4QT7QxPm9WY0HiOV8t/Wlh+HVUif0SBVV7ksq8//hPaBC/okQ== dependencies: - "@smithy/node-config-provider" "^4.1.3" - "@smithy/property-provider" "^4.0.4" - "@smithy/types" "^4.3.1" - "@smithy/url-parser" "^4.0.4" + "@smithy/node-config-provider" "^4.3.5" + "@smithy/property-provider" "^4.2.5" + "@smithy/types" "^4.9.0" + "@smithy/url-parser" "^4.2.5" tslib "^2.6.2" -"@smithy/fetch-http-handler@^5.0.4": - version "5.0.4" +"@smithy/fetch-http-handler@^5.3.5", "@smithy/fetch-http-handler@^5.3.6": + version "5.3.6" + resolved "https://registry.yarnpkg.com/@smithy/fetch-http-handler/-/fetch-http-handler-5.3.6.tgz#d9dcb8d8ca152918224492f4d1cc1b50df93ae13" + integrity sha512-3+RG3EA6BBJ/ofZUeTFJA7mHfSYrZtQIrDP9dI8Lf7X6Jbos2jptuLrAAteDiFVrmbEmLSuRG/bUKzfAXk7dhg== dependencies: - "@smithy/protocol-http" "^5.1.2" - "@smithy/querystring-builder" "^4.0.4" - "@smithy/types" "^4.3.1" - "@smithy/util-base64" "^4.0.0" + "@smithy/protocol-http" "^5.3.5" + "@smithy/querystring-builder" "^4.2.5" + "@smithy/types" "^4.9.0" + "@smithy/util-base64" "^4.3.0" tslib "^2.6.2" -"@smithy/hash-node@^4.0.4": - version "4.0.4" +"@smithy/hash-node@^4.2.4": + version "4.2.5" + resolved "https://registry.yarnpkg.com/@smithy/hash-node/-/hash-node-4.2.5.tgz#fb751ec4a4c6347612458430f201f878adc787f6" + integrity sha512-DpYX914YOfA3UDT9CN1BM787PcHfWRBB43fFGCYrZFUH0Jv+5t8yYl+Pd5PW4+QzoGEDvn5d5QIO4j2HyYZQSA== dependencies: - "@smithy/types" "^4.3.1" - "@smithy/util-buffer-from" "^4.0.0" - "@smithy/util-utf8" "^4.0.0" + "@smithy/types" "^4.9.0" + "@smithy/util-buffer-from" "^4.2.0" + "@smithy/util-utf8" "^4.2.0" tslib "^2.6.2" -"@smithy/invalid-dependency@^4.0.4": - version "4.0.4" +"@smithy/invalid-dependency@^4.2.4": + version "4.2.5" + resolved "https://registry.yarnpkg.com/@smithy/invalid-dependency/-/invalid-dependency-4.2.5.tgz#58d997e91e7683ffc59882d8fcb180ed9aa9c7dd" + integrity sha512-2L2erASEro1WC5nV+plwIMxrTXpvpfzl4e+Nre6vBVRR2HKeGGcvpJyyL3/PpiSg+cJG2KpTmZmq934Olb6e5A== dependencies: - "@smithy/types" "^4.3.1" + "@smithy/types" "^4.9.0" tslib "^2.6.2" "@smithy/is-array-buffer@^2.2.0": version "2.2.0" - resolved "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz" + resolved "https://registry.yarnpkg.com/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz#f84f0d9f9a36601a9ca9381688bd1b726fd39111" integrity sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA== dependencies: tslib "^2.6.2" -"@smithy/is-array-buffer@^4.0.0": - version "4.0.0" +"@smithy/is-array-buffer@^4.2.0": + version "4.2.0" + resolved "https://registry.yarnpkg.com/@smithy/is-array-buffer/-/is-array-buffer-4.2.0.tgz#b0f874c43887d3ad44f472a0f3f961bcce0550c2" + integrity sha512-DZZZBvC7sjcYh4MazJSGiWMI2L7E0oCiRHREDzIxi/M2LY79/21iXt6aPLHge82wi5LsuRF5A06Ds3+0mlh6CQ== dependencies: tslib "^2.6.2" -"@smithy/middleware-content-length@^4.0.4": - version "4.0.4" +"@smithy/middleware-content-length@^4.2.4": + version "4.2.5" + resolved "https://registry.yarnpkg.com/@smithy/middleware-content-length/-/middleware-content-length-4.2.5.tgz#a6942ce2d7513b46f863348c6c6a8177e9ace752" + integrity sha512-Y/RabVa5vbl5FuHYV2vUCwvh/dqzrEY/K2yWPSqvhFUwIY0atLqO4TienjBXakoy4zrKAMCZwg+YEqmH7jaN7A== dependencies: - "@smithy/protocol-http" "^5.1.2" - "@smithy/types" "^4.3.1" + "@smithy/protocol-http" "^5.3.5" + "@smithy/types" "^4.9.0" tslib "^2.6.2" -"@smithy/middleware-endpoint@^4.1.12", "@smithy/middleware-endpoint@^4.1.13": - version "4.1.13" - dependencies: - "@smithy/core" "^3.6.0" - "@smithy/middleware-serde" "^4.0.8" - "@smithy/node-config-provider" "^4.1.3" - "@smithy/shared-ini-file-loader" "^4.0.4" - "@smithy/types" "^4.3.1" - "@smithy/url-parser" "^4.0.4" - "@smithy/util-middleware" "^4.0.4" +"@smithy/middleware-endpoint@^4.3.6", "@smithy/middleware-endpoint@^4.3.7": + version "4.3.7" + resolved "https://registry.yarnpkg.com/@smithy/middleware-endpoint/-/middleware-endpoint-4.3.7.tgz#ef7054cf969484caf173e6013fb0339753ca02bc" + integrity sha512-i8Mi8OuY6Yi82Foe3iu7/yhBj1HBRoOQwBSsUNYglJTNSFaWYTNM2NauBBs/7pq2sqkLRqeUXA3Ogi2utzpUlQ== + dependencies: + "@smithy/core" "^3.18.0" + "@smithy/middleware-serde" "^4.2.5" + "@smithy/node-config-provider" "^4.3.5" + "@smithy/shared-ini-file-loader" "^4.4.0" + "@smithy/types" "^4.9.0" + "@smithy/url-parser" "^4.2.5" + "@smithy/util-middleware" "^4.2.5" tslib "^2.6.2" -"@smithy/middleware-retry@^4.1.13": - version "4.1.14" - dependencies: - "@smithy/node-config-provider" "^4.1.3" - "@smithy/protocol-http" "^5.1.2" - "@smithy/service-error-classification" "^4.0.6" - "@smithy/smithy-client" "^4.4.5" - "@smithy/types" "^4.3.1" - "@smithy/util-middleware" "^4.0.4" - "@smithy/util-retry" "^4.0.6" +"@smithy/middleware-retry@^4.4.6": + version "4.4.7" + resolved "https://registry.yarnpkg.com/@smithy/middleware-retry/-/middleware-retry-4.4.7.tgz#adcffe9585e7dc3fc279418ededddc1391ebc5b7" + integrity sha512-E7Vc6WHCHlzDRTx1W0jZ6J1L6ziEV0PIWcUdmfL4y+c8r7WYr6I+LkQudaD8Nfb7C5c4P3SQ972OmXHtv6m/OA== + dependencies: + "@smithy/node-config-provider" "^4.3.5" + "@smithy/protocol-http" "^5.3.5" + "@smithy/service-error-classification" "^4.2.5" + "@smithy/smithy-client" "^4.9.3" + "@smithy/types" "^4.9.0" + "@smithy/util-middleware" "^4.2.5" + "@smithy/util-retry" "^4.2.5" + "@smithy/uuid" "^1.1.0" tslib "^2.6.2" - uuid "^9.0.1" -"@smithy/middleware-serde@^4.0.8": - version "4.0.8" +"@smithy/middleware-serde@^4.2.4", "@smithy/middleware-serde@^4.2.5": + version "4.2.5" + resolved "https://registry.yarnpkg.com/@smithy/middleware-serde/-/middleware-serde-4.2.5.tgz#b8848043d2965ef3fc2ad895c877fa1f42a9cd86" + integrity sha512-La1ldWTJTZ5NqQyPqnCNeH9B+zjFhrNoQIL1jTh4zuqXRlmXhxYHhMtI1/92OlnoAtp6JoN7kzuwhWoXrBwPqg== dependencies: - "@smithy/protocol-http" "^5.1.2" - "@smithy/types" "^4.3.1" + "@smithy/protocol-http" "^5.3.5" + "@smithy/types" "^4.9.0" tslib "^2.6.2" -"@smithy/middleware-stack@^4.0.4": - version "4.0.4" +"@smithy/middleware-stack@^4.2.4", "@smithy/middleware-stack@^4.2.5": + version "4.2.5" + resolved "https://registry.yarnpkg.com/@smithy/middleware-stack/-/middleware-stack-4.2.5.tgz#2d13415ed3561c882594c8e6340b801d9a2eb222" + integrity sha512-bYrutc+neOyWxtZdbB2USbQttZN0mXaOyYLIsaTbJhFsfpXyGWUxJpEuO1rJ8IIJm2qH4+xJT0mxUSsEDTYwdQ== dependencies: - "@smithy/types" "^4.3.1" + "@smithy/types" "^4.9.0" tslib "^2.6.2" -"@smithy/node-config-provider@^4.1.3": - version "4.1.3" +"@smithy/node-config-provider@^4.3.4", "@smithy/node-config-provider@^4.3.5": + version "4.3.5" + resolved "https://registry.yarnpkg.com/@smithy/node-config-provider/-/node-config-provider-4.3.5.tgz#c09137a79c2930dcc30e6c8bb4f2608d72c1e2c9" + integrity sha512-UTurh1C4qkVCtqggI36DGbLB2Kv8UlcFdMXDcWMbqVY2uRg0XmT9Pb4Vj6oSQ34eizO1fvR0RnFV4Axw4IrrAg== dependencies: - "@smithy/property-provider" "^4.0.4" - "@smithy/shared-ini-file-loader" "^4.0.4" - "@smithy/types" "^4.3.1" + "@smithy/property-provider" "^4.2.5" + "@smithy/shared-ini-file-loader" "^4.4.0" + "@smithy/types" "^4.9.0" tslib "^2.6.2" -"@smithy/node-http-handler@^4.0.6": - version "4.0.6" +"@smithy/node-http-handler@^4.4.4", "@smithy/node-http-handler@^4.4.5": + version "4.4.5" + resolved "https://registry.yarnpkg.com/@smithy/node-http-handler/-/node-http-handler-4.4.5.tgz#2aea598fdf3dc4e32667d673d48abd4a073665f4" + integrity sha512-CMnzM9R2WqlqXQGtIlsHMEZfXKJVTIrqCNoSd/QpAyp+Dw0a1Vps13l6ma1fH8g7zSPNsA59B/kWgeylFuA/lw== dependencies: - "@smithy/abort-controller" "^4.0.4" - "@smithy/protocol-http" "^5.1.2" - "@smithy/querystring-builder" "^4.0.4" - "@smithy/types" "^4.3.1" + "@smithy/abort-controller" "^4.2.5" + "@smithy/protocol-http" "^5.3.5" + "@smithy/querystring-builder" "^4.2.5" + "@smithy/types" "^4.9.0" tslib "^2.6.2" -"@smithy/property-provider@^4.0.4": - version "4.0.4" +"@smithy/property-provider@^4.2.4", "@smithy/property-provider@^4.2.5": + version "4.2.5" + resolved "https://registry.yarnpkg.com/@smithy/property-provider/-/property-provider-4.2.5.tgz#f75dc5735d29ca684abbc77504be9246340a43f0" + integrity sha512-8iLN1XSE1rl4MuxvQ+5OSk/Zb5El7NJZ1td6Tn+8dQQHIjp59Lwl6bd0+nzw6SKm2wSSriH2v/I9LPzUic7EOg== dependencies: - "@smithy/types" "^4.3.1" + "@smithy/types" "^4.9.0" tslib "^2.6.2" -"@smithy/protocol-http@^5.1.2": - version "5.1.2" +"@smithy/protocol-http@^5.3.4", "@smithy/protocol-http@^5.3.5": + version "5.3.5" + resolved "https://registry.yarnpkg.com/@smithy/protocol-http/-/protocol-http-5.3.5.tgz#a8f4296dd6d190752589e39ee95298d5c65a60db" + integrity sha512-RlaL+sA0LNMp03bf7XPbFmT5gN+w3besXSWMkA8rcmxLSVfiEXElQi4O2IWwPfxzcHkxqrwBFMbngB8yx/RvaQ== dependencies: - "@smithy/types" "^4.3.1" + "@smithy/types" "^4.9.0" tslib "^2.6.2" -"@smithy/querystring-builder@^4.0.4": - version "4.0.4" +"@smithy/querystring-builder@^4.2.5": + version "4.2.5" + resolved "https://registry.yarnpkg.com/@smithy/querystring-builder/-/querystring-builder-4.2.5.tgz#00cafa5a4055600ab8058e26db42f580146b91f3" + integrity sha512-y98otMI1saoajeik2kLfGyRp11e5U/iJYH/wLCh3aTV/XutbGT9nziKGkgCaMD1ghK7p6htHMm6b6scl9JRUWg== dependencies: - "@smithy/types" "^4.3.1" - "@smithy/util-uri-escape" "^4.0.0" + "@smithy/types" "^4.9.0" + "@smithy/util-uri-escape" "^4.2.0" tslib "^2.6.2" -"@smithy/querystring-parser@^4.0.4": - version "4.0.4" +"@smithy/querystring-parser@^4.2.5": + version "4.2.5" + resolved "https://registry.yarnpkg.com/@smithy/querystring-parser/-/querystring-parser-4.2.5.tgz#61d2e77c62f44196590fa0927dbacfbeaffe8c53" + integrity sha512-031WCTdPYgiQRYNPXznHXof2YM0GwL6SeaSyTH/P72M1Vz73TvCNH2Nq8Iu2IEPq9QP2yx0/nrw5YmSeAi/AjQ== dependencies: - "@smithy/types" "^4.3.1" + "@smithy/types" "^4.9.0" tslib "^2.6.2" -"@smithy/service-error-classification@^4.0.6": - version "4.0.6" +"@smithy/service-error-classification@^4.2.5": + version "4.2.5" + resolved "https://registry.yarnpkg.com/@smithy/service-error-classification/-/service-error-classification-4.2.5.tgz#a64eb78e096e59cc71141e3fea2b4194ce59b4fd" + integrity sha512-8fEvK+WPE3wUAcDvqDQG1Vk3ANLR8Px979te96m84CbKAjBVf25rPYSzb4xU4hlTyho7VhOGnh5i62D/JVF0JQ== dependencies: - "@smithy/types" "^4.3.1" + "@smithy/types" "^4.9.0" -"@smithy/shared-ini-file-loader@^4.0.4": - version "4.0.4" +"@smithy/shared-ini-file-loader@^4.3.4", "@smithy/shared-ini-file-loader@^4.4.0": + version "4.4.0" + resolved "https://registry.yarnpkg.com/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.4.0.tgz#a2f8282f49982f00bafb1fa8cb7fc188a202a594" + integrity sha512-5WmZ5+kJgJDjwXXIzr1vDTG+RhF9wzSODQBfkrQ2VVkYALKGvZX1lgVSxEkgicSAFnFhPj5rudJV0zoinqS0bA== dependencies: - "@smithy/types" "^4.3.1" + "@smithy/types" "^4.9.0" tslib "^2.6.2" -"@smithy/signature-v4@^5.1.2": - version "5.1.2" - dependencies: - "@smithy/is-array-buffer" "^4.0.0" - "@smithy/protocol-http" "^5.1.2" - "@smithy/types" "^4.3.1" - "@smithy/util-hex-encoding" "^4.0.0" - "@smithy/util-middleware" "^4.0.4" - "@smithy/util-uri-escape" "^4.0.0" - "@smithy/util-utf8" "^4.0.0" +"@smithy/signature-v4@^5.3.4": + version "5.3.5" + resolved "https://registry.yarnpkg.com/@smithy/signature-v4/-/signature-v4-5.3.5.tgz#13ab710653f9f16c325ee7e0a102a44f73f2643f" + integrity sha512-xSUfMu1FT7ccfSXkoLl/QRQBi2rOvi3tiBZU2Tdy3I6cgvZ6SEi9QNey+lqps/sJRnogIS+lq+B1gxxbra2a/w== + dependencies: + "@smithy/is-array-buffer" "^4.2.0" + "@smithy/protocol-http" "^5.3.5" + "@smithy/types" "^4.9.0" + "@smithy/util-hex-encoding" "^4.2.0" + "@smithy/util-middleware" "^4.2.5" + "@smithy/util-uri-escape" "^4.2.0" + "@smithy/util-utf8" "^4.2.0" tslib "^2.6.2" -"@smithy/smithy-client@^4.4.4", "@smithy/smithy-client@^4.4.5": - version "4.4.5" - dependencies: - "@smithy/core" "^3.6.0" - "@smithy/middleware-endpoint" "^4.1.13" - "@smithy/middleware-stack" "^4.0.4" - "@smithy/protocol-http" "^5.1.2" - "@smithy/types" "^4.3.1" - "@smithy/util-stream" "^4.2.2" +"@smithy/smithy-client@^4.9.2", "@smithy/smithy-client@^4.9.3": + version "4.9.3" + resolved "https://registry.yarnpkg.com/@smithy/smithy-client/-/smithy-client-4.9.3.tgz#1c347fb7ec2e7fd3d61b84d8affe97c87e4bca5d" + integrity sha512-8tlueuTgV5n7inQCkhyptrB3jo2AO80uGrps/XTYZivv5MFQKKBj3CIWIGMI2fRY5LEduIiazOhAWdFknY1O9w== + dependencies: + "@smithy/core" "^3.18.0" + "@smithy/middleware-endpoint" "^4.3.7" + "@smithy/middleware-stack" "^4.2.5" + "@smithy/protocol-http" "^5.3.5" + "@smithy/types" "^4.9.0" + "@smithy/util-stream" "^4.5.6" tslib "^2.6.2" -"@smithy/types@^4.3.1": - version "4.3.1" +"@smithy/types@^4.8.1", "@smithy/types@^4.9.0": + version "4.9.0" + resolved "https://registry.yarnpkg.com/@smithy/types/-/types-4.9.0.tgz#c6636ddfa142e1ddcb6e4cf5f3e1a628d420486f" + integrity sha512-MvUbdnXDTwykR8cB1WZvNNwqoWVaTRA0RLlLmf/cIFNMM2cKWz01X4Ly6SMC4Kks30r8tT3Cty0jmeWfiuyHTA== dependencies: tslib "^2.6.2" -"@smithy/url-parser@^4.0.4": - version "4.0.4" +"@smithy/url-parser@^4.2.4", "@smithy/url-parser@^4.2.5": + version "4.2.5" + resolved "https://registry.yarnpkg.com/@smithy/url-parser/-/url-parser-4.2.5.tgz#2fea006108f17f7761432c7ef98d6aa003421487" + integrity sha512-VaxMGsilqFnK1CeBX+LXnSuaMx4sTL/6znSZh2829txWieazdVxr54HmiyTsIbpOTLcf5nYpq9lpzmwRdxj6rQ== dependencies: - "@smithy/querystring-parser" "^4.0.4" - "@smithy/types" "^4.3.1" + "@smithy/querystring-parser" "^4.2.5" + "@smithy/types" "^4.9.0" tslib "^2.6.2" -"@smithy/util-base64@^4.0.0": - version "4.0.0" +"@smithy/util-base64@^4.3.0": + version "4.3.0" + resolved "https://registry.yarnpkg.com/@smithy/util-base64/-/util-base64-4.3.0.tgz#5e287b528793aa7363877c1a02cd880d2e76241d" + integrity sha512-GkXZ59JfyxsIwNTWFnjmFEI8kZpRNIBfxKjv09+nkAWPt/4aGaEWMM04m4sxgNVWkbt2MdSvE3KF/PfX4nFedQ== dependencies: - "@smithy/util-buffer-from" "^4.0.0" - "@smithy/util-utf8" "^4.0.0" + "@smithy/util-buffer-from" "^4.2.0" + "@smithy/util-utf8" "^4.2.0" tslib "^2.6.2" -"@smithy/util-body-length-browser@^4.0.0": - version "4.0.0" +"@smithy/util-body-length-browser@^4.2.0": + version "4.2.0" + resolved "https://registry.yarnpkg.com/@smithy/util-body-length-browser/-/util-body-length-browser-4.2.0.tgz#04e9fc51ee7a3e7f648a4b4bcdf96c350cfa4d61" + integrity sha512-Fkoh/I76szMKJnBXWPdFkQJl2r9SjPt3cMzLdOB6eJ4Pnpas8hVoWPYemX/peO0yrrvldgCUVJqOAjUrOLjbxg== dependencies: tslib "^2.6.2" -"@smithy/util-body-length-node@^4.0.0": - version "4.0.0" +"@smithy/util-body-length-node@^4.2.1": + version "4.2.1" + resolved "https://registry.yarnpkg.com/@smithy/util-body-length-node/-/util-body-length-node-4.2.1.tgz#79c8a5d18e010cce6c42d5cbaf6c1958523e6fec" + integrity sha512-h53dz/pISVrVrfxV1iqXlx5pRg3V2YWFcSQyPyXZRrZoZj4R4DeWRDo1a7dd3CPTcFi3kE+98tuNyD2axyZReA== dependencies: tslib "^2.6.2" "@smithy/util-buffer-from@^2.2.0": version "2.2.0" - resolved "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz" + resolved "https://registry.yarnpkg.com/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz#6fc88585165ec73f8681d426d96de5d402021e4b" integrity sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA== dependencies: "@smithy/is-array-buffer" "^2.2.0" tslib "^2.6.2" -"@smithy/util-buffer-from@^4.0.0": - version "4.0.0" +"@smithy/util-buffer-from@^4.2.0": + version "4.2.0" + resolved "https://registry.yarnpkg.com/@smithy/util-buffer-from/-/util-buffer-from-4.2.0.tgz#7abd12c4991b546e7cee24d1e8b4bfaa35c68a9d" + integrity sha512-kAY9hTKulTNevM2nlRtxAG2FQ3B2OR6QIrPY3zE5LqJy1oxzmgBGsHLWTcNhWXKchgA0WHW+mZkQrng/pgcCew== dependencies: - "@smithy/is-array-buffer" "^4.0.0" + "@smithy/is-array-buffer" "^4.2.0" tslib "^2.6.2" -"@smithy/util-config-provider@^4.0.0": - version "4.0.0" +"@smithy/util-config-provider@^4.2.0": + version "4.2.0" + resolved "https://registry.yarnpkg.com/@smithy/util-config-provider/-/util-config-provider-4.2.0.tgz#2e4722937f8feda4dcb09672c59925a4e6286cfc" + integrity sha512-YEjpl6XJ36FTKmD+kRJJWYvrHeUvm5ykaUS5xK+6oXffQPHeEM4/nXlZPe+Wu0lsgRUcNZiliYNh/y7q9c2y6Q== dependencies: tslib "^2.6.2" -"@smithy/util-defaults-mode-browser@^4.0.20": - version "4.0.21" +"@smithy/util-defaults-mode-browser@^4.3.5": + version "4.3.6" + resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.3.6.tgz#e6625f55a73c9897648496baee7c6c00d2bc96ce" + integrity sha512-kbpuXbEf2YQ9zEE6eeVnUCQWO0e1BjMnKrXL8rfXgiWA0m8/E0leU4oSNzxP04WfCmW8vjEqaDeXWxwE4tpOjQ== dependencies: - "@smithy/property-provider" "^4.0.4" - "@smithy/smithy-client" "^4.4.5" - "@smithy/types" "^4.3.1" - bowser "^2.11.0" + "@smithy/property-provider" "^4.2.5" + "@smithy/smithy-client" "^4.9.3" + "@smithy/types" "^4.9.0" tslib "^2.6.2" -"@smithy/util-defaults-mode-node@^4.0.20": - version "4.0.21" - dependencies: - "@smithy/config-resolver" "^4.1.4" - "@smithy/credential-provider-imds" "^4.0.6" - "@smithy/node-config-provider" "^4.1.3" - "@smithy/property-provider" "^4.0.4" - "@smithy/smithy-client" "^4.4.5" - "@smithy/types" "^4.3.1" +"@smithy/util-defaults-mode-node@^4.2.8": + version "4.2.9" + resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.2.9.tgz#b500d660ca8c6d665d068b161e28f8718052a065" + integrity sha512-dgyribrVWN5qE5usYJ0m5M93mVM3L3TyBPZWe1Xl6uZlH2gzfQx3dz+ZCdW93lWqdedJRkOecnvbnoEEXRZ5VQ== + dependencies: + "@smithy/config-resolver" "^4.4.3" + "@smithy/credential-provider-imds" "^4.2.5" + "@smithy/node-config-provider" "^4.3.5" + "@smithy/property-provider" "^4.2.5" + "@smithy/smithy-client" "^4.9.3" + "@smithy/types" "^4.9.0" tslib "^2.6.2" -"@smithy/util-endpoints@^3.0.6": - version "3.0.6" +"@smithy/util-endpoints@^3.2.4", "@smithy/util-endpoints@^3.2.5": + version "3.2.5" + resolved "https://registry.yarnpkg.com/@smithy/util-endpoints/-/util-endpoints-3.2.5.tgz#9e0fc34e38ddfbbc434d23a38367638dc100cb14" + integrity sha512-3O63AAWu2cSNQZp+ayl9I3NapW1p1rR5mlVHcF6hAB1dPZUQFfRPYtplWX/3xrzWthPGj5FqB12taJJCfH6s8A== dependencies: - "@smithy/node-config-provider" "^4.1.3" - "@smithy/types" "^4.3.1" + "@smithy/node-config-provider" "^4.3.5" + "@smithy/types" "^4.9.0" tslib "^2.6.2" -"@smithy/util-hex-encoding@^4.0.0": - version "4.0.0" +"@smithy/util-hex-encoding@^4.2.0": + version "4.2.0" + resolved "https://registry.yarnpkg.com/@smithy/util-hex-encoding/-/util-hex-encoding-4.2.0.tgz#1c22ea3d1e2c3a81ff81c0a4f9c056a175068a7b" + integrity sha512-CCQBwJIvXMLKxVbO88IukazJD9a4kQ9ZN7/UMGBjBcJYvatpWk+9g870El4cB8/EJxfe+k+y0GmR9CAzkF+Nbw== dependencies: tslib "^2.6.2" -"@smithy/util-middleware@^4.0.4": - version "4.0.4" +"@smithy/util-middleware@^4.2.4", "@smithy/util-middleware@^4.2.5": + version "4.2.5" + resolved "https://registry.yarnpkg.com/@smithy/util-middleware/-/util-middleware-4.2.5.tgz#1ace865afe678fd4b0f9217197e2fe30178d4835" + integrity sha512-6Y3+rvBF7+PZOc40ybeZMcGln6xJGVeY60E7jy9Mv5iKpMJpHgRE6dKy9ScsVxvfAYuEX4Q9a65DQX90KaQ3bA== dependencies: - "@smithy/types" "^4.3.1" + "@smithy/types" "^4.9.0" tslib "^2.6.2" -"@smithy/util-retry@^4.0.6": - version "4.0.6" +"@smithy/util-retry@^4.2.4", "@smithy/util-retry@^4.2.5": + version "4.2.5" + resolved "https://registry.yarnpkg.com/@smithy/util-retry/-/util-retry-4.2.5.tgz#70fe4fbbfb9ad43a9ce2ba4ed111ff7b30d7b333" + integrity sha512-GBj3+EZBbN4NAqJ/7pAhsXdfzdlznOh8PydUijy6FpNIMnHPSMO2/rP4HKu+UFeikJxShERk528oy7GT79YiJg== dependencies: - "@smithy/service-error-classification" "^4.0.6" - "@smithy/types" "^4.3.1" + "@smithy/service-error-classification" "^4.2.5" + "@smithy/types" "^4.9.0" tslib "^2.6.2" -"@smithy/util-stream@^4.2.2": - version "4.2.2" - dependencies: - "@smithy/fetch-http-handler" "^5.0.4" - "@smithy/node-http-handler" "^4.0.6" - "@smithy/types" "^4.3.1" - "@smithy/util-base64" "^4.0.0" - "@smithy/util-buffer-from" "^4.0.0" - "@smithy/util-hex-encoding" "^4.0.0" - "@smithy/util-utf8" "^4.0.0" +"@smithy/util-stream@^4.5.5", "@smithy/util-stream@^4.5.6": + version "4.5.6" + resolved "https://registry.yarnpkg.com/@smithy/util-stream/-/util-stream-4.5.6.tgz#ebee9e52adeb6f88337778b2f3356a2cc615298c" + integrity sha512-qWw/UM59TiaFrPevefOZ8CNBKbYEP6wBAIlLqxn3VAIo9rgnTNc4ASbVrqDmhuwI87usnjhdQrxodzAGFFzbRQ== + dependencies: + "@smithy/fetch-http-handler" "^5.3.6" + "@smithy/node-http-handler" "^4.4.5" + "@smithy/types" "^4.9.0" + "@smithy/util-base64" "^4.3.0" + "@smithy/util-buffer-from" "^4.2.0" + "@smithy/util-hex-encoding" "^4.2.0" + "@smithy/util-utf8" "^4.2.0" tslib "^2.6.2" -"@smithy/util-uri-escape@^4.0.0": - version "4.0.0" +"@smithy/util-uri-escape@^4.2.0": + version "4.2.0" + resolved "https://registry.yarnpkg.com/@smithy/util-uri-escape/-/util-uri-escape-4.2.0.tgz#096a4cec537d108ac24a68a9c60bee73fc7e3a9e" + integrity sha512-igZpCKV9+E/Mzrpq6YacdTQ0qTiLm85gD6N/IrmyDvQFA4UnU3d5g3m8tMT/6zG/vVkWSU+VxeUyGonL62DuxA== dependencies: tslib "^2.6.2" "@smithy/util-utf8@^2.0.0": version "2.3.0" - resolved "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz" + resolved "https://registry.yarnpkg.com/@smithy/util-utf8/-/util-utf8-2.3.0.tgz#dd96d7640363259924a214313c3cf16e7dd329c5" integrity sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A== dependencies: "@smithy/util-buffer-from" "^2.2.0" tslib "^2.6.2" -"@smithy/util-utf8@^4.0.0": - version "4.0.0" +"@smithy/util-utf8@^4.2.0": + version "4.2.0" + resolved "https://registry.yarnpkg.com/@smithy/util-utf8/-/util-utf8-4.2.0.tgz#8b19d1514f621c44a3a68151f3d43e51087fed9d" + integrity sha512-zBPfuzoI8xyBtR2P6WQj63Rz8i3AmfAaJLuNG8dWsfvPe8lO4aCPYLn879mEgHndZH1zQ2oXmG8O1GGzzaoZiw== + dependencies: + "@smithy/util-buffer-from" "^4.2.0" + tslib "^2.6.2" + +"@smithy/util-waiter@^4.2.4": + version "4.2.5" + resolved "https://registry.yarnpkg.com/@smithy/util-waiter/-/util-waiter-4.2.5.tgz#e527816edae20ec5f68b25685f4b21d93424ea86" + integrity sha512-Dbun99A3InifQdIrsXZ+QLcC0PGBPAdrl4cj1mTgJvyc9N2zf7QSxg8TBkzsCmGJdE3TLbO9ycwpY0EkWahQ/g== + dependencies: + "@smithy/abort-controller" "^4.2.5" + "@smithy/types" "^4.9.0" + tslib "^2.6.2" + +"@smithy/uuid@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@smithy/uuid/-/uuid-1.1.0.tgz#9fd09d3f91375eab94f478858123387df1cda987" + integrity sha512-4aUIteuyxtBUhVdiQqcDhKFitwfd9hqoSDYY2KRXiWtgoWJ9Bmise+KfEPDiVHWeJepvF8xJO9/9+WDIciMFFw== dependencies: - "@smithy/util-buffer-from" "^4.0.0" tslib "^2.6.2" -"@snaplet/copycat@^6.0.0", "@snaplet/copycat@>=2": +"@snaplet/copycat@^6.0.0": version "6.0.0" - resolved "https://registry.npmjs.org/@snaplet/copycat/-/copycat-6.0.0.tgz" + resolved "https://registry.yarnpkg.com/@snaplet/copycat/-/copycat-6.0.0.tgz#1a6d136dd2058d34896e555865ed4060790a6893" integrity sha512-ZBxlsWfhd+fxubKHrZglUQmSxHe70sGxHqTPiIBqoqX/41jABG8VCbgB8KrMm8to6V6Y/tBMqQUGzuWFFNHimg== dependencies: "@faker-js/faker" "^8.4.1" @@ -1587,9 +1727,9 @@ string-argv "^0.3.2" uuid "^9.0.1" -"@snaplet/seed@^0.98.0": +"@snaplet/seed@0.98.0": version "0.98.0" - resolved "https://registry.npmjs.org/@snaplet/seed/-/seed-0.98.0.tgz" + resolved "https://registry.yarnpkg.com/@snaplet/seed/-/seed-0.98.0.tgz#edd5483d9716e17657c2a6207d0063be1ff60eb6" integrity sha512-qLh7e596mKbY3DZW1CryhYyZdFJ/irAU760t00ac1VHsx/1Brfu3jpc6Bq69XBRZ6I3/nqPDlRckVP//bpFUMQ== dependencies: "@inquirer/prompts" "^5.0.2" @@ -1623,54 +1763,59 @@ yargs "^17.7.2" zod "^3.23.5" -"@tootallnate/once@2": - version "2.0.0" - resolved "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz" - integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A== +"@so-ric/colorspace@^1.1.6": + version "1.1.6" + resolved "https://registry.yarnpkg.com/@so-ric/colorspace/-/colorspace-1.1.6.tgz#62515d8b9f27746b76950a83bde1af812d91923b" + integrity sha512-/KiKkpHNOBgkFJwu9sh48LkHSMYGyuTcSFK/qMBdnOAlrRJzRSXAOFB5qwzaVQuDl8wAvHVMkaASQDReTahxuw== + dependencies: + color "^5.0.2" + text-hex "1.0.x" + +"@standard-schema/spec@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@standard-schema/spec/-/spec-1.0.0.tgz#f193b73dc316c4170f2e82a881da0f550d551b9c" + integrity sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA== "@total-typescript/ts-reset@^0.5.1": version "0.5.1" - resolved "https://registry.npmjs.org/@total-typescript/ts-reset/-/ts-reset-0.5.1.tgz" + resolved "https://registry.yarnpkg.com/@total-typescript/ts-reset/-/ts-reset-0.5.1.tgz#93b0535d00faa588518bcfb0db30182e63e4f7af" integrity sha512-AqlrT8YA1o7Ff5wPfMOL0pvL+1X+sw60NN6CcOCqs658emD6RfiXhF7Gu9QcfKBH7ELY2nInLhKSCWVoNL70MQ== "@tsconfig/node10@^1.0.7": version "1.0.11" - resolved "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz" + resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.11.tgz#6ee46400685f130e278128c7b38b7e031ff5b2f2" integrity sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw== "@tsconfig/node12@^1.0.7": version "1.0.11" - resolved "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz" + resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d" integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== "@tsconfig/node14@^1.0.0": version "1.0.3" - resolved "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz" + resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1" integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== "@tsconfig/node16@^1.0.2": version "1.0.4" - resolved "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz" + resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.4.tgz#0b92dcc0cc1c81f6f306a381f28e31b1a56536e9" integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== "@types/accepts@*", "@types/accepts@^1.3.5": version "1.3.7" - resolved "https://registry.npmjs.org/@types/accepts/-/accepts-1.3.7.tgz" + resolved "https://registry.yarnpkg.com/@types/accepts/-/accepts-1.3.7.tgz#3b98b1889d2b2386604c2bbbe62e4fb51e95b265" integrity sha512-Pay9fq2lM2wXPWbteBsRAGiWH2hig4ZE2asK+mm7kUzlxRTfL961rj89I6zV/E3PcIkDqyuBEcMxFT7rccugeQ== dependencies: "@types/node" "*" "@types/argparse@1.0.38": version "1.0.38" - resolved "https://registry.npmjs.org/@types/argparse/-/argparse-1.0.38.tgz" + resolved "https://registry.yarnpkg.com/@types/argparse/-/argparse-1.0.38.tgz#a81fd8606d481f873a3800c6ebae4f1d768a56a9" integrity sha512-ebDJ9b0e702Yr7pWgB0jzm+CX4Srzz8RcXtLJDJB+BSccqMa36uyH/zUsSYao5+BD1ytv3k3rPYCq4mAE1hsXA== -"@types/bluebird@*": - version "3.5.42" - "@types/body-parser@*": version "1.19.6" - resolved "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.6.tgz" + resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.6.tgz#1859bebb8fd7dac9918a45d54c1971ab8b5af474" integrity sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g== dependencies: "@types/connect" "*" @@ -1678,91 +1823,74 @@ "@types/body-parser@1.19.0": version "1.19.0" - resolved "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.0.tgz" + resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.0.tgz#0685b3c47eb3006ffed117cdd55164b61f80538f" integrity sha512-W98JrE0j2K78swW4ukqMleo8R7h/pFETjM2DQ90MF6XK2i4LO4W3gQ71Lt4w3bfm2EvVSyWHplECvB5sK22yFQ== dependencies: "@types/connect" "*" "@types/node" "*" -"@types/bson@*": - version "4.2.4" - resolved "https://registry.npmjs.org/@types/bson/-/bson-4.2.4.tgz" - integrity sha512-SG23E3JDH6y8qF20a4G9txLuUl+TCV16gxsKyntmGiJez2V9VBJr1Y8WxTBBD6OgBVcvspQ7sxgdNMkXFVcaEA== - dependencies: - bson "*" - -"@types/bson@1.x || 4.0.x": - version "4.0.5" - resolved "https://registry.npmjs.org/@types/bson/-/bson-4.0.5.tgz" - integrity sha512-vVLwMUqhYJSQ/WKcE60eFqcyuWse5fGH+NMAXHuKrUAPoryq3ATxk5o4bgYNtg5aOM4APVg7Hnb3ASqUYG0PKg== - dependencies: - "@types/node" "*" - "@types/connect@*": version "3.4.38" - resolved "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz" + resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.38.tgz#5ba7f3bc4fbbdeaff8dded952e5ff2cc53f8d858" integrity sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug== dependencies: "@types/node" "*" "@types/content-disposition@*": version "0.5.9" - resolved "https://registry.npmjs.org/@types/content-disposition/-/content-disposition-0.5.9.tgz" + resolved "https://registry.yarnpkg.com/@types/content-disposition/-/content-disposition-0.5.9.tgz#00ca14939432869de829a4ccf6fd380fa9181750" integrity sha512-8uYXI3Gw35MhiVYhG3s295oihrxRyytcRHjSjqnqZVDDy/xcGBRny7+Xj1Wgfhv5QzRtN2hB2dVRBUX9XW3UcQ== -"@types/continuation-local-storage@*": - version "3.2.7" - dependencies: - "@types/node" "*" - "@types/cookie-parser@^1.4.2": - version "1.4.9" - resolved "https://registry.npmjs.org/@types/cookie-parser/-/cookie-parser-1.4.9.tgz" - integrity sha512-tGZiZ2Gtc4m3wIdLkZ8mkj1T6CEHb35+VApbL2T14Dew8HA7c+04dmKqsKRNC+8RJPm16JEK0tFSwdZqubfc4g== + version "1.4.10" + resolved "https://registry.yarnpkg.com/@types/cookie-parser/-/cookie-parser-1.4.10.tgz#a045272a383a30597a01955d4f9c790018f214e4" + integrity sha512-B4xqkqfZ8Wek+rCOeRxsjMS9OgvzebEzzLYw7NHYuvzb7IdxOkI0ZHGgeEBX4PUM7QGVvNSK60T3OvWj3YfBRg== "@types/cookies@*": - version "0.9.1" - resolved "https://registry.npmjs.org/@types/cookies/-/cookies-0.9.1.tgz" - integrity sha512-E/DPgzifH4sM1UMadJMWd6mO2jOd4g1Ejwzx8/uRCDpJis1IrlyQEcGAYEomtAqRYmD5ORbNXMeI9U0RiVGZbg== + version "0.9.2" + resolved "https://registry.yarnpkg.com/@types/cookies/-/cookies-0.9.2.tgz#ccdf86d782f2dea34531dd32733a25be48177cd4" + integrity sha512-1AvkDdZM2dbyFybL4fxpuNCaWyv//0AwsuUk2DWeXyM1/5ZKm6W3z6mQi24RZ4l2ucY+bkSHzbDVpySqPGuV8A== dependencies: "@types/connect" "*" "@types/express" "*" "@types/keygrip" "*" "@types/node" "*" +"@types/cors@2.8.10": + version "2.8.10" + resolved "https://registry.yarnpkg.com/@types/cors/-/cors-2.8.10.tgz#61cc8469849e5bcdd0c7044122265c39cec10cf4" + integrity sha512-C7srjHiVG3Ey1nR6d511dtDkCEjxuN9W1HWAEjGq8kpcwmNM6JJkpC0xvabM7BXTG2wDq8Eu33iH9aQKa7IvLQ== + "@types/cors@^2.8.10": version "2.8.19" - resolved "https://registry.npmjs.org/@types/cors/-/cors-2.8.19.tgz" + resolved "https://registry.yarnpkg.com/@types/cors/-/cors-2.8.19.tgz#d93ea2673fd8c9f697367f5eeefc2bbfa94f0342" integrity sha512-mFNylyeyqN93lfe/9CSxOGREz8cpzAhH+E93xJ4xWQf62V8sQ/24reV2nyzUWM6H6Xji+GGHpkbLe7pVoUEskg== dependencies: "@types/node" "*" -"@types/cors@2.8.10": - version "2.8.10" - resolved "https://registry.npmjs.org/@types/cors/-/cors-2.8.10.tgz" - integrity sha512-C7srjHiVG3Ey1nR6d511dtDkCEjxuN9W1HWAEjGq8kpcwmNM6JJkpC0xvabM7BXTG2wDq8Eu33iH9aQKa7IvLQ== - "@types/crypto-js@^4.2.2": version "4.2.2" - resolved "https://registry.npmjs.org/@types/crypto-js/-/crypto-js-4.2.2.tgz" + resolved "https://registry.yarnpkg.com/@types/crypto-js/-/crypto-js-4.2.2.tgz#771c4a768d94eb5922cc202a3009558204df0cea" integrity sha512-sDOLlVbHhXpAUAL0YHDUUwDZf3iN4Bwi4W6a0W0b+QcAezUbRtH4FVb+9J4h+XFPW7l/gQ9F8qC7P+Ec4k8QVQ== "@types/debug@^4.1.8": version "4.1.12" - resolved "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz" + resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.12.tgz#a155f21690871953410df4b6b6f53187f0500917" integrity sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ== dependencies: "@types/ms" "*" "@types/dotenv@^8.2.0": version "8.2.3" - resolved "https://registry.npmjs.org/@types/dotenv/-/dotenv-8.2.3.tgz" + resolved "https://registry.yarnpkg.com/@types/dotenv/-/dotenv-8.2.3.tgz#c97b3c5b2e97ff3873793a000999e86cd66ff354" integrity sha512-g2FXjlDX/cYuc5CiQvyU/6kkbP1JtmGzh0obW50zD7OKeILVL0NSpPWLXVfqoAGQjom2/SLLx9zHq0KXvD6mbw== dependencies: dotenv "*" "@types/express-serve-static-core@^4.17.21", "@types/express-serve-static-core@^4.17.33": - version "4.19.6" + version "4.19.7" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.19.7.tgz#f1d306dcc03b1aafbfb6b4fe684cce8a31cffc10" + integrity sha512-FvPtiIf1LfhzsaIXhv/PHan/2FeQBbtBDtfX2QfvPxdUelMDEckK08SM6nqo1MIZY3RUlfA+HV8+hFUSio78qg== dependencies: "@types/node" "*" "@types/qs" "*" @@ -1770,33 +1898,44 @@ "@types/send" "*" "@types/express-serve-static-core@^5.0.0": - version "5.0.6" + version "5.1.0" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-5.1.0.tgz#74f47555b3d804b54cb7030e6f9aa0c7485cfc5b" + integrity sha512-jnHMsrd0Mwa9Cf4IdOzbz543y4XJepXrbia2T4b6+spXC2We3t1y6K44D3mR8XMFSXMCf3/l7rCgddfx7UNVBA== dependencies: "@types/node" "*" "@types/qs" "*" "@types/range-parser" "*" "@types/send" "*" -"@types/express@*", "@types/express@^4.17.11", "@types/express@^4.17.12", "@types/express@^4.17.14": - version "4.17.23" - resolved "https://registry.npmjs.org/@types/express/-/express-4.17.23.tgz" - integrity sha512-Crp6WY9aTYP3qPi2wGDo9iUe/rceX01UMhnF1jmwDcKCFM6cx7YhGP/Mpr3y9AASpfHixIG0E6azCcL5OcDHsQ== +"@types/express@*": + version "5.0.5" + resolved "https://registry.yarnpkg.com/@types/express/-/express-5.0.5.tgz#3ba069177caa34ab96585ca23b3984d752300cdc" + integrity sha512-LuIQOcb6UmnF7C1PCFmEU1u2hmiHL43fgFQX67sN3H4Z+0Yk0Neo++mFsBjhOAuLzvlQeqAAkeDOZrJs9rzumQ== + dependencies: + "@types/body-parser" "*" + "@types/express-serve-static-core" "^5.0.0" + "@types/serve-static" "^1" + +"@types/express@^4.17.11", "@types/express@^4.17.12": + version "4.17.25" + resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.25.tgz#070c8c73a6fee6936d65c195dbbfb7da5026649b" + integrity sha512-dVd04UKsfpINUnK0yBoYHDF3xu7xVH4BuDotC/xGuycx4CgbP48X/KF/586bcObxT0HENHXEU8Nqtu6NR+eKhw== dependencies: "@types/body-parser" "*" "@types/express-serve-static-core" "^4.17.33" "@types/qs" "*" - "@types/serve-static" "*" + "@types/serve-static" "^1" "@types/fs-capacitor@^2.0.0": version "2.0.0" - resolved "https://registry.npmjs.org/@types/fs-capacitor/-/fs-capacitor-2.0.0.tgz" + resolved "https://registry.yarnpkg.com/@types/fs-capacitor/-/fs-capacitor-2.0.0.tgz#17113e25817f584f58100fb7a08eed288b81956e" integrity sha512-FKVPOCFbhCvZxpVAMhdBdTfVfXUpsh15wFHgqOKxh9N9vzWZVuWCSijZ5T4U34XYNnuj2oduh6xcs1i+LPI+BQ== dependencies: "@types/node" "*" "@types/graphql-upload@^8.0.6": version "8.0.12" - resolved "https://registry.npmjs.org/@types/graphql-upload/-/graphql-upload-8.0.12.tgz" + resolved "https://registry.yarnpkg.com/@types/graphql-upload/-/graphql-upload-8.0.12.tgz#224738b8885bad8d50fb690b67bbe10bbcdef032" integrity sha512-M0ZPZqNUzKNB16q5woEzgG/Q8DjICV80K7JvDSRnDmDFfrRdfFX/n6PbmqAN7gCzECcHVnw1gk6N4Cg0FwxCqA== dependencies: "@types/express" "*" @@ -1806,43 +1945,43 @@ "@types/graphql@^14.5.0": version "14.5.0" - resolved "https://registry.npmjs.org/@types/graphql/-/graphql-14.5.0.tgz" + resolved "https://registry.yarnpkg.com/@types/graphql/-/graphql-14.5.0.tgz#a545fb3bc8013a3547cf2f07f5e13a33642b75d6" integrity sha512-MOkzsEp1Jk5bXuAsHsUi6BVv0zCO+7/2PTiZMXWDSsMXvNU6w/PLMQT2vHn8hy2i0JqojPz1Sz6rsFjHtsU0lA== dependencies: graphql "*" "@types/http-assert@*": version "1.5.6" - resolved "https://registry.npmjs.org/@types/http-assert/-/http-assert-1.5.6.tgz" + resolved "https://registry.yarnpkg.com/@types/http-assert/-/http-assert-1.5.6.tgz#b6b657c38a2350d21ce213139f33b03b2b5fa431" integrity sha512-TTEwmtjgVbYAzZYWyeHPrrtWnfVkm8tQkP8P21uQifPgMRgjrow3XDEYqucuC8SKZJT7pUnhU/JymvjggxO9vw== -"@types/http-errors@*": +"@types/http-errors@*", "@types/http-errors@^2": version "2.0.5" - resolved "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.5.tgz" + resolved "https://registry.yarnpkg.com/@types/http-errors/-/http-errors-2.0.5.tgz#5b749ab2b16ba113423feb1a64a95dcd30398472" integrity sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg== "@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0": version "2.0.6" - resolved "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz#7739c232a1fee9b4d3ce8985f314c0c6d33549d7" integrity sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w== "@types/istanbul-lib-report@*": version "3.0.3" - resolved "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz#53047614ae72e19fc0401d872de3ae2b4ce350bf" integrity sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA== dependencies: "@types/istanbul-lib-coverage" "*" "@types/istanbul-reports@^3.0.0": version "3.0.4" - resolved "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz" + resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz#0f03e3d2f670fbdac586e34b433783070cc16f54" integrity sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ== dependencies: "@types/istanbul-lib-report" "*" "@types/jest@^26.0.23": version "26.0.24" - resolved "https://registry.npmjs.org/@types/jest/-/jest-26.0.24.tgz" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-26.0.24.tgz#943d11976b16739185913a1936e0de0c4a7d595a" integrity sha512-E/X5Vib8BWqZNRlDxj9vYXhsDwPYbPINqKF9BsnSoon4RQ0D9moEuLD8txgyypFLH7J4+Lho9Nr/c8H0Fi+17w== dependencies: jest-diff "^26.0.0" @@ -1850,31 +1989,24 @@ "@types/json-schema@^7.0.12": version "7.0.15" - resolved "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== "@types/json2csv@^5.0.3": version "5.0.7" - resolved "https://registry.npmjs.org/@types/json2csv/-/json2csv-5.0.7.tgz" + resolved "https://registry.yarnpkg.com/@types/json2csv/-/json2csv-5.0.7.tgz#c80ff09b669f8e3ee60be19d91326275a6a2346b" integrity sha512-Ma25zw9G9GEBnX8b12R4EYvnFT6dBh8L3jwsN5EUFXa+fl2dqmbLDbNWN0XuQU3rSXdsbBeCYjI9uHU2PUBxhA== dependencies: "@types/node" "*" "@types/json5@^0.0.29": version "0.0.29" - resolved "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz" + resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== -"@types/jsonwebtoken@^8.5.9": - version "8.5.9" - resolved "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-8.5.9.tgz" - integrity sha512-272FMnFGzAVMGtu9tkr29hRL6bZj4Zs1KZNeHLnKqAvp06tAIcarTMwOh8/8bz4FmKRcMxZhZNeUAQsNLoiPhg== - dependencies: - "@types/node" "*" - "@types/jsonwebtoken@^9.0.9": version "9.0.10" - resolved "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-9.0.10.tgz" + resolved "https://registry.yarnpkg.com/@types/jsonwebtoken/-/jsonwebtoken-9.0.10.tgz#a7932a47177dcd4283b6146f3bd5c26d82647f09" integrity sha512-asx5hIG9Qmf/1oStypjanR7iKTv0gXQ1Ov/jfrX6kS/EO0OFni8orbmGCn0672NHR3kXHwpAwR+B368ZGN/2rA== dependencies: "@types/ms" "*" @@ -1882,119 +2014,119 @@ "@types/keygrip@*": version "1.0.6" - resolved "https://registry.npmjs.org/@types/keygrip/-/keygrip-1.0.6.tgz" + resolved "https://registry.yarnpkg.com/@types/keygrip/-/keygrip-1.0.6.tgz#1749535181a2a9b02ac04a797550a8787345b740" integrity sha512-lZuNAY9xeJt7Bx4t4dx0rYCDqGPW8RXhQZK1td7d4H6E9zYbLoOtjBvfwdTKpsyxQI/2jv+armjX/RW+ZNpXOQ== "@types/koa-compose@*": - version "3.2.8" - resolved "https://registry.npmjs.org/@types/koa-compose/-/koa-compose-3.2.8.tgz" - integrity sha512-4Olc63RY+MKvxMwVknCUDhRQX1pFQoBZ/lXcRLP69PQkEpze/0cr8LNqJQe5NFb/b19DWi2a5bTi2VAlQzhJuA== + version "3.2.9" + resolved "https://registry.yarnpkg.com/@types/koa-compose/-/koa-compose-3.2.9.tgz#6efb945ee5573be0f4eddb728a2f6826f7a3f395" + integrity sha512-BroAZ9FTvPiCy0Pi8tjD1OfJ7bgU1gQf0eR6e1Vm+JJATy9eKOG3hQMFtMciMawiSOVnLMdmUOC46s7HBhSTsA== dependencies: "@types/koa" "*" "@types/koa@*": - version "2.15.0" + version "3.0.1" + resolved "https://registry.yarnpkg.com/@types/koa/-/koa-3.0.1.tgz#2c9ace20ecb33d0cf84d63492af231185eb2aefa" + integrity sha512-VkB6WJUQSe0zBpR+Q7/YIUESGp5wPHcaXr0xueU5W0EOUWtlSbblsl+Kl31lyRQ63nIILh0e/7gXjQ09JXJIHw== dependencies: "@types/accepts" "*" "@types/content-disposition" "*" "@types/cookies" "*" "@types/http-assert" "*" - "@types/http-errors" "*" + "@types/http-errors" "^2" "@types/keygrip" "*" "@types/koa-compose" "*" "@types/node" "*" -"@types/lodash@*", "@types/lodash@^4.14.168": - version "4.17.19" +"@types/lodash@^4.14.168": + version "4.17.20" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.17.20.tgz#1ca77361d7363432d29f5e55950d9ec1e1c6ea93" + integrity sha512-H3MHACvFUEiujabxhaI/ImO6gUrd8oOurg7LQtS7mbwIXA/cUqWrvBsaeJ23aZEPk1TAYkurjfMbSELfoCXlGA== -"@types/long@^4.0.0", "@types/long@^4.0.1": +"@types/long@^4.0.0": version "4.0.2" - resolved "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz" + resolved "https://registry.yarnpkg.com/@types/long/-/long-4.0.2.tgz#b74129719fc8d11c01868010082d483b7545591a" integrity sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA== "@types/mime@^1": version "1.3.5" - resolved "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz" + resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.5.tgz#1ef302e01cf7d2b5a0fa526790c9123bf1d06690" integrity sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w== -"@types/mongodb@^3.5.27": - version "3.6.20" - resolved "https://registry.npmjs.org/@types/mongodb/-/mongodb-3.6.20.tgz" - integrity sha512-WcdpPJCakFzcWWD9juKoZbRtQxKIMYF/JIAM4JrNHrMcnJL6/a2NWjXxW7fo9hxboxxkg+icff8d7+WIEvKgYQ== - dependencies: - "@types/bson" "*" - "@types/node" "*" - -"@types/mongoose@^5.10.3": - version "5.11.97" - resolved "https://registry.npmjs.org/@types/mongoose/-/mongoose-5.11.97.tgz" - integrity sha512-cqwOVYT3qXyLiGw7ueU2kX9noE8DPGRY6z8eUxudhXY8NZ7DMKYAxyZkLSevGfhCX3dO/AoX5/SO9lAzfjon0Q== - dependencies: - mongoose "*" - "@types/ms@*": version "2.1.0" - resolved "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz" + resolved "https://registry.yarnpkg.com/@types/ms/-/ms-2.1.0.tgz#052aa67a48eccc4309d7f0191b7e41434b90bb78" integrity sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA== "@types/multer@^1.4.6": version "1.4.13" - resolved "https://registry.npmjs.org/@types/multer/-/multer-1.4.13.tgz" + resolved "https://registry.yarnpkg.com/@types/multer/-/multer-1.4.13.tgz#be483f909a77f13e0624cac3d001859eb12ae68b" integrity sha512-bhhdtPw7JqCiEfC9Jimx5LqX9BDIPJEh2q/fQ4bqbBPtyEZYr3cvF22NwG0DmPZNYA0CAf2CnqDB4KIGGpJcaw== dependencies: "@types/express" "*" "@types/mute-stream@^0.0.4": version "0.0.4" - resolved "https://registry.npmjs.org/@types/mute-stream/-/mute-stream-0.0.4.tgz" + resolved "https://registry.yarnpkg.com/@types/mute-stream/-/mute-stream-0.0.4.tgz#77208e56a08767af6c5e1237be8888e2f255c478" integrity sha512-CPM9nzrCPPJHQNA9keH9CVkVI+WR5kMa+7XEs5jcGQ0VoAGnLv242w8lIVgwAEfmE4oufJRaTc9PNLQl0ioAow== dependencies: "@types/node" "*" "@types/node-cron@^3.0.11": version "3.0.11" - resolved "https://registry.npmjs.org/@types/node-cron/-/node-cron-3.0.11.tgz" + resolved "https://registry.yarnpkg.com/@types/node-cron/-/node-cron-3.0.11.tgz#70b7131f65038ae63cfe841354c8aba363632344" integrity sha512-0ikrnug3/IyneSHqCBeslAhlK2aBfYek1fGo4bP4QnZPmiqSGRK+Oy7ZMisLWkesffJvQ1cqAcBnJC+8+nxIAg== "@types/node-fetch@^2.5.8", "@types/node-fetch@^2.6.4": - version "2.6.12" + version "2.6.13" + resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.6.13.tgz#e0c9b7b5edbdb1b50ce32c127e85e880872d56ee" + integrity sha512-QGpRVpzSaUs30JBSGPjOg4Uveu384erbHBoT1zeONvyCfwQxIkUshLAOqN/k9EjGviPRmWTTe6aH2qySWKTVSw== dependencies: "@types/node" "*" - form-data "^4.0.0" + form-data "^4.0.4" -"@types/node@*", "@types/node@^14.14.31": - version "14.18.63" - resolved "https://registry.npmjs.org/@types/node/-/node-14.18.63.tgz" - integrity sha512-fAtCfv4jJg+ExtXhvCkCqUKZ+4ok/JQk01qDKhL5BDDoS3AxKXhV5/MAVUZyQnSEd2GT92fkgZl0pz0Q0AzcIQ== +"@types/node@*": + version "24.10.1" + resolved "https://registry.yarnpkg.com/@types/node/-/node-24.10.1.tgz#91e92182c93db8bd6224fca031e2370cef9a8f01" + integrity sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ== + dependencies: + undici-types "~7.16.0" "@types/node@^10.1.0": version "10.17.60" - resolved "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz" + resolved "https://registry.yarnpkg.com/@types/node/-/node-10.17.60.tgz#35f3d6213daed95da7f0f73e75bcc6980e90597b" integrity sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw== +"@types/node@^14.14.31": + version "14.18.63" + resolved "https://registry.yarnpkg.com/@types/node/-/node-14.18.63.tgz#1788fa8da838dbb5f9ea994b834278205db6ca2b" + integrity sha512-fAtCfv4jJg+ExtXhvCkCqUKZ+4ok/JQk01qDKhL5BDDoS3AxKXhV5/MAVUZyQnSEd2GT92fkgZl0pz0Q0AzcIQ== + "@types/node@^18.11.18": - version "18.19.117" + version "18.19.130" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.19.130.tgz#da4c6324793a79defb7a62cba3947ec5add00d59" + integrity sha512-GRaXQx6jGfL8sKfaIDD6OupbIHBr9jv7Jnaml9tB7l4v068PAOXqfcujMMo5PhbIs6ggR1XODELqahT2R8v0fg== dependencies: undici-types "~5.26.4" "@types/node@^22.5.5": - version "22.16.2" + version "22.19.1" + resolved "https://registry.yarnpkg.com/@types/node/-/node-22.19.1.tgz#1188f1ddc9f46b4cc3aec76749050b4e1f459b7b" + integrity sha512-LCCV0HdSZZZb34qifBsyWlUmok6W7ouER+oQIGBScS8EsZsQbrtFTUrDX4hOl+CS6p7cnNC4td+qrSVGSCTUfQ== dependencies: undici-types "~6.21.0" -"@types/node@>=12.12.47", "@types/node@>=13.7.0": - version "24.0.4" - dependencies: - undici-types "~7.8.0" - "@types/nodemailer@^6.4.1": - version "6.4.17" + version "6.4.21" + resolved "https://registry.yarnpkg.com/@types/nodemailer/-/nodemailer-6.4.21.tgz#a87634864592e4d8fca8eb8f168cbe0db32c76f7" + integrity sha512-Eix+sb/Nj28MNnWvO2X1OLrk5vuD4C9SMnb2Vf4itWnxphYeSceqkFX7IdmxTzn+dvmnNz7paMbg4Uc60wSfJg== dependencies: + "@aws-sdk/client-ses" "^3.731.1" "@types/node" "*" -"@types/pg@*", "@types/pg@^7.14.10": +"@types/pg@^7.14.10": version "7.14.11" - resolved "https://registry.npmjs.org/@types/pg/-/pg-7.14.11.tgz" + resolved "https://registry.yarnpkg.com/@types/pg/-/pg-7.14.11.tgz#daf5555504a1f7af4263df265d91f140fece52e3" integrity sha512-EnZkZ1OMw9DvNfQkn2MTJrwKmhJYDEs5ujWrPfvseWNoI95N8B4HzU/Ltrq5ZfYxDX/Zg8mTzwr6UAyTjjFvXA== dependencies: "@types/node" "*" @@ -2003,46 +2135,66 @@ "@types/qs@*": version "6.14.0" - resolved "https://registry.npmjs.org/@types/qs/-/qs-6.14.0.tgz" + resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.14.0.tgz#d8b60cecf62f2db0fb68e5e006077b9178b85de5" integrity sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ== "@types/range-parser@*": version "1.2.7" - resolved "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz" + resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.7.tgz#50ae4353eaaddc04044279812f52c8c65857dbcb" integrity sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ== "@types/retry@0.12.0": version "0.12.0" - resolved "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz" + resolved "https://registry.yarnpkg.com/@types/retry/-/retry-0.12.0.tgz#2b35eccfcee7d38cd72ad99232fbd58bffb3c84d" integrity sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA== "@types/semver@^7.5.0": - version "7.7.0" + version "7.7.1" + resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.7.1.tgz#3ce3af1a5524ef327d2da9e4fd8b6d95c8d70528" + integrity sha512-FmgJfu+MOcQ370SD0ev7EI8TlCAfKYU+B4m5T3yXc1CiRN94g/SZPtsCkk506aUDtlMnFZvasDwHHUcZUEaYuA== "@types/send@*": - version "0.17.5" + version "1.2.1" + resolved "https://registry.yarnpkg.com/@types/send/-/send-1.2.1.tgz#6a784e45543c18c774c049bff6d3dbaf045c9c74" + integrity sha512-arsCikDvlU99zl1g69TcAB3mzZPpxgw0UQnaHeC1Nwb015xp8bknZv5rIfri9xTOcMuaVgvabfIRA7PSZVuZIQ== + dependencies: + "@types/node" "*" + +"@types/send@<1": + version "0.17.6" + resolved "https://registry.yarnpkg.com/@types/send/-/send-0.17.6.tgz#aeb5385be62ff58a52cd5459daa509ae91651d25" + integrity sha512-Uqt8rPBE8SY0RK8JB1EzVOIZ32uqy8HwdxCnoCOsYrvnswqmFZ/k+9Ikidlk/ImhsdvBsloHbAlewb2IEBV/Og== dependencies: "@types/mime" "^1" "@types/node" "*" "@types/sequelize@*": - version "4.28.20" + version "6.12.0" + resolved "https://registry.yarnpkg.com/@types/sequelize/-/sequelize-6.12.0.tgz#91b3ab13830b90dbac3632c8e2adc071c7c5b527" + integrity sha512-rJRUf3AkP356HicHSjM2I7+d0FiLvOPZdDxFY0bhmKiZnGOuZZ1cUcDlPyyin9b3pYFvxZfJUTC3nGXLoi6DWA== dependencies: - "@types/bluebird" "*" - "@types/continuation-local-storage" "*" - "@types/lodash" "*" - "@types/validator" "*" + sequelize "*" "@types/serve-static@*": - version "1.15.8" + version "2.2.0" + resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-2.2.0.tgz#d4a447503ead0d1671132d1ab6bd58b805d8de6a" + integrity sha512-8mam4H1NHLtu7nmtalF7eyBH14QyOASmcxHhSfEoRyr0nP/YdoesEtU+uSRvMe96TW/HPTtkoKqQLl53N7UXMQ== dependencies: "@types/http-errors" "*" "@types/node" "*" - "@types/send" "*" + +"@types/serve-static@^1": + version "1.15.10" + resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.10.tgz#768169145a778f8f5dfcb6360aead414a3994fee" + integrity sha512-tRs1dB+g8Itk72rlSI2ZrW6vZg0YrLI81iQSTkMmOqnqCaNr/8Ek4VwWcN5vZgCYWbg/JJSGBlUaYGAOP73qBw== + dependencies: + "@types/http-errors" "*" + "@types/node" "*" + "@types/send" "<1" "@types/swagger-ui-express@^4.1.2": version "4.1.8" - resolved "https://registry.npmjs.org/@types/swagger-ui-express/-/swagger-ui-express-4.1.8.tgz" + resolved "https://registry.yarnpkg.com/@types/swagger-ui-express/-/swagger-ui-express-4.1.8.tgz#3c0e0bf2543c7efb500eaa081bfde6d92f88096c" integrity sha512-AhZV8/EIreHFmBV5wAs0gzJUNq9JbbSXgJLQubCC0jtIo6prnI9MIRRxnU4MZX9RB9yXxF1V4R7jtLl/Wcj31g== dependencies: "@types/express" "*" @@ -2050,12 +2202,12 @@ "@types/triple-beam@^1.3.2": version "1.3.5" - resolved "https://registry.npmjs.org/@types/triple-beam/-/triple-beam-1.3.5.tgz" + resolved "https://registry.yarnpkg.com/@types/triple-beam/-/triple-beam-1.3.5.tgz#74fef9ffbaa198eb8b588be029f38b00299caa2c" integrity sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw== "@types/umzug@^2.3.0": version "2.3.9" - resolved "https://registry.npmjs.org/@types/umzug/-/umzug-2.3.9.tgz" + resolved "https://registry.yarnpkg.com/@types/umzug/-/umzug-2.3.9.tgz#11250f0c1129ac175bec080704ff7ceb9c0189be" integrity sha512-YIA3UL9MgOVP2RC7yF6z6Mrp1hrLFccDuXYxKuXdr/+Qqy8awWnDK1RHNy5Rp+sHQ7qwke85dp+SZTGfS+MqPg== dependencies: "@types/node" "*" @@ -2063,38 +2215,33 @@ mongodb "^4.1.4" "@types/urijs@^1.19.25": - version "1.19.25" - resolved "https://registry.npmjs.org/@types/urijs/-/urijs-1.19.25.tgz" - integrity sha512-XOfUup9r3Y06nFAZh3WvO0rBU4OtlfPB/vgxpjg+NRdGU6CN6djdc6OEiH+PcqHCY6eFLo9Ista73uarf4gnBg== + version "1.19.26" + resolved "https://registry.yarnpkg.com/@types/urijs/-/urijs-1.19.26.tgz#500fc9912e0ba01d635480970bdc9ba0f45d7bc6" + integrity sha512-wkXrVzX5yoqLnndOwFsieJA7oKM8cNkOKJtf/3vVGSUFkWDKZvFHpIl9Pvqb/T9UsawBBFMTTD8xu7sK5MWuvg== "@types/uuid@^10.0.0": version "10.0.0" - resolved "https://registry.npmjs.org/@types/uuid/-/uuid-10.0.0.tgz" + resolved "https://registry.yarnpkg.com/@types/uuid/-/uuid-10.0.0.tgz#e9c07fe50da0f53dc24970cca94d619ff03f6f6d" integrity sha512-7gqG38EyHgyP1S+7+xomFtL+ZNHcKv6DwNaCZmJmo1vgMugyF3TCnXVg4t1uk89mLNwnLtnY3TpOpCOyp1/xHQ== "@types/uuid@^8.3.1": version "8.3.4" - resolved "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.4.tgz" + resolved "https://registry.yarnpkg.com/@types/uuid/-/uuid-8.3.4.tgz#bd86a43617df0594787d38b735f55c805becf1bc" integrity sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw== -"@types/validator@*", "@types/validator@^13.1.3", "@types/validator@^13.7.17": - version "13.15.2" +"@types/validator@^13.1.3", "@types/validator@^13.7.17": + version "13.15.6" + resolved "https://registry.yarnpkg.com/@types/validator/-/validator-13.15.6.tgz#b02622a355fd3a60bba35cefaad3713c3c31541a" + integrity sha512-jc8VD+GfyVLfjVXG9qGq7MPR4UTz6e2fNHI6xmZhZ37f3iZLn0KecpxUnTsHLOPGgf1PfHUZmteBIJVsnYTDkQ== "@types/webidl-conversions@*": version "7.0.3" - resolved "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.3.tgz" + resolved "https://registry.yarnpkg.com/@types/webidl-conversions/-/webidl-conversions-7.0.3.tgz#1306dbfa53768bcbcfc95a1c8cde367975581859" integrity sha512-CiJJvcRtIgzadHCYXw7dqEnMNRjhGZlYK05Mj9OyktqV8uVT8fD2BFOB7S1uwBE3Kj2Z+4UyPmFw/Ixgw/LAlA== -"@types/whatwg-url@^11.0.2": - version "11.0.5" - resolved "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-11.0.5.tgz" - integrity sha512-coYR071JRaHa+xoEvvYqvnIHaVqaYrLPbsufM9BF63HkwI5Lgmy2QR8Q5K/lYDYo5AK82wOvSOS0UsLTpTG7uQ== - dependencies: - "@types/webidl-conversions" "*" - "@types/whatwg-url@^8.2.1": version "8.2.2" - resolved "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-8.2.2.tgz" + resolved "https://registry.yarnpkg.com/@types/whatwg-url/-/whatwg-url-8.2.2.tgz#749d5b3873e845897ada99be4448041d4cc39e63" integrity sha512-FtQu10RWgn3D9U4aazdwIE2yzphmTJREDqNdODHrbrZmmMqI0vMheC/6NE/J1Yveaj8H+ela+YwWTjq5PGmuhA== dependencies: "@types/node" "*" @@ -2102,36 +2249,36 @@ "@types/wrap-ansi@^3.0.0": version "3.0.0" - resolved "https://registry.npmjs.org/@types/wrap-ansi/-/wrap-ansi-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/@types/wrap-ansi/-/wrap-ansi-3.0.0.tgz#18b97a972f94f60a679fd5c796d96421b9abb9fd" integrity sha512-ltIpx+kM7g/MLRZfkbL7EsCEjfzCcScLpkg37eXEtx5kmrAKBkTJwd1GIAjDSL8wTpM6Hzn5YO4pSb91BEwu1g== "@types/ws@^7.0.0": version "7.4.7" - resolved "https://registry.npmjs.org/@types/ws/-/ws-7.4.7.tgz" + resolved "https://registry.yarnpkg.com/@types/ws/-/ws-7.4.7.tgz#f7c390a36f7a0679aa69de2d501319f4f8d9b702" integrity sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww== dependencies: "@types/node" "*" "@types/yamljs@^0.2.31": version "0.2.34" - resolved "https://registry.npmjs.org/@types/yamljs/-/yamljs-0.2.34.tgz" + resolved "https://registry.yarnpkg.com/@types/yamljs/-/yamljs-0.2.34.tgz#c10b1f31b173f2cc93342f27b0796c2eb5b3ae84" integrity sha512-gJvfRlv9ErxdOv7ux7UsJVePtX54NAvQyd8ncoiFqK8G5aeHIfQfGH2fbruvjAQ9657HwAaO54waS+Dsk2QTUQ== "@types/yargs-parser@*": version "21.0.3" - resolved "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz" + resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.3.tgz#815e30b786d2e8f0dcd85fd5bcf5e1a04d008f15" integrity sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ== "@types/yargs@^15.0.0": version "15.0.19" - resolved "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.19.tgz" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.19.tgz#328fb89e46109ecbdb70c295d96ff2f46dfd01b9" integrity sha512-2XUaGVmyQjgyAZldf0D0c14vvo/yv0MhQBSTJcejMMaitsn3nxCB6TmH4G0ZQf+uxROOa9mpanoSm8h6SG/1ZA== dependencies: "@types/yargs-parser" "*" "@typescript-eslint/eslint-plugin@^6.11.0": version "6.21.0" - resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.21.0.tgz" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.21.0.tgz#30830c1ca81fd5f3c2714e524c4303e0194f9cd3" integrity sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA== dependencies: "@eslint-community/regexpp" "^4.5.1" @@ -2148,7 +2295,7 @@ "@typescript-eslint/parser@^4.4.1": version "4.33.0" - resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.33.0.tgz" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.33.0.tgz#dfe797570d9694e560528d18eecad86c8c744899" integrity sha512-ZohdsbXadjGBSK0/r+d87X0SBmKzOq4/S5nzK6SBgJspFo9/CUDJ7hjayuze+JK7CZQLDMroqytp7pOcFKTxZA== dependencies: "@typescript-eslint/scope-manager" "4.33.0" @@ -2156,9 +2303,9 @@ "@typescript-eslint/typescript-estree" "4.33.0" debug "^4.3.1" -"@typescript-eslint/parser@^6.0.0 || ^6.0.0-alpha", "@typescript-eslint/parser@^6.11.0": +"@typescript-eslint/parser@^6.11.0": version "6.21.0" - resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.21.0.tgz" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-6.21.0.tgz#af8fcf66feee2edc86bc5d1cf45e33b0630bf35b" integrity sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ== dependencies: "@typescript-eslint/scope-manager" "6.21.0" @@ -2169,7 +2316,7 @@ "@typescript-eslint/scope-manager@4.33.0": version "4.33.0" - resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.33.0.tgz" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.33.0.tgz#d38e49280d983e8772e29121cf8c6e9221f280a3" integrity sha512-5IfJHpgTsTZuONKbODctL4kKuQje/bzBRkwHE8UOZ4f89Zeddg+EGZs8PD8NcN4LdM3ygHWYB3ukPAYjvl/qbQ== dependencies: "@typescript-eslint/types" "4.33.0" @@ -2177,7 +2324,7 @@ "@typescript-eslint/scope-manager@6.21.0": version "6.21.0" - resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz#ea8a9bfc8f1504a6ac5d59a6df308d3a0630a2b1" integrity sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg== dependencies: "@typescript-eslint/types" "6.21.0" @@ -2185,7 +2332,7 @@ "@typescript-eslint/type-utils@6.21.0": version "6.21.0" - resolved "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.21.0.tgz" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-6.21.0.tgz#6473281cfed4dacabe8004e8521cee0bd9d4c01e" integrity sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag== dependencies: "@typescript-eslint/typescript-estree" "6.21.0" @@ -2195,17 +2342,17 @@ "@typescript-eslint/types@4.33.0": version "4.33.0" - resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.33.0.tgz" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.33.0.tgz#a1e59036a3b53ae8430ceebf2a919dc7f9af6d72" integrity sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ== "@typescript-eslint/types@6.21.0": version "6.21.0" - resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.21.0.tgz" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-6.21.0.tgz#205724c5123a8fef7ecd195075fa6e85bac3436d" integrity sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg== "@typescript-eslint/typescript-estree@4.33.0": version "4.33.0" - resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.33.0.tgz" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.33.0.tgz#0dfb51c2908f68c5c08d82aefeaf166a17c24609" integrity sha512-rkWRY1MPFzjwnEVHsxGemDzqqddw2QbTJlICPD9p9I9LfsO8fdmfQPOX3uKfUaGRDFJbfrtm/sXhVXN4E+bzCA== dependencies: "@typescript-eslint/types" "4.33.0" @@ -2218,7 +2365,7 @@ "@typescript-eslint/typescript-estree@6.21.0": version "6.21.0" - resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz#c47ae7901db3b8bddc3ecd73daff2d0895688c46" integrity sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ== dependencies: "@typescript-eslint/types" "6.21.0" @@ -2232,7 +2379,7 @@ "@typescript-eslint/utils@6.21.0": version "6.21.0" - resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.21.0.tgz" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-6.21.0.tgz#4714e7a6b39e773c1c8e97ec587f520840cd8134" integrity sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ== dependencies: "@eslint-community/eslint-utils" "^4.4.0" @@ -2245,7 +2392,7 @@ "@typescript-eslint/visitor-keys@4.33.0": version "4.33.0" - resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.33.0.tgz" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.33.0.tgz#2a22f77a41604289b7a186586e9ec48ca92ef1dd" integrity sha512-uqi/2aSz9g2ftcHWf8uLPJA70rUv6yuMW5Bohw+bwcuzaxQIHaKFZCKGoGXIrc9vkTJ3+0txM73K0Hq3d5wgIg== dependencies: "@typescript-eslint/types" "4.33.0" @@ -2253,7 +2400,7 @@ "@typescript-eslint/visitor-keys@6.21.0": version "6.21.0" - resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz#87a99d077aa507e20e238b11d56cc26ade45fe47" integrity sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A== dependencies: "@typescript-eslint/types" "6.21.0" @@ -2261,21 +2408,21 @@ "@wry/equality@^0.1.2": version "0.1.11" - resolved "https://registry.npmjs.org/@wry/equality/-/equality-0.1.11.tgz" + resolved "https://registry.yarnpkg.com/@wry/equality/-/equality-0.1.11.tgz#35cb156e4a96695aa81a9ecc4d03787bc17f1790" integrity sha512-mwEVBDUVODlsQQ5dfuLUS5/Tf7jqUKyhKYHmVi4fPB6bDMOfWvUPJmKgS1Z7Za/sOI3vzWt4+O7yCiL/70MogA== dependencies: tslib "^1.9.3" abort-controller@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== dependencies: event-target-shim "^5.0.0" accepts@^1.3.5, accepts@~1.3.8: version "1.3.8" - resolved "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== dependencies: mime-types "~2.1.34" @@ -2283,65 +2430,48 @@ accepts@^1.3.5, accepts@~1.3.8: acorn-jsx@^5.3.1: version "5.3.2" - resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== acorn-walk@^8.1.1: version "8.3.4" - resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.4.tgz#794dd169c3977edf4ba4ea47583587c5866236b7" integrity sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g== dependencies: acorn "^8.11.0" -"acorn@^6.0.0 || ^7.0.0 || ^8.0.0", acorn@^7.4.0: +acorn@^7.4.0: version "7.4.1" - resolved "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== -acorn@^8.11.0, acorn@^8.14.0, acorn@^8.4.1: +acorn@^8.11.0, acorn@^8.15.0, acorn@^8.4.1: version "8.15.0" - resolved "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.15.0.tgz#a360898bc415edaac46c8241f6383975b930b816" integrity sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg== -agent-base@6: - version "6.0.2" - resolved "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz" - integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== - dependencies: - debug "4" - agentkeepalive@^4.2.1: version "4.6.0" - resolved "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.6.0.tgz" + resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.6.0.tgz#35f73e94b3f40bf65f105219c623ad19c136ea6a" integrity sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ== dependencies: humanize-ms "^1.2.1" ajv-draft-04@~1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/ajv-draft-04/-/ajv-draft-04-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/ajv-draft-04/-/ajv-draft-04-1.0.0.tgz#3b64761b268ba0b9e668f0b41ba53fce0ad77fc8" integrity sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw== ajv-formats@~3.0.1: version "3.0.1" - resolved "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz" + resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-3.0.1.tgz#3d5dc762bca17679c3c2ea7e90ad6b7532309578" integrity sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ== dependencies: ajv "^8.0.0" -ajv@^6.10.0: - version "6.12.6" - resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" - integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== - dependencies: - fast-deep-equal "^3.1.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - -ajv@^6.12.4: +ajv@^6.10.0, ajv@^6.12.4: version "6.12.6" - resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== dependencies: fast-deep-equal "^3.1.1" @@ -2349,80 +2479,82 @@ ajv@^6.12.4: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ajv@^8.0.0, ajv@^8.5.0, ajv@~8.13.0: - version "8.13.0" - resolved "https://registry.npmjs.org/ajv/-/ajv-8.13.0.tgz" - integrity sha512-PRA911Blj99jR5RMeTunVbNXMF6Lp4vZXnk5GQjcnUWUTsrXtekg/pnmFFI2u/I36Y/2bITGS30GZCXei6uNkA== +ajv@^8.0.0, ajv@^8.0.1: + version "8.17.1" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.17.1.tgz#37d9a5c776af6bc92d7f4f9510eba4c0a60d11a6" + integrity sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g== dependencies: fast-deep-equal "^3.1.3" + fast-uri "^3.0.1" json-schema-traverse "^1.0.0" require-from-string "^2.0.2" - uri-js "^4.4.1" -ajv@^8.0.1: - version "8.17.1" - resolved "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz" - integrity sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g== +ajv@~8.13.0: + version "8.13.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.13.0.tgz#a3939eaec9fb80d217ddf0c3376948c023f28c91" + integrity sha512-PRA911Blj99jR5RMeTunVbNXMF6Lp4vZXnk5GQjcnUWUTsrXtekg/pnmFFI2u/I36Y/2bITGS30GZCXei6uNkA== dependencies: fast-deep-equal "^3.1.3" - fast-uri "^3.0.1" json-schema-traverse "^1.0.0" require-from-string "^2.0.2" + uri-js "^4.4.1" ansi-colors@^4.1.1: version "4.1.3" - resolved "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== ansi-escapes@^4.3.2: version "4.3.2" - resolved "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== dependencies: type-fest "^0.21.3" ansi-escapes@^5.0.0: version "5.0.0" - resolved "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-5.0.0.tgz" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-5.0.0.tgz#b6a0caf0eef0c41af190e9a749e0c00ec04bb2a6" integrity sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA== dependencies: type-fest "^1.0.2" ansi-escapes@^6.2.1: version "6.2.1" - resolved "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-6.2.1.tgz" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-6.2.1.tgz#76c54ce9b081dad39acec4b5d53377913825fb0f" integrity sha512-4nJ3yixlEthEJ9Rk4vPcdBRkZvQZlYyu8j4/Mqz5sgIkddmEnH2Yj2ZrnP9S3tQOvSNRUIgVNF/1yPpRAGNRig== ansi-regex@^5.0.0, ansi-regex@^5.0.1: version "5.0.1" - resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== ansi-regex@^6.0.1: - version "6.1.0" + version "6.2.2" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.2.2.tgz#60216eea464d864597ce2832000738a0589650c1" + integrity sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg== ansi-styles@^3.2.1: version "3.2.1" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== dependencies: color-convert "^1.9.0" ansi-styles@^4.0.0, ansi-styles@^4.1.0: version "4.3.0" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== dependencies: color-convert "^2.0.1" ansi-styles@^5.0.0: version "5.2.0" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== anymatch@~3.1.2: version "3.1.3" - resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== dependencies: normalize-path "^3.0.0" @@ -2430,7 +2562,7 @@ anymatch@~3.1.2: apollo-cache-control@^0.15.0: version "0.15.0" - resolved "https://registry.npmjs.org/apollo-cache-control/-/apollo-cache-control-0.15.0.tgz" + resolved "https://registry.yarnpkg.com/apollo-cache-control/-/apollo-cache-control-0.15.0.tgz#45897ed318b883bf964960e6fcd7516a50b4e4d4" integrity sha512-U2uYvHZsWmR6s6CD5zlq3PepfbUAM8953CeVM2Y2QYMtJ8i4CYplEPbIWb3zTIXSPbIPeWGddM56pChI6Iz3zA== dependencies: apollo-server-env "^3.2.0" @@ -2438,7 +2570,7 @@ apollo-cache-control@^0.15.0: apollo-datasource@^0.10.0: version "0.10.0" - resolved "https://registry.npmjs.org/apollo-datasource/-/apollo-datasource-0.10.0.tgz" + resolved "https://registry.yarnpkg.com/apollo-datasource/-/apollo-datasource-0.10.0.tgz#5450fc88f23f73b36ba04b4f7a6d00ef2f5364a9" integrity sha512-wrLhuoM2MtA0KA0+3qyioe0H2FjAxjTvuFOlNCk6WberA887m0MQlWULZImCWTkKuN+zEAMerHfxN+F+W8+lBA== dependencies: apollo-server-caching "^0.7.0" @@ -2446,7 +2578,7 @@ apollo-datasource@^0.10.0: apollo-graphql@^0.9.0: version "0.9.7" - resolved "https://registry.npmjs.org/apollo-graphql/-/apollo-graphql-0.9.7.tgz" + resolved "https://registry.yarnpkg.com/apollo-graphql/-/apollo-graphql-0.9.7.tgz#33185093b497a578f2df61ab8ecc6447d700ae64" integrity sha512-bezL9ItUWUGHTm1bI/XzIgiiZbhXpsC7uxk4UxFPmcVJwJsDc3ayZ99oXxAaK+3Rbg/IoqrHckA6CwmkCsbaSA== dependencies: core-js-pure "^3.10.2" @@ -2455,7 +2587,7 @@ apollo-graphql@^0.9.0: apollo-link@^1.2.14: version "1.2.14" - resolved "https://registry.npmjs.org/apollo-link/-/apollo-link-1.2.14.tgz" + resolved "https://registry.yarnpkg.com/apollo-link/-/apollo-link-1.2.14.tgz#3feda4b47f9ebba7f4160bef8b977ba725b684d9" integrity sha512-p67CMEFP7kOG1JZ0ZkYZwRDa369w5PIjtMjvrQd/HnIV8FRsHRqLqK+oAZQnFa1DDdZtOtHTi+aMIW6EatC2jg== dependencies: apollo-utilities "^1.3.0" @@ -2465,21 +2597,21 @@ apollo-link@^1.2.14: apollo-reporting-protobuf@^0.8.0: version "0.8.0" - resolved "https://registry.npmjs.org/apollo-reporting-protobuf/-/apollo-reporting-protobuf-0.8.0.tgz" + resolved "https://registry.yarnpkg.com/apollo-reporting-protobuf/-/apollo-reporting-protobuf-0.8.0.tgz#ae9d967934d3d8ed816fc85a0d8068ef45c371b9" integrity sha512-B3XmnkH6Y458iV6OsA7AhfwvTgeZnFq9nPVjbxmLKnvfkEl8hYADtz724uPa0WeBiD7DSFcnLtqg9yGmCkBohg== dependencies: "@apollo/protobufjs" "1.2.2" apollo-server-caching@^0.7.0: version "0.7.0" - resolved "https://registry.npmjs.org/apollo-server-caching/-/apollo-server-caching-0.7.0.tgz" + resolved "https://registry.yarnpkg.com/apollo-server-caching/-/apollo-server-caching-0.7.0.tgz#e6d1e68e3bb571cba63a61f60b434fb771c6ff39" integrity sha512-MsVCuf/2FxuTFVhGLK13B+TZH9tBd2qkyoXKKILIiGcZ5CDUEBO14vIV63aNkMkS1xxvK2U4wBcuuNj/VH2Mkw== dependencies: lru-cache "^6.0.0" apollo-server-core@^2.26.2: version "2.26.2" - resolved "https://registry.npmjs.org/apollo-server-core/-/apollo-server-core-2.26.2.tgz" + resolved "https://registry.yarnpkg.com/apollo-server-core/-/apollo-server-core-2.26.2.tgz#5391bb93654194a5d6b83cf1855f229c94d5b3b1" integrity sha512-r8jOhf1jElaxsNsALFMy/MLiJCqSa1ZiwxkerVYbsEkyWrpD1Khy0extDkTBrfa6uK8CatX7xK9U413bYNhJFA== dependencies: "@apollographql/apollo-tools" "^0.5.0" @@ -2510,7 +2642,7 @@ apollo-server-core@^2.26.2: apollo-server-env@^3.2.0: version "3.2.0" - resolved "https://registry.npmjs.org/apollo-server-env/-/apollo-server-env-3.2.0.tgz" + resolved "https://registry.yarnpkg.com/apollo-server-env/-/apollo-server-env-3.2.0.tgz#0572e307da4784c5d7633a0ade1f45e231da28e3" integrity sha512-V+kO5e6vUo2JwqV1/Ng71ZE3J6x1hCOC+nID2/++bCYl0/fPY9iLChbBNSgN/uoFcjhgmBchOv+m4o0Nie/TFQ== dependencies: node-fetch "^2.6.1" @@ -2518,12 +2650,12 @@ apollo-server-env@^3.2.0: apollo-server-errors@^2.5.0: version "2.5.0" - resolved "https://registry.npmjs.org/apollo-server-errors/-/apollo-server-errors-2.5.0.tgz" + resolved "https://registry.yarnpkg.com/apollo-server-errors/-/apollo-server-errors-2.5.0.tgz#5d1024117c7496a2979e3e34908b5685fe112b68" integrity sha512-lO5oTjgiC3vlVg2RKr3RiXIIQ5pGXBFxYGGUkKDhTud3jMIhs+gel8L8zsEjKaKxkjHhCQAA/bcEfYiKkGQIvA== apollo-server-express@^2.22.2, apollo-server-express@^2.26.2: version "2.26.2" - resolved "https://registry.npmjs.org/apollo-server-express/-/apollo-server-express-2.26.2.tgz" + resolved "https://registry.yarnpkg.com/apollo-server-express/-/apollo-server-express-2.26.2.tgz#e1df5cc88e3214b4301e754f1f03addfeb0b33ce" integrity sha512-8KaDwc6/DMK6e5KmP4AGH/NNY7OhEOFxusz3JZ/Du08a+PN8c/JmaEAwQ0aTNpySb5PWpv6xeXRPPwNfaPK9IQ== dependencies: "@apollographql/graphql-playground-html" "1.6.27" @@ -2546,14 +2678,14 @@ apollo-server-express@^2.22.2, apollo-server-express@^2.26.2: apollo-server-plugin-base@^0.14.0: version "0.14.0" - resolved "https://registry.npmjs.org/apollo-server-plugin-base/-/apollo-server-plugin-base-0.14.0.tgz" + resolved "https://registry.yarnpkg.com/apollo-server-plugin-base/-/apollo-server-plugin-base-0.14.0.tgz#f59b6ab7780304162d2e4fd9ee29ed0696b174ef" integrity sha512-nTNSFuBhZURGjtWptdVqwemYUOdsvABj/GSKzeNvepiEubiv4N0rt4Gvy1inHDiMbo98wQTdF/7XohNcB9A77g== dependencies: apollo-server-types "^0.10.0" apollo-server-types@^0.10.0: version "0.10.0" - resolved "https://registry.npmjs.org/apollo-server-types/-/apollo-server-types-0.10.0.tgz" + resolved "https://registry.yarnpkg.com/apollo-server-types/-/apollo-server-types-0.10.0.tgz#af578bf507151a0e86fbdf188f9673ece3f8f164" integrity sha512-LsB3epw1X3Co/HGiKHCGtzWG35J59gG8Ypx0p22+wgdM9AVDm1ylsNGZy+osNIVJc1lUJf3nF5kZ90vA866K/w== dependencies: apollo-reporting-protobuf "^0.8.0" @@ -2562,7 +2694,7 @@ apollo-server-types@^0.10.0: apollo-server@^2.22.2: version "2.26.2" - resolved "https://registry.npmjs.org/apollo-server/-/apollo-server-2.26.2.tgz" + resolved "https://registry.yarnpkg.com/apollo-server/-/apollo-server-2.26.2.tgz#30a9b1737e9899289bc8e9bc55b5897a48bd83cf" integrity sha512-VgEvOSqcGgMofUVji97nsHnUCXPaMg9efBbM3xI/HbTn3baKQHoRjqfnR4xZeEd9DkhgxwrmSZHBjWCjGOYExg== dependencies: apollo-server-core "^2.26.2" @@ -2574,7 +2706,7 @@ apollo-server@^2.22.2: apollo-tracing@^0.16.0: version "0.16.0" - resolved "https://registry.npmjs.org/apollo-tracing/-/apollo-tracing-0.16.0.tgz" + resolved "https://registry.yarnpkg.com/apollo-tracing/-/apollo-tracing-0.16.0.tgz#8542ca40ae4a3f84f899e749631b65833557ceb1" integrity sha512-Oy8kTggB+fJ/hHXwHyMpuTl5KW7u1XetKFDErZVOobUKc2zjc/NgWiC/s7SGYZCgfLodBjvwfa6rMcvLkz7c0w== dependencies: apollo-server-env "^3.2.0" @@ -2582,7 +2714,7 @@ apollo-tracing@^0.16.0: apollo-utilities@^1.0.1, apollo-utilities@^1.3.0: version "1.3.4" - resolved "https://registry.npmjs.org/apollo-utilities/-/apollo-utilities-1.3.4.tgz" + resolved "https://registry.yarnpkg.com/apollo-utilities/-/apollo-utilities-1.3.4.tgz#6129e438e8be201b6c55b0f13ce49d2c7175c9cf" integrity sha512-pk2hiWrCXMAy2fRPwEyhvka+mqwzeP60Jr1tRYi5xru+3ko94HI9o6lK0CT33/w4RDlxWchmdhDCrvdr+pHCig== dependencies: "@wry/equality" "^0.1.2" @@ -2592,34 +2724,29 @@ apollo-utilities@^1.0.1, apollo-utilities@^1.3.0: append-field@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/append-field/-/append-field-1.0.0.tgz#1e3440e915f0b1203d23748e78edd7b9b5b43e56" integrity sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw== -arg@^4.1.0: - version "4.1.3" - resolved "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz" - integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== - arg@5.0.2: version "5.0.2" - resolved "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz" + resolved "https://registry.yarnpkg.com/arg/-/arg-5.0.2.tgz#c81433cc427c92c4dcf4865142dbca6f15acd59c" integrity sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg== +arg@^4.1.0: + version "4.1.3" + resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" + integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== + argparse@^1.0.7, argparse@~1.0.9: version "1.0.10" - resolved "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== dependencies: sprintf-js "~1.0.2" -aria-query@^5.3.2: - version "5.3.2" - resolved "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz" - integrity sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw== - array-buffer-byte-length@^1.0.1, array-buffer-byte-length@^1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz" + resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz#384d12a37295aec3769ab022ad323a18a51ccf8b" integrity sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw== dependencies: call-bound "^1.0.3" @@ -2627,17 +2754,17 @@ array-buffer-byte-length@^1.0.1, array-buffer-byte-length@^1.0.2: array-differ@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/array-differ/-/array-differ-4.0.0.tgz" + resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-4.0.0.tgz#aa3c891c653523290c880022f45b06a42051b026" integrity sha512-Q6VPTLMsmXZ47ENG3V+wQyZS1ZxXMxFyYzA+Z/GMrJ6yIutAIEf9wTyroTzmGjNfox9/h3GdGBCVh43GVFx4Uw== array-flatten@1.1.1: version "1.1.1" - resolved "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== -array-includes@^3.1.6, array-includes@^3.1.8, array-includes@^3.1.9: +array-includes@^3.1.9: version "3.1.9" - resolved "https://registry.npmjs.org/array-includes/-/array-includes-3.1.9.tgz" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.9.tgz#1f0ccaa08e90cdbc3eb433210f903ad0f17c3f3a" integrity sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ== dependencies: call-bind "^1.0.8" @@ -2651,29 +2778,17 @@ array-includes@^3.1.6, array-includes@^3.1.8, array-includes@^3.1.9: array-union@^2.1.0: version "2.1.0" - resolved "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== array-union@^3.0.1: version "3.0.1" - resolved "https://registry.npmjs.org/array-union/-/array-union-3.0.1.tgz" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-3.0.1.tgz#da52630d327f8b88cfbfb57728e2af5cd9b6b975" integrity sha512-1OvF9IbWwaeiM9VhzYXVQacMibxpXOMYVNIvMtKRyX9SImBXpKcFr8XvFDeEslCyuH/t6KRt7HEO94AlP8Iatw== -array.prototype.findlast@^1.2.5: - version "1.2.5" - resolved "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz" - integrity sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-abstract "^1.23.2" - es-errors "^1.3.0" - es-object-atoms "^1.0.0" - es-shim-unscopables "^1.0.2" - array.prototype.findlastindex@^1.2.6: version "1.2.6" - resolved "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.6.tgz" + resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.6.tgz#cfa1065c81dcb64e34557c9b81d012f6a421c564" integrity sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ== dependencies: call-bind "^1.0.8" @@ -2684,9 +2799,9 @@ array.prototype.findlastindex@^1.2.6: es-object-atoms "^1.1.1" es-shim-unscopables "^1.1.0" -array.prototype.flat@^1.3.1, array.prototype.flat@^1.3.3: +array.prototype.flat@^1.3.3: version "1.3.3" - resolved "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz" + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz#534aaf9e6e8dd79fb6b9a9917f839ef1ec63afe5" integrity sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg== dependencies: call-bind "^1.0.8" @@ -2694,9 +2809,9 @@ array.prototype.flat@^1.3.1, array.prototype.flat@^1.3.3: es-abstract "^1.23.5" es-shim-unscopables "^1.0.2" -array.prototype.flatmap@^1.3.2, array.prototype.flatmap@^1.3.3: +array.prototype.flatmap@^1.3.3: version "1.3.3" - resolved "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz" + resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz#712cc792ae70370ae40586264629e33aab5dd38b" integrity sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg== dependencies: call-bind "^1.0.8" @@ -2706,7 +2821,7 @@ array.prototype.flatmap@^1.3.2, array.prototype.flatmap@^1.3.3: array.prototype.reduce@^1.0.6: version "1.0.8" - resolved "https://registry.npmjs.org/array.prototype.reduce/-/array.prototype.reduce-1.0.8.tgz" + resolved "https://registry.yarnpkg.com/array.prototype.reduce/-/array.prototype.reduce-1.0.8.tgz#42f97f5078daedca687d4463fd3c05cbfd83da57" integrity sha512-DwuEqgXFBwbmZSRqt3BpQigWNUoqw9Ml2dTWdF3B2zQlQX4OeUE0zyuzX0fX0IbTvjdkZbcBTU3idgpO78qkTw== dependencies: call-bind "^1.0.8" @@ -2718,20 +2833,9 @@ array.prototype.reduce@^1.0.6: es-object-atoms "^1.1.1" is-string "^1.1.1" -array.prototype.tosorted@^1.1.4: - version "1.1.4" - resolved "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz" - integrity sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-abstract "^1.23.3" - es-errors "^1.3.0" - es-shim-unscopables "^1.0.2" - arraybuffer.prototype.slice@^1.0.4: version "1.0.4" - resolved "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz" + resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz#9d760d84dbdd06d0cbf92c8849615a1a7ab3183c" integrity sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ== dependencies: array-buffer-byte-length "^1.0.1" @@ -2742,104 +2846,68 @@ arraybuffer.prototype.slice@^1.0.4: get-intrinsic "^1.2.6" is-array-buffer "^3.0.4" -arrify@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz" - integrity sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug== - -ast-types-flow@^0.0.8: - version "0.0.8" - resolved "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz" - integrity sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ== - astral-regex@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz" + resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== async-function@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/async-function/-/async-function-1.0.0.tgz#509c9fca60eaf85034c6829838188e4e4c8ffb2b" integrity sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA== -async-retry@^1.2.1, async-retry@^1.3.3: +async-retry@^1.2.1: version "1.3.3" - resolved "https://registry.npmjs.org/async-retry/-/async-retry-1.3.3.tgz" + resolved "https://registry.yarnpkg.com/async-retry/-/async-retry-1.3.3.tgz#0e7f36c04d8478e7a58bdbed80cedf977785f280" integrity sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw== dependencies: retry "0.13.1" async@^3.2.3: version "3.2.6" - resolved "https://registry.npmjs.org/async/-/async-3.2.6.tgz" + resolved "https://registry.yarnpkg.com/async/-/async-3.2.6.tgz#1b0728e14929d51b85b449b7f06e27c1145e38ce" integrity sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA== asynckit@^0.4.0: version "0.4.0" - resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== available-typed-arrays@^1.0.7: version "1.0.7" - resolved "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz" + resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz#a5cc375d6a03c2efc87a553f3e0b1522def14846" integrity sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ== dependencies: possible-typed-array-names "^1.0.0" -axe-core@^4.10.0: - version "4.11.0" - resolved "https://registry.npmjs.org/axe-core/-/axe-core-4.11.0.tgz" - integrity sha512-ilYanEU8vxxBexpJd8cWM4ElSQq4QctCLKih0TSfjIfCQTeyH/6zVrmIJfLPrKTKJRbiG+cfnZbQIjAlJmF1jQ== - -axobject-query@^4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz" - integrity sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ== - backo2@^1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz" + resolved "https://registry.yarnpkg.com/backo2/-/backo2-1.0.2.tgz#31ab1ac8b129363463e35b3ebb69f4dfcfba7947" integrity sha512-zj6Z6M7Eq+PBZ7PQxl5NT665MvJdAkzp0f60nAJ+sLaSCBPMwVak5ZegFbgVCzFcCJTKFoMizvM5Ld7+JrRJHA== balanced-match@^1.0.0: version "1.0.2" - resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== base-64@^0.1.0: version "0.1.0" - resolved "https://registry.npmjs.org/base-64/-/base-64-0.1.0.tgz" + resolved "https://registry.yarnpkg.com/base-64/-/base-64-0.1.0.tgz#780a99c84e7d600260361511c4877613bf24f6bb" integrity sha512-Y5gU45svrR5tI2Vt/X9GPd3L0HNIKzGu202EjxrXMpuc2V2CiKgemAbUUsqYmZJvPtCXoUKjNZwBJzsNScUbXA== base64-js@^1.3.0, base64-js@^1.3.1, base64-js@^1.5.1: version "1.5.1" - resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== -bignumber.js@^9.0.0: - version "9.3.0" - binary-extensions@^2.0.0: version "2.3.0" - resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522" integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw== -bl@^2.2.1: - version "2.2.1" - resolved "https://registry.npmjs.org/bl/-/bl-2.2.1.tgz" - integrity sha512-6Pesp1w0DEX1N550i/uGV/TqucVL4AM/pgThFSN/Qq9si1/DF9aIHs1BxD8V/QU0HoeHO6cQRTAuYnLPKq1e4g== - dependencies: - readable-stream "^2.3.5" - safe-buffer "^5.1.1" - -bluebird@3.5.1: - version "3.5.1" - resolved "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz" - integrity sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA== - -body-parser@^1.18.3, body-parser@1.20.3: +body-parser@1.20.3, body-parser@^1.18.3: version "1.20.3" - resolved "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.3.tgz#1953431221c6fb5cd63c4b36d53fab0928e548c6" integrity sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g== dependencies: bytes "3.1.2" @@ -2856,11 +2924,13 @@ body-parser@^1.18.3, body-parser@1.20.3: unpipe "1.0.0" bowser@^2.11.0: - version "2.11.0" + version "2.12.1" + resolved "https://registry.yarnpkg.com/bowser/-/bowser-2.12.1.tgz#f9ad78d7aebc472feb63dd9635e3ce2337e0e2c1" + integrity sha512-z4rE2Gxh7tvshQ4hluIT7XcFrgLIQaw9X3A+kTTRdovCz5PMukm/0QC/BKSYPj3omF5Qfypn9O/c5kgpmvYUCw== brace-expansion@^1.1.7: version "1.1.12" - resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.12.tgz#ab9b454466e5a8cc3a187beaad580412a9c5b843" integrity sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg== dependencies: balanced-match "^1.0.0" @@ -2868,53 +2938,43 @@ brace-expansion@^1.1.7: brace-expansion@^2.0.1: version "2.0.2" - resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.2.tgz#54fc53237a613d854c7bd37463aad17df87214e7" integrity sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ== dependencies: balanced-match "^1.0.0" braces@^3.0.3, braces@~3.0.2: version "3.0.3" - resolved "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== dependencies: fill-range "^7.1.1" browser-or-node@^2.1.1: version "2.1.1" - resolved "https://registry.npmjs.org/browser-or-node/-/browser-or-node-2.1.1.tgz" + resolved "https://registry.yarnpkg.com/browser-or-node/-/browser-or-node-2.1.1.tgz#738790b3a86a8fc020193fa581273fbe65eaea0f" integrity sha512-8CVjaLJGuSKMVTxJ2DpBl5XnlNDiT4cQFeuCJJrvJmts9YrTZDizTX7PjC2s6W4x+MBGZeEY6dGMrF04/6Hgqg== -bson@*, bson@^6.10.4: - version "6.10.4" - resolved "https://registry.npmjs.org/bson/-/bson-6.10.4.tgz" - integrity sha512-WIsKqkSC0ABoBJuT1LEX+2HEvNmNKKgnTAyd0fL8qzK4SH2i9NXg+t08YtdZp/V9IZ33cxe3iV4yM0qg8lMQng== - -bson@^1.1.4: - version "1.1.6" - resolved "https://registry.npmjs.org/bson/-/bson-1.1.6.tgz" - integrity sha512-EvVNVeGo4tHxwi8L6bPj3y3itEvStdwvvlojVxxbyYfoaxJ6keLgrTuKdyfEAszFK+H3olzBuafE0yoh0D1gdg== - bson@^4.7.2: version "4.7.2" - resolved "https://registry.npmjs.org/bson/-/bson-4.7.2.tgz" + resolved "https://registry.yarnpkg.com/bson/-/bson-4.7.2.tgz#320f4ad0eaf5312dd9b45dc369cc48945e2a5f2e" integrity sha512-Ry9wCtIZ5kGqkJoi6aD8KjxFZEx78guTQDnpXWiNthsxzrxAK/i8E6pCHAIZTbaEFWcOCvbecMukfK7XUvyLpQ== dependencies: buffer "^5.6.0" buffer-equal-constant-time@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819" integrity sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA== buffer-from@^1.0.0: version "1.1.2" - resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== buffer@^5.6.0: version "5.7.1" - resolved "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== dependencies: base64-js "^1.3.1" @@ -2922,7 +2982,7 @@ buffer@^5.6.0: buffer@^6.0.3: version "6.0.3" - resolved "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== dependencies: base64-js "^1.3.1" @@ -2930,7 +2990,7 @@ buffer@^6.0.3: busboy@^0.2.11: version "0.2.14" - resolved "https://registry.npmjs.org/busboy/-/busboy-0.2.14.tgz" + resolved "https://registry.yarnpkg.com/busboy/-/busboy-0.2.14.tgz#6c2a622efcf47c57bbbe1e2a9c37ad36c7925453" integrity sha512-InWFDomvlkEj+xWLBfU3AvnbVYqeTWmQopiW0tWWEy5yehYm2YkGEc59sUmw/4ty5Zj/b0WHGs1LgecuBSBGrg== dependencies: dicer "0.2.5" @@ -2938,19 +2998,37 @@ busboy@^0.2.11: busboy@^0.3.1: version "0.3.1" - resolved "https://registry.npmjs.org/busboy/-/busboy-0.3.1.tgz" + resolved "https://registry.yarnpkg.com/busboy/-/busboy-0.3.1.tgz#170899274c5bf38aae27d5c62b71268cd585fd1b" integrity sha512-y7tTxhGKXcyBxRKAni+awqx8uqaJKrSFSNFSeRG5CsWNdmy2BIK+6VGWEW7TZnIO/533mtMEA4rOevQV815YJw== dependencies: dicer "0.3.0" bytes@3.1.2: version "3.1.2" - resolved "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== +c12@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/c12/-/c12-3.1.0.tgz#9e237970e1d3b74ebae51d25945cb59664c12c89" + integrity sha512-uWoS8OU1MEIsOv8p/5a82c3H31LsWVR5qiyXVfBNOzfffjUWtPnhAb4BYI2uG2HfGmZmFjCtui5XNWaps+iFuw== + dependencies: + chokidar "^4.0.3" + confbox "^0.2.2" + defu "^6.1.4" + dotenv "^16.6.1" + exsolve "^1.0.7" + giget "^2.0.0" + jiti "^2.4.2" + ohash "^2.0.11" + pathe "^2.0.3" + perfect-debounce "^1.0.0" + pkg-types "^2.2.0" + rc9 "^2.1.2" + c12@^1.10.0: version "1.11.2" - resolved "https://registry.npmjs.org/c12/-/c12-1.11.2.tgz" + resolved "https://registry.yarnpkg.com/c12/-/c12-1.11.2.tgz#f8a1e30c10f4b273894a1bcb6944f76c15b56717" integrity sha512-oBs8a4uvSDO9dm8b7OCFW7+dgtVrwmwnrVXYzLm43ta7ep2jCn/0MhoUFygIWtxhyy6+/MG7/agvpY0U1Iemew== dependencies: chokidar "^3.6.0" @@ -2968,7 +3046,7 @@ c12@^1.10.0: call-bind-apply-helpers@^1.0.0, call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz" + resolved "https://registry.yarnpkg.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz#4b5428c222be985d79c3d82657479dbe0b59b2d6" integrity sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ== dependencies: es-errors "^1.3.0" @@ -2976,7 +3054,7 @@ call-bind-apply-helpers@^1.0.0, call-bind-apply-helpers@^1.0.1, call-bind-apply- call-bind@^1.0.7, call-bind@^1.0.8: version "1.0.8" - resolved "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.8.tgz#0736a9660f537e3388826f440d5ec45f744eaa4c" integrity sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww== dependencies: call-bind-apply-helpers "^1.0.0" @@ -2986,7 +3064,7 @@ call-bind@^1.0.7, call-bind@^1.0.8: call-bound@^1.0.2, call-bound@^1.0.3, call-bound@^1.0.4: version "1.0.4" - resolved "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz" + resolved "https://registry.yarnpkg.com/call-bound/-/call-bound-1.0.4.tgz#238de935d2a2a692928c538c7ccfa91067fd062a" integrity sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg== dependencies: call-bind-apply-helpers "^1.0.2" @@ -2994,17 +3072,17 @@ call-bound@^1.0.2, call-bound@^1.0.3, call-bound@^1.0.4: callsites@^3.0.0: version "3.1.0" - resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== camelcase@6: version "6.3.0" - resolved "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== chalk@^2.4.2: version "2.4.2" - resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== dependencies: ansi-styles "^3.2.1" @@ -3013,33 +3091,35 @@ chalk@^2.4.2: chalk@^4.0.0: version "4.1.2" - resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== dependencies: ansi-styles "^4.1.0" supports-color "^7.1.0" chalk@^5.3.0: - version "5.4.1" + version "5.6.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.6.2.tgz#b1238b6e23ea337af71c7f8a295db5af0c158aea" + integrity sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA== change-case@^5.4.4: version "5.4.4" - resolved "https://registry.npmjs.org/change-case/-/change-case-5.4.4.tgz" + resolved "https://registry.yarnpkg.com/change-case/-/change-case-5.4.4.tgz#0d52b507d8fb8f204343432381d1a6d7bff97a02" integrity sha512-HRQyTk2/YPEkt9TnUPbOpr64Uw3KOicFWPVBb+xiHvd6eBx/qPr9xqfBFDT8P2vWsvvz4jbEkfDe71W3VyNu2w== chardet@^0.7.0: version "0.7.0" - resolved "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz" + resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== charenc@0.0.2: version "0.0.2" - resolved "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz" + resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667" integrity sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA== chokidar@^3.5.2, chokidar@^3.6.0: version "3.6.0" - resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== dependencies: anymatch "~3.1.2" @@ -3052,47 +3132,45 @@ chokidar@^3.5.2, chokidar@^3.6.0: optionalDependencies: fsevents "~2.3.2" +chokidar@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-4.0.3.tgz#7be37a4c03c9aee1ecfe862a4a23b2c70c205d30" + integrity sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA== + dependencies: + readdirp "^4.0.1" + chownr@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== citty@^0.1.6: version "0.1.6" - resolved "https://registry.npmjs.org/citty/-/citty-0.1.6.tgz" + resolved "https://registry.yarnpkg.com/citty/-/citty-0.1.6.tgz#0f7904da1ed4625e1a9ea7e0fa780981aab7c5e4" integrity sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ== dependencies: consola "^3.2.3" cli-cursor@^5.0.0: version "5.0.0" - resolved "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-5.0.0.tgz#24a4831ecf5a6b01ddeb32fb71a4b2088b0dce38" integrity sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw== dependencies: restore-cursor "^5.0.0" cli-spinners@^2.9.2: version "2.9.2" - resolved "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz" + resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.9.2.tgz#1773a8f4b9c4d6ac31563df53b3fc1d79462fe41" integrity sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg== cli-width@^4.1.0: version "4.1.0" - resolved "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-4.1.0.tgz#42daac41d3c254ef38ad8ac037672130173691c5" integrity sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ== -cliui@^7.0.2: - version "7.0.4" - resolved "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz" - integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.0" - wrap-ansi "^7.0.0" - cliui@^8.0.1: version "8.0.1" - resolved "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== dependencies: string-width "^4.2.0" @@ -3101,88 +3179,90 @@ cliui@^8.0.1: collection-utils@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/collection-utils/-/collection-utils-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/collection-utils/-/collection-utils-1.0.1.tgz#31d14336488674f27aefc0a7c5eccacf6df78044" integrity sha512-LA2YTIlR7biSpXkKYwwuzGjwL5rjWEZVOSnvdUc7gObvWe4WkjxOpfrdhoP7Hs09YWDVfg0Mal9BpAqLfVEzQg== -color-convert@^1.9.0, color-convert@^1.9.3: +color-convert@^1.9.0: version "1.9.3" - resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== dependencies: color-name "1.1.3" color-convert@^2.0.1: version "2.0.1" - resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== dependencies: color-name "~1.1.4" -color-name@^1.0.0, color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== +color-convert@^3.0.1: + version "3.1.2" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-3.1.2.tgz#cef9e0fd4cb90b07c14697b3fa70af9d7f4870f1" + integrity sha512-UNqkvCDXstVck3kdowtOTWROIJQwafjOfXSmddoDrXo4cewMKmusCeF22Q24zvjR8nwWib/3S/dfyzPItPEiJg== + dependencies: + color-name "^2.0.0" color-name@1.1.3: version "1.1.3" - resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== -color-string@^1.6.0: - version "1.9.1" - dependencies: - color-name "^1.0.0" - simple-swizzle "^0.2.2" +color-name@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-2.0.2.tgz#85054825a23e6d6f81d3503f660c4c4a2a15f04f" + integrity sha512-9vEt7gE16EW7Eu7pvZnR0abW9z6ufzhXxGXZEVU9IqPdlsUiMwJeJfRtq0zePUmnbHGT9zajca7mX8zgoayo4A== -color@^3.1.3: - version "3.2.1" +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +color-string@^2.0.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/color-string/-/color-string-2.1.2.tgz#db1dd52414cc9037ada8fa7d936b8e9f6c3366c9" + integrity sha512-RxmjYxbWemV9gKu4zPgiZagUxbH3RQpEIO77XoSSX0ivgABDZ+h8Zuash/EMFLTI4N9QgFPOJ6JQpPZKFxa+dA== dependencies: - color-convert "^1.9.3" - color-string "^1.6.0" + color-name "^2.0.0" -colorspace@1.1.x: - version "1.1.4" +color@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/color/-/color-5.0.2.tgz#712ec894007ab27b37207732d182784e001b4a3d" + integrity sha512-e2hz5BzbUPcYlIRHo8ieAhYgoajrJr+hWoceg6E345TPsATMUKqDgzt8fSXZJJbxfpiPzkWyphz8yn8At7q3fA== dependencies: - color "^3.1.3" - text-hex "1.0.x" + color-convert "^3.0.1" + color-string "^2.0.0" combined-stream@^1.0.8: version "1.0.8" - resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== dependencies: delayed-stream "~1.0.0" commander@^10.0.1: version "10.0.1" - resolved "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz" + resolved "https://registry.yarnpkg.com/commander/-/commander-10.0.1.tgz#881ee46b4f77d1c1dccc5823433aa39b022cbe06" integrity sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug== commander@^2.19.0, commander@^2.20.3: version "2.20.3" - resolved "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== commander@^6.1.0: version "6.2.1" - resolved "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz" + resolved "https://registry.yarnpkg.com/commander/-/commander-6.2.1.tgz#0792eb682dfbc325999bb2b84fddddba110ac73c" integrity sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA== -compressible@^2.0.12: - version "2.0.18" - resolved "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz" - integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg== - dependencies: - mime-db ">= 1.43.0 < 2" - concat-map@0.0.1: version "0.0.1" - resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== concat-stream@^1.5.2: version "1.6.2" - resolved "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== dependencies: buffer-from "^1.0.0" @@ -3192,46 +3272,39 @@ concat-stream@^1.5.2: confbox@^0.1.7, confbox@^0.1.8: version "0.1.8" - resolved "https://registry.npmjs.org/confbox/-/confbox-0.1.8.tgz" + resolved "https://registry.yarnpkg.com/confbox/-/confbox-0.1.8.tgz#820d73d3b3c82d9bd910652c5d4d599ef8ff8b06" integrity sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w== -configstore@^5.0.0: - version "5.0.1" - resolved "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz" - integrity sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA== - dependencies: - dot-prop "^5.2.0" - graceful-fs "^4.1.2" - make-dir "^3.0.0" - unique-string "^2.0.0" - write-file-atomic "^3.0.0" - xdg-basedir "^4.0.0" +confbox@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/confbox/-/confbox-0.2.2.tgz#8652f53961c74d9e081784beed78555974a9c110" + integrity sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ== confusing-browser-globals@^1.0.10: version "1.0.11" - resolved "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz" + resolved "https://registry.yarnpkg.com/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz#ae40e9b57cdd3915408a2805ebd3a5585608dc81" integrity sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA== -consola@^3.2.3, consola@^3.4.0: +consola@^3.2.3, consola@^3.4.0, consola@^3.4.2: version "3.4.2" - resolved "https://registry.npmjs.org/consola/-/consola-3.4.2.tgz" + resolved "https://registry.yarnpkg.com/consola/-/consola-3.4.2.tgz#5af110145397bb67afdab77013fdc34cae590ea7" integrity sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA== content-disposition@0.5.4: version "0.5.4" - resolved "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== dependencies: safe-buffer "5.2.1" content-type@~1.0.4, content-type@~1.0.5: version "1.0.5" - resolved "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== cookie-parser@^1.4.5: version "1.4.7" - resolved "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.4.7.tgz" + resolved "https://registry.yarnpkg.com/cookie-parser/-/cookie-parser-1.4.7.tgz#e2125635dfd766888ffe90d60c286404fa0e7b26" integrity sha512-nGUvgXnotP3BsjiLX2ypbQnWoGUPIIfHQNZkkC668ntrzGWEZVW70HDEB1qnNGMicPje6EttlIgzo51YSwNQGw== dependencies: cookie "0.7.2" @@ -3239,30 +3312,32 @@ cookie-parser@^1.4.5: cookie-signature@1.0.6: version "1.0.6" - resolved "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== cookie@0.7.1: version "0.7.1" - resolved "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.7.1.tgz#2f73c42142d5d5cf71310a74fc4ae61670e5dbc9" integrity sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w== cookie@0.7.2: version "0.7.2" - resolved "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.7.2.tgz#556369c472a2ba910f2979891b526b3436237ed7" integrity sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w== core-js-pure@^3.10.2: - version "3.43.0" + version "3.46.0" + resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.46.0.tgz#9bb80248584c6334bb54cd381b0f41c619ef1b43" + integrity sha512-NMCW30bHNofuhwLhYPt66OLOKTMbOhgTTatKVbaQC3KRHpTCiRIBYvtshr+NBYSnBxwAFhjW/RfJ0XbIjS16rw== core-util-is@~1.0.0: version "1.0.3" - resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== cors@^2.8.5: version "2.8.5" - resolved "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz" + resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29" integrity sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g== dependencies: object-assign "^4" @@ -3270,19 +3345,19 @@ cors@^2.8.5: create-require@^1.1.0: version "1.1.1" - resolved "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz" + resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== cross-fetch@^4.0.0: version "4.1.0" - resolved "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.1.0.tgz" + resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-4.1.0.tgz#8f69355007ee182e47fa692ecbaa37a52e43c3d2" integrity sha512-uKm5PU+MHTootlWEY+mZ4vvXoCn4fLQxT9dSc1sXVMSFkINTJVN8cAQROpwcKm8bJ/c7rgZVIBWzH5T78sNZZw== dependencies: node-fetch "^2.7.0" cross-spawn@^7.0.2, cross-spawn@^7.0.3: version "7.0.6" - resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f" integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== dependencies: path-key "^3.1.0" @@ -3291,32 +3366,22 @@ cross-spawn@^7.0.2, cross-spawn@^7.0.3: crypt@0.0.2: version "0.0.2" - resolved "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz" + resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b" integrity sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow== crypto-js@^4.2.0: version "4.2.0" - resolved "https://registry.npmjs.org/crypto-js/-/crypto-js-4.2.0.tgz" + resolved "https://registry.yarnpkg.com/crypto-js/-/crypto-js-4.2.0.tgz#4d931639ecdfd12ff80e8186dba6af2c2e856631" integrity sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q== -crypto-random-string@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz" - integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== - cssfilter@0.0.10: version "0.0.10" - resolved "https://registry.npmjs.org/cssfilter/-/cssfilter-0.0.10.tgz" + resolved "https://registry.yarnpkg.com/cssfilter/-/cssfilter-0.0.10.tgz#c6d2672632a2e5c83e013e6864a42ce8defd20ae" integrity sha512-FAaLDaplstoRsDR8XGYH51znUN0UY7nMc6Z9/fvE8EXGwvJE9hu7W2vHwx1+bd6gCYnln9nLbzxFTrcO9YQDZw== -damerau-levenshtein@^1.0.8: - version "1.0.8" - resolved "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz" - integrity sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA== - data-view-buffer@^1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz" + resolved "https://registry.yarnpkg.com/data-view-buffer/-/data-view-buffer-1.0.2.tgz#211a03ba95ecaf7798a8c7198d79536211f88570" integrity sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ== dependencies: call-bound "^1.0.3" @@ -3325,7 +3390,7 @@ data-view-buffer@^1.0.2: data-view-byte-length@^1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz" + resolved "https://registry.yarnpkg.com/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz#9e80f7ca52453ce3e93d25a35318767ea7704735" integrity sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ== dependencies: call-bound "^1.0.3" @@ -3334,7 +3399,7 @@ data-view-byte-length@^1.0.2: data-view-byte-offset@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz#068307f9b71ab76dbbe10291389e020856606191" integrity sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ== dependencies: call-bound "^1.0.2" @@ -3343,70 +3408,77 @@ data-view-byte-offset@^1.0.1: dataloader@2.1.0: version "2.1.0" - resolved "https://registry.npmjs.org/dataloader/-/dataloader-2.1.0.tgz" + resolved "https://registry.yarnpkg.com/dataloader/-/dataloader-2.1.0.tgz#c69c538235e85e7ac6c6c444bae8ecabf5de9df7" integrity sha512-qTcEYLen3r7ojZNgVUaRggOI+KM7jrKxXeSHhogh/TWxYMeONEMqY+hmkobiYQozsGIyg9OYVzO4ZIfoB4I0pQ== -debug@^3.2.7: - version "3.2.7" - resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz" - integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== - dependencies: - ms "^2.1.1" - -debug@^4.0.1, debug@^4.1.1, debug@^4.3.1, debug@^4.3.4, debug@4, debug@4.x: - version "4.4.1" - dependencies: - ms "^2.1.3" +date-fns@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-4.1.0.tgz#64b3d83fff5aa80438f5b1a633c2e83b8a1c2d14" + integrity sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg== debug@2.6.9: version "2.6.9" - resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== dependencies: ms "2.0.0" -debug@3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz" - integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== +debug@^3.2.7: + version "3.2.7" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== dependencies: - ms "2.0.0" + ms "^2.1.1" + +debug@^4.0.1, debug@^4.1.1, debug@^4.3.1, debug@^4.3.4: + version "4.4.3" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.3.tgz#c6ae432d9bd9662582fce08709b038c58e9e3d6a" + integrity sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA== + dependencies: + ms "^2.1.3" decamelize@1.2.0: version "1.2.0" - resolved "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== decimal.js@^10.4.3: version "10.6.0" - resolved "https://registry.npmjs.org/decimal.js/-/decimal.js-10.6.0.tgz" + resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.6.0.tgz#e649a43e3ab953a72192ff5983865e509f37ed9a" integrity sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg== dedent@^1.5.3: - version "1.6.0" + version "1.7.0" + resolved "https://registry.yarnpkg.com/dedent/-/dedent-1.7.0.tgz#c1f9445335f0175a96587be245a282ff451446ca" + integrity sha512-HGFtf8yhuhGhqO07SV79tRp+br4MnbdjeVxotpn1QBl30pcLLCQjX5b2295ll0fv8RKDKsmWYrl05usHM9CewQ== deep-is@^0.1.3: version "0.1.4" - resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== +deepmerge-ts@7.1.5: + version "7.1.5" + resolved "https://registry.yarnpkg.com/deepmerge-ts/-/deepmerge-ts-7.1.5.tgz#ff818564007f5c150808d2b7b732cac83aa415ab" + integrity sha512-HOJkrhaYsweh+W+e74Yn7YStZOilkoPb6fycpwNLKzSPtruFs48nYis0zy5yJz1+ktUhHxoRDJ27RQAWLIJVJw== + deepmerge@^4.3.1: version "4.3.1" - resolved "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== define-data-property@^1.0.1, define-data-property@^1.1.4: version "1.1.4" - resolved "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz" + resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== dependencies: es-define-property "^1.0.0" es-errors "^1.3.0" gopd "^1.0.1" -define-properties@^1.1.3, define-properties@^1.2.1: +define-properties@^1.2.1: version "1.2.1" - resolved "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== dependencies: define-data-property "^1.0.1" @@ -3415,54 +3487,42 @@ define-properties@^1.1.3, define-properties@^1.2.1: defu@^6.1.4: version "6.1.4" - resolved "https://registry.npmjs.org/defu/-/defu-6.1.4.tgz" + resolved "https://registry.yarnpkg.com/defu/-/defu-6.1.4.tgz#4e0c9cf9ff68fe5f3d7f2765cc1a012dfdcb0479" integrity sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg== delayed-stream@~1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== -denque@^1.4.1: - version "1.5.1" - resolved "https://registry.npmjs.org/denque/-/denque-1.5.1.tgz" - integrity sha512-XwE+iZ4D6ZUB7mfYRMb5wByE8L74HCn30FBN7sWnXksWc1LO1bPDl67pBR9o/kC4z/xSNAwkMYcGgqDV3BE3Hw== +depd@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" + integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== depd@~1.1.2: version "1.1.2" - resolved "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ== -depd@2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz" - integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== - deprecated-decorator@^0.1.6: version "0.1.6" - resolved "https://registry.npmjs.org/deprecated-decorator/-/deprecated-decorator-0.1.6.tgz" + resolved "https://registry.yarnpkg.com/deprecated-decorator/-/deprecated-decorator-0.1.6.tgz#00966317b7a12fe92f3cc831f7583af329b86c37" integrity sha512-MHidOOnCHGlZDKsI21+mbIIhf4Fff+hhCTB7gtVg4uoIqjcrTZc5v6M+GS2zVI0sV7PqK415rb8XaOSQsQkHOw== destr@^2.0.3: version "2.0.5" - resolved "https://registry.npmjs.org/destr/-/destr-2.0.5.tgz" + resolved "https://registry.yarnpkg.com/destr/-/destr-2.0.5.tgz#7d112ff1b925fb8d2079fac5bdb4a90973b51fdb" integrity sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA== destroy@1.2.0: version "1.2.0" - resolved "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== -dicer@^0.3.0: - version "0.3.1" - resolved "https://registry.npmjs.org/dicer/-/dicer-0.3.1.tgz" - integrity sha512-ObioMtXnmjYs3aRtpIJt9rgQSPCIhKVkFPip+E9GUDyWl8N435znUxK/JfNwGZJ2wnn5JKQ7Ly3vOK5Q5dylGA== - dependencies: - streamsearch "^1.1.0" - dicer@0.2.5: version "0.2.5" - resolved "https://registry.npmjs.org/dicer/-/dicer-0.2.5.tgz" + resolved "https://registry.yarnpkg.com/dicer/-/dicer-0.2.5.tgz#5996c086bb33218c812c090bddc09cd12facb70f" integrity sha512-FDvbtnq7dzlPz0wyYlOExifDEZcu8h+rErEXgfxqmLfRfC/kJidEFh4+effJRO3P0xmfqyPbSMG0LveNRfTKVg== dependencies: readable-stream "1.1.x" @@ -3470,24 +3530,24 @@ dicer@0.2.5: dicer@0.3.0: version "0.3.0" - resolved "https://registry.npmjs.org/dicer/-/dicer-0.3.0.tgz" + resolved "https://registry.yarnpkg.com/dicer/-/dicer-0.3.0.tgz#eacd98b3bfbf92e8ab5c2fdb71aaac44bb06b872" integrity sha512-MdceRRWqltEG2dZqO769g27N/3PXfcKl04VhYnBlo2YhH7zPi88VebsjTKclaOyiuMaGU72hTfw3VkUitGcVCA== dependencies: streamsearch "0.1.2" diff-sequences@^26.6.2: version "26.6.2" - resolved "https://registry.npmjs.org/diff-sequences/-/diff-sequences-26.6.2.tgz" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-26.6.2.tgz#48ba99157de1923412eed41db6b6d4aa9ca7c0b1" integrity sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q== diff@^4.0.1: version "4.0.2" - resolved "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz" + resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== digest-fetch@^1.3.0: version "1.3.0" - resolved "https://registry.npmjs.org/digest-fetch/-/digest-fetch-1.3.0.tgz" + resolved "https://registry.yarnpkg.com/digest-fetch/-/digest-fetch-1.3.0.tgz#898e69264d00012a23cf26e8a3e40320143fc661" integrity sha512-CGJuv6iKNM7QyZlM2T3sPAdZWd/p9zQiRNS9G+9COUCwzWFTs0Xp8NF5iePx7wtvhDykReiRRrSeNb4oMmB8lA== dependencies: base-64 "^0.1.0" @@ -3495,152 +3555,130 @@ digest-fetch@^1.3.0: dir-glob@^3.0.1: version "3.0.1" - resolved "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== dependencies: path-type "^4.0.0" discontinuous-range@1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/discontinuous-range/-/discontinuous-range-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/discontinuous-range/-/discontinuous-range-1.0.0.tgz#e38331f0844bba49b9a9cb71c771585aab1bc65a" integrity sha512-c68LpLbO+7kP/b1Hr1qs8/BJ09F5khZGTxqxZuhzxpmwJKOgRFHJWIb9/KmqnqHhLdO55aOxFH/EGBvUQbL/RQ== doctrine@^2.1.0: version "2.1.0" - resolved "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== dependencies: esutils "^2.0.2" doctrine@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== dependencies: esutils "^2.0.2" -dot-prop@^5.2.0: - version "5.3.0" - resolved "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz" - integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== - dependencies: - is-obj "^2.0.0" - dotenv@*: - version "16.5.0" + version "17.2.3" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-17.2.3.tgz#ad995d6997f639b11065f419a22fabf567cdb9a2" + integrity sha512-JVUnt+DUIzu87TABbhPmNfVdBDt18BLOWjMUFJMSi/Qqg7NTYtabbvSNJGOJ7afbRuv9D/lngizHtP7QyLQ+9w== -dotenv@^16.4.5: +dotenv@^16.4.5, dotenv@^16.6.1: version "16.6.1" - resolved "https://registry.npmjs.org/dotenv/-/dotenv-16.6.1.tgz" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.6.1.tgz#773f0e69527a8315c7285d5ee73c4459d20a8020" integrity sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow== dotenv@^8.2.0: version "8.6.0" - resolved "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.6.0.tgz#061af664d19f7f4d8fc6e4ff9b584ce237adcb8b" integrity sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g== dottie@^2.0.6: version "2.0.6" - resolved "https://registry.npmjs.org/dottie/-/dottie-2.0.6.tgz" + resolved "https://registry.yarnpkg.com/dottie/-/dottie-2.0.6.tgz#34564ebfc6ec5e5772272d466424ad5b696484d4" integrity sha512-iGCHkfUc5kFekGiqhe8B/mdaurD+lakO9txNnTvKtA6PISrw86LgqHvRzWYPyoE2Ph5aMIrCw9/uko6XHTKCwA== dunder-proto@^1.0.0, dunder-proto@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/dunder-proto/-/dunder-proto-1.0.1.tgz#d7ae667e1dc83482f8b70fd0f6eefc50da30f58a" integrity sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A== dependencies: call-bind-apply-helpers "^1.0.1" es-errors "^1.3.0" gopd "^1.2.0" -duplexify@^4.0.0, duplexify@^4.1.1: - version "4.1.3" - resolved "https://registry.npmjs.org/duplexify/-/duplexify-4.1.3.tgz" - integrity sha512-M3BmBhwJRZsSx38lZyhE53Csddgzl5R7xGJNk7CVddZD6CcmwMCH8J+7AprIrQKH7TonKxaCjcv27Qmf+sQ+oA== - dependencies: - end-of-stream "^1.4.1" - inherits "^2.0.3" - readable-stream "^3.1.1" - stream-shift "^1.0.2" - ebnf@^1.9.1: version "1.9.1" - resolved "https://registry.npmjs.org/ebnf/-/ebnf-1.9.1.tgz" + resolved "https://registry.yarnpkg.com/ebnf/-/ebnf-1.9.1.tgz#64c25d8208ec0d221ec11c3c5e8094015131a9d3" integrity sha512-uW2UKSsuty9ANJ3YByIQE4ANkD8nqUPO7r6Fwcc1ADKPe9FRdcPpMl3VEput4JSvKBJ4J86npIC2MLP0pYkCuw== -ecdsa-sig-formatter@^1.0.11, ecdsa-sig-formatter@1.0.11: +ecdsa-sig-formatter@1.0.11: version "1.0.11" - resolved "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz" + resolved "https://registry.yarnpkg.com/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz#ae0f0fa2d85045ef14a817daa3ce9acd0489e5bf" integrity sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ== dependencies: safe-buffer "^5.0.1" ee-first@1.1.1: version "1.1.1" - resolved "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== +effect@3.18.4: + version "3.18.4" + resolved "https://registry.yarnpkg.com/effect/-/effect-3.18.4.tgz#e241fde5cc090608c51c5e29e2da357bb5d0e815" + integrity sha512-b1LXQJLe9D11wfnOKAk3PKxuqYshQ0Heez+y5pnkd3jLj1yx9QhM72zZ9uUrOQyNvrs2GZZd/3maL0ZV18YuDA== + dependencies: + "@standard-schema/spec" "^1.0.0" + fast-check "^3.23.1" + emittery@^0.13.0: version "0.13.1" - resolved "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz" + resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.13.1.tgz#c04b8c3457490e0847ae51fced3af52d338e3dad" integrity sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ== emoji-regex@^10.3.0: - version "10.4.0" + version "10.6.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-10.6.0.tgz#bf3d6e8f7f8fd22a65d9703475bc0147357a6b0d" + integrity sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A== emoji-regex@^8.0.0: version "8.0.0" - resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== -emoji-regex@^9.2.2: - version "9.2.2" - resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz" - integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== +empathic@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/empathic/-/empathic-2.0.0.tgz#71d3c2b94fad49532ef98a6c34be0386659f6131" + integrity sha512-i6UzDscO/XfAcNYD75CfICkmfLedpyPDdozrLMmQc5ORaQcdMoc21OnlEylMIqI7U8eniKrPMxxtj8k0vhmJhA== enabled@2.0.x: version "2.0.0" - resolved "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz" + resolved "https://registry.yarnpkg.com/enabled/-/enabled-2.0.0.tgz#f9dd92ec2d6f4bbc0d5d1e64e21d61cd4665e7c2" integrity sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ== encodeurl@~1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== encodeurl@~2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-2.0.0.tgz#7b8ea898077d7e409d3ac45474ea38eaf0857a58" integrity sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg== -end-of-stream@^1.1.0, end-of-stream@^1.4.1: - version "1.4.5" - resolved "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz" - integrity sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg== - dependencies: - once "^1.4.0" - enquirer@^2.3.5: version "2.4.1" - resolved "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz" + resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.4.1.tgz#93334b3fbd74fc7097b224ab4a8fb7e40bf4ae56" integrity sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ== dependencies: ansi-colors "^4.1.1" strip-ansi "^6.0.1" -ent@^2.2.0: - version "2.2.2" - resolved "https://registry.npmjs.org/ent/-/ent-2.2.2.tgz" - integrity sha512-kKvD1tO6BM+oK9HzCPpUdRb4vKFQY/FPTFmurMvh6LlN68VMrdj77w8yp51/kDbpkFOS9J8w5W6zIzgM2H8/hw== - dependencies: - call-bound "^1.0.3" - es-errors "^1.3.0" - punycode "^1.4.1" - safe-regex-test "^1.1.0" - -es-abstract@^1.17.5, es-abstract@^1.23.2, es-abstract@^1.23.3, es-abstract@^1.23.5, es-abstract@^1.23.6, es-abstract@^1.23.9, es-abstract@^1.24.0: +es-abstract@^1.23.2, es-abstract@^1.23.5, es-abstract@^1.23.9, es-abstract@^1.24.0: version "1.24.0" - resolved "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.0.tgz" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.24.0.tgz#c44732d2beb0acc1ed60df840869e3106e7af328" integrity sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg== dependencies: array-buffer-byte-length "^1.0.2" @@ -3700,51 +3738,29 @@ es-abstract@^1.17.5, es-abstract@^1.23.2, es-abstract@^1.23.3, es-abstract@^1.23 es-array-method-boxes-properly@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz#873f3e84418de4ee19c5be752990b2e44718d09e" integrity sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA== es-define-property@^1.0.0, es-define-property@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.1.tgz#983eb2f9a6724e9303f61addf011c72e09e0b0fa" integrity sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g== es-errors@^1.3.0: version "1.3.0" - resolved "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz" + resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== -es-iterator-helpers@^1.2.1: - version "1.2.1" - resolved "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.2.1.tgz" - integrity sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w== - dependencies: - call-bind "^1.0.8" - call-bound "^1.0.3" - define-properties "^1.2.1" - es-abstract "^1.23.6" - es-errors "^1.3.0" - es-set-tostringtag "^2.0.3" - function-bind "^1.1.2" - get-intrinsic "^1.2.6" - globalthis "^1.0.4" - gopd "^1.2.0" - has-property-descriptors "^1.0.2" - has-proto "^1.2.0" - has-symbols "^1.1.0" - internal-slot "^1.1.0" - iterator.prototype "^1.1.4" - safe-array-concat "^1.1.3" - es-object-atoms@^1.0.0, es-object-atoms@^1.1.1: version "1.1.1" - resolved "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz" + resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz#1c4f2c4837327597ce69d2ca190a7fdd172338c1" integrity sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA== dependencies: es-errors "^1.3.0" -es-set-tostringtag@^2.0.3, es-set-tostringtag@^2.1.0: +es-set-tostringtag@^2.1.0: version "2.1.0" - resolved "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz" + resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz#f31dbbe0c183b00a6d26eb6325c810c0fd18bd4d" integrity sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA== dependencies: es-errors "^1.3.0" @@ -3754,14 +3770,14 @@ es-set-tostringtag@^2.0.3, es-set-tostringtag@^2.1.0: es-shim-unscopables@^1.0.2, es-shim-unscopables@^1.1.0: version "1.1.0" - resolved "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz" + resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz#438df35520dac5d105f3943d927549ea3b00f4b5" integrity sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw== dependencies: hasown "^2.0.2" es-to-primitive@^1.3.0: version "1.3.0" - resolved "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.3.0.tgz#96c89c82cc49fd8794a24835ba3e1ff87f214e18" integrity sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g== dependencies: is-callable "^1.2.7" @@ -3769,58 +3785,60 @@ es-to-primitive@^1.3.0: is-symbol "^1.0.4" esbuild@~0.25.0: - version "0.25.6" + version "0.25.12" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.25.12.tgz#97a1d041f4ab00c2fce2f838d2b9969a2d2a97a5" + integrity sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg== optionalDependencies: - "@esbuild/aix-ppc64" "0.25.6" - "@esbuild/android-arm" "0.25.6" - "@esbuild/android-arm64" "0.25.6" - "@esbuild/android-x64" "0.25.6" - "@esbuild/darwin-arm64" "0.25.6" - "@esbuild/darwin-x64" "0.25.6" - "@esbuild/freebsd-arm64" "0.25.6" - "@esbuild/freebsd-x64" "0.25.6" - "@esbuild/linux-arm" "0.25.6" - "@esbuild/linux-arm64" "0.25.6" - "@esbuild/linux-ia32" "0.25.6" - "@esbuild/linux-loong64" "0.25.6" - "@esbuild/linux-mips64el" "0.25.6" - "@esbuild/linux-ppc64" "0.25.6" - "@esbuild/linux-riscv64" "0.25.6" - "@esbuild/linux-s390x" "0.25.6" - "@esbuild/linux-x64" "0.25.6" - "@esbuild/netbsd-arm64" "0.25.6" - "@esbuild/netbsd-x64" "0.25.6" - "@esbuild/openbsd-arm64" "0.25.6" - "@esbuild/openbsd-x64" "0.25.6" - "@esbuild/openharmony-arm64" "0.25.6" - "@esbuild/sunos-x64" "0.25.6" - "@esbuild/win32-arm64" "0.25.6" - "@esbuild/win32-ia32" "0.25.6" - "@esbuild/win32-x64" "0.25.6" + "@esbuild/aix-ppc64" "0.25.12" + "@esbuild/android-arm" "0.25.12" + "@esbuild/android-arm64" "0.25.12" + "@esbuild/android-x64" "0.25.12" + "@esbuild/darwin-arm64" "0.25.12" + "@esbuild/darwin-x64" "0.25.12" + "@esbuild/freebsd-arm64" "0.25.12" + "@esbuild/freebsd-x64" "0.25.12" + "@esbuild/linux-arm" "0.25.12" + "@esbuild/linux-arm64" "0.25.12" + "@esbuild/linux-ia32" "0.25.12" + "@esbuild/linux-loong64" "0.25.12" + "@esbuild/linux-mips64el" "0.25.12" + "@esbuild/linux-ppc64" "0.25.12" + "@esbuild/linux-riscv64" "0.25.12" + "@esbuild/linux-s390x" "0.25.12" + "@esbuild/linux-x64" "0.25.12" + "@esbuild/netbsd-arm64" "0.25.12" + "@esbuild/netbsd-x64" "0.25.12" + "@esbuild/openbsd-arm64" "0.25.12" + "@esbuild/openbsd-x64" "0.25.12" + "@esbuild/openharmony-arm64" "0.25.12" + "@esbuild/sunos-x64" "0.25.12" + "@esbuild/win32-arm64" "0.25.12" + "@esbuild/win32-ia32" "0.25.12" + "@esbuild/win32-x64" "0.25.12" escalade@^3.1.1: version "3.2.0" - resolved "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5" integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== escape-html@~1.0.3: version "1.0.3" - resolved "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== escape-string-regexp@^1.0.5: version "1.0.5" - resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== escape-string-regexp@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== eslint-config-airbnb-base@^14.2.0, eslint-config-airbnb-base@^14.2.1: version "14.2.1" - resolved "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-14.2.1.tgz" + resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-14.2.1.tgz#8a2eb38455dc5a312550193b319cdaeef042cd1e" integrity sha512-GOrQyDtVEc1Xy20U7vsB2yAoB4nBlfH5HZJeatRXHleO+OS5Ot+MWij4Dpltw4/DyIkqUfqz1epfhVR5XWWQPA== dependencies: confusing-browser-globals "^1.0.10" @@ -3829,7 +3847,7 @@ eslint-config-airbnb-base@^14.2.0, eslint-config-airbnb-base@^14.2.1: eslint-config-airbnb-typescript@^12.3.1: version "12.3.1" - resolved "https://registry.npmjs.org/eslint-config-airbnb-typescript/-/eslint-config-airbnb-typescript-12.3.1.tgz" + resolved "https://registry.yarnpkg.com/eslint-config-airbnb-typescript/-/eslint-config-airbnb-typescript-12.3.1.tgz#83ab40d76402c208eb08516260d1d6fac8f8acbc" integrity sha512-ql/Pe6/hppYuRp4m3iPaHJqkBB7dgeEmGPQ6X0UNmrQOfTF+dXw29/ZjU2kQ6RDoLxaxOA+Xqv07Vbef6oVTWw== dependencies: "@typescript-eslint/parser" "^4.4.1" @@ -3838,7 +3856,7 @@ eslint-config-airbnb-typescript@^12.3.1: eslint-config-airbnb@^18.2.0: version "18.2.1" - resolved "https://registry.npmjs.org/eslint-config-airbnb/-/eslint-config-airbnb-18.2.1.tgz" + resolved "https://registry.yarnpkg.com/eslint-config-airbnb/-/eslint-config-airbnb-18.2.1.tgz#b7fe2b42f9f8173e825b73c8014b592e449c98d9" integrity sha512-glZNDEZ36VdlZWoxn/bUR1r/sdFKPd1mHPbqUtkctgNG4yT2DLLtJ3D+yCV+jzZCc2V1nBVkmdknOJBZ5Hc0fg== dependencies: eslint-config-airbnb-base "^14.2.1" @@ -3846,11 +3864,13 @@ eslint-config-airbnb@^18.2.0: object.entries "^1.1.2" eslint-config-prettier@^8.0.0: - version "8.10.0" + version "8.10.2" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.10.2.tgz#0642e53625ebc62c31c24726b0f050df6bd97a2e" + integrity sha512-/IGJ6+Dka158JnP5n5YFMOszjDWrXggGz1LaK/guZq9vZTmniaKlHcsscvkAhn9y4U+BU3JuUdYvtAMcv30y4A== eslint-import-resolver-node@^0.3.9: version "0.3.9" - resolved "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz#d4eaac52b8a2e7c3cd1903eb00f7e053356118ac" integrity sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g== dependencies: debug "^3.2.7" @@ -3859,14 +3879,14 @@ eslint-import-resolver-node@^0.3.9: eslint-module-utils@^2.12.1: version "2.12.1" - resolved "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.1.tgz" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.12.1.tgz#f76d3220bfb83c057651359295ab5854eaad75ff" integrity sha512-L8jSWTze7K2mTg0vos/RuLRS5soomksDPoJLXIslC7c8Wmut3bx7CPpJijDcBZtxQ5lrbUdM+s0OlNbz0DCDNw== dependencies: debug "^3.2.7" eslint-plugin-import@^2.22.1: version "2.32.0" - resolved "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.32.0.tgz" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.32.0.tgz#602b55faa6e4caeaa5e970c198b5c00a37708980" integrity sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA== dependencies: "@rtsao/scc" "^1.1.0" @@ -3889,66 +3909,16 @@ eslint-plugin-import@^2.22.1: string.prototype.trimend "^1.0.9" tsconfig-paths "^3.15.0" -eslint-plugin-jsx-a11y@^6.4.1: - version "6.10.2" - resolved "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.10.2.tgz" - integrity sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q== - dependencies: - aria-query "^5.3.2" - array-includes "^3.1.8" - array.prototype.flatmap "^1.3.2" - ast-types-flow "^0.0.8" - axe-core "^4.10.0" - axobject-query "^4.1.0" - damerau-levenshtein "^1.0.8" - emoji-regex "^9.2.2" - hasown "^2.0.2" - jsx-ast-utils "^3.3.5" - language-tags "^1.0.9" - minimatch "^3.1.2" - object.fromentries "^2.0.8" - safe-regex-test "^1.0.3" - string.prototype.includes "^2.0.1" - eslint-plugin-prettier@^3.3.1: version "3.4.1" - resolved "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.4.1.tgz" + resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-3.4.1.tgz#e9ddb200efb6f3d05ffe83b1665a716af4a387e5" integrity sha512-htg25EUYUeIhKHXjOinK4BgCcDwtLHjqaxCDsMy5nbnUMkKFvIhMVCp+5GFUXQ4Nr8lBsPqtGAqBenbpFqAA2g== dependencies: prettier-linter-helpers "^1.0.0" -"eslint-plugin-react-hooks@^4 || ^3 || ^2.3.0 || ^1.7.0": - version "4.6.2" - resolved "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz" - integrity sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ== - -eslint-plugin-react@^7.21.5: - version "7.37.5" - resolved "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.5.tgz" - integrity sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA== - dependencies: - array-includes "^3.1.8" - array.prototype.findlast "^1.2.5" - array.prototype.flatmap "^1.3.3" - array.prototype.tosorted "^1.1.4" - doctrine "^2.1.0" - es-iterator-helpers "^1.2.1" - estraverse "^5.3.0" - hasown "^2.0.2" - jsx-ast-utils "^2.4.1 || ^3.0.0" - minimatch "^3.1.2" - object.entries "^1.1.9" - object.fromentries "^2.0.8" - object.values "^1.2.1" - prop-types "^15.8.1" - resolve "^2.0.0-next.5" - semver "^6.3.1" - string.prototype.matchall "^4.0.12" - string.prototype.repeat "^1.0.0" - eslint-scope@^5.1.1: version "5.1.1" - resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== dependencies: esrecurse "^4.3.0" @@ -3956,34 +3926,29 @@ eslint-scope@^5.1.1: eslint-utils@^2.1.0: version "2.1.0" - resolved "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== dependencies: eslint-visitor-keys "^1.1.0" eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0: version "1.3.0" - resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== eslint-visitor-keys@^2.0.0: version "2.1.0" - resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== -eslint-visitor-keys@^3.4.1: - version "3.4.3" - resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz" - integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== - -eslint-visitor-keys@^3.4.3: +eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3: version "3.4.3" - resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== -"eslint@^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9", "eslint@^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9", "eslint@^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7", "eslint@^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0", "eslint@^5.0.0 || ^6.0.0 || ^7.0.0", "eslint@^5.16.0 || ^6.8.0 || ^7.2.0", "eslint@^6.0.0 || ^7.0.0 || >=8.0.0", "eslint@^7.0.0 || ^8.0.0", eslint@^7.20.0, eslint@>=5.0.0, eslint@>=7.0.0: +eslint@^7.20.0: version "7.32.0" - resolved "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.32.0.tgz#c6d328a14be3fb08c8d1d21e12c02fdb7a2a812d" integrity sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA== dependencies: "@babel/code-frame" "7.12.11" @@ -4029,7 +3994,7 @@ eslint-visitor-keys@^3.4.3: espree@^7.3.0, espree@^7.3.1: version "7.3.1" - resolved "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz" + resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.1.tgz#f2df330b752c6f55019f8bd89b7660039c1bbbb6" integrity sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g== dependencies: acorn "^7.4.0" @@ -4038,66 +4003,66 @@ espree@^7.3.0, espree@^7.3.1: esprima@^4.0.0: version "4.0.1" - resolved "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== esquery@^1.4.0: version "1.6.0" - resolved "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.6.0.tgz#91419234f804d852a82dceec3e16cdc22cf9dae7" integrity sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg== dependencies: estraverse "^5.1.0" esrecurse@^4.3.0: version "4.3.0" - resolved "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== dependencies: estraverse "^5.2.0" estraverse@^4.1.1: version "4.3.0" - resolved "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== -estraverse@^5.1.0, estraverse@^5.2.0, estraverse@^5.3.0: +estraverse@^5.1.0, estraverse@^5.2.0: version "5.3.0" - resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== esutils@^2.0.2: version "2.0.3" - resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== etag@~1.8.1: version "1.8.1" - resolved "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== event-target-shim@^5.0.0: version "5.0.1" - resolved "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz" + resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== eventemitter3@^3.1.0: version "3.1.2" - resolved "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.2.tgz" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.2.tgz#2d3d48f9c346698fce83a85d7d664e98535df6e7" integrity sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q== eventemitter3@^4.0.4: version "4.0.7" - resolved "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== events@^3.3.0: version "3.3.0" - resolved "https://registry.npmjs.org/events/-/events-3.3.0.tgz" + resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== execa@^8.0.1: version "8.0.1" - resolved "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz" + resolved "https://registry.yarnpkg.com/execa/-/execa-8.0.1.tgz#51f6a5943b580f963c3ca9c6321796db8cc39b8c" integrity sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg== dependencies: cross-spawn "^7.0.3" @@ -4112,12 +4077,12 @@ execa@^8.0.1: exit-hook@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/exit-hook/-/exit-hook-4.0.0.tgz" + resolved "https://registry.yarnpkg.com/exit-hook/-/exit-hook-4.0.0.tgz#c1e16ebd03d3166f837b1502dac755bb5c460d58" integrity sha512-Fqs7ChZm72y40wKjOFXBKg7nJZvQJmewP5/7LtePDdnah/+FH9Hp5sgMujSCMPXlxOAW2//1jrW9pnsY7o20vQ== -express@^4.0.0, express@^4.17.1, "express@>=4.0.0 || >=5.0.0-beta": +express@^4.0.0, express@^4.17.1: version "4.21.2" - resolved "https://registry.npmjs.org/express/-/express-4.21.2.tgz" + resolved "https://registry.yarnpkg.com/express/-/express-4.21.2.tgz#cf250e48362174ead6cea4a566abef0162c1ec32" integrity sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA== dependencies: accepts "~1.3.8" @@ -4152,38 +4117,45 @@ express@^4.0.0, express@^4.17.1, "express@>=4.0.0 || >=5.0.0-beta": utils-merge "1.0.1" vary "~1.1.2" -extend@^3.0.2: - version "3.0.2" - resolved "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz" - integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== +exsolve@^1.0.7: + version "1.0.8" + resolved "https://registry.yarnpkg.com/exsolve/-/exsolve-1.0.8.tgz#7f5e34da61cd1116deda5136e62292c096f50613" + integrity sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA== external-editor@^3.1.0: version "3.1.0" - resolved "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz" + resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== dependencies: chardet "^0.7.0" iconv-lite "^0.4.24" tmp "^0.0.33" +fast-check@^3.23.1: + version "3.23.2" + resolved "https://registry.yarnpkg.com/fast-check/-/fast-check-3.23.2.tgz#0129f1eb7e4f500f58e8290edc83c670e4a574a2" + integrity sha512-h5+1OzzfCC3Ef7VbtKdcv7zsstUQwUDlYpUTvjeUsJAssPgLn7QzbboPtL5ro04Mq0rPOsMzl7q5hIbRs2wD1A== + dependencies: + pure-rand "^6.1.0" + fast-copy@^3.0.2: version "3.0.2" - resolved "https://registry.npmjs.org/fast-copy/-/fast-copy-3.0.2.tgz" + resolved "https://registry.yarnpkg.com/fast-copy/-/fast-copy-3.0.2.tgz#59c68f59ccbcac82050ba992e0d5c389097c9d35" integrity sha512-dl0O9Vhju8IrcLndv2eU4ldt1ftXMqqfgN4H1cpmGV7P6jeB9FwpN9a2c8DPGE1Ys88rNUJVYDHq73CGAGOPfQ== fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" - resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== fast-diff@^1.1.2: version "1.3.0" - resolved "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz" + resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.3.0.tgz#ece407fa550a64d638536cd727e129c61616e0f0" integrity sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw== fast-glob@^3.2.9, fast-glob@^3.3.2: version "3.3.3" - resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.3.tgz#d06d585ce8dba90a16b0505c543c3ccfb3aeb818" integrity sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg== dependencies: "@nodelib/fs.stat" "^2.0.2" @@ -4194,49 +4166,41 @@ fast-glob@^3.2.9, fast-glob@^3.3.2: fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0: version "2.1.0" - resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== fast-levenshtein@^2.0.6: version "2.0.6" - resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== -fast-text-encoding@^1.0.0, fast-text-encoding@^1.0.3: - version "1.0.6" - resolved "https://registry.npmjs.org/fast-text-encoding/-/fast-text-encoding-1.0.6.tgz" - integrity sha512-VhXlQgj9ioXCqGstD37E/HBeqEGV/qOD/kmbVG8h5xKBYvM1L3lR1Zn4555cQ8GkYbJa8aJSipLPndE1k6zK2w== - fast-uri@^3.0.1: - version "3.0.6" + version "3.1.0" + resolved "https://registry.yarnpkg.com/fast-uri/-/fast-uri-3.1.0.tgz#66eecff6c764c0df9b762e62ca7edcfb53b4edfa" + integrity sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA== -fast-xml-parser@4.4.1: - version "4.4.1" +fast-xml-parser@5.2.5: + version "5.2.5" + resolved "https://registry.yarnpkg.com/fast-xml-parser/-/fast-xml-parser-5.2.5.tgz#4809fdfb1310494e341098c25cb1341a01a9144a" + integrity sha512-pfX9uG9Ki0yekDHx2SiuRIyFdyAr1kMIMitPvb0YBo8SUfKvia7w7FIyd/l6av85pFYRhZscS75MwMnbvY+hcQ== dependencies: - strnum "^1.0.5" + strnum "^2.1.0" fastq@^1.6.0: version "1.19.1" - resolved "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.19.1.tgz#d50eaba803c8846a883c16492821ebcd2cda55f5" integrity sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ== dependencies: reusify "^1.0.4" -faye-websocket@0.11.4: - version "0.11.4" - resolved "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz" - integrity sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g== - dependencies: - websocket-driver ">=0.5.1" - fecha@^4.2.0: version "4.2.3" - resolved "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz" + resolved "https://registry.yarnpkg.com/fecha/-/fecha-4.2.3.tgz#4d9ccdbc61e8629b259fdca67e65891448d569fd" integrity sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw== fictional@^3.0.1: version "3.0.1" - resolved "https://registry.npmjs.org/fictional/-/fictional-3.0.1.tgz" + resolved "https://registry.yarnpkg.com/fictional/-/fictional-3.0.1.tgz#ef60f8352453e7c91a7e26c86d319654f4519e77" integrity sha512-0JUaxdMWoyj/Udv4ourUzXgfu7fVdanGGYLFz5aWecPhhKpxoBBBxsfNowOKH4cuYgEFia65OY3spsYKkHe2ew== dependencies: decimal.js "^10.4.3" @@ -4246,21 +4210,21 @@ fictional@^3.0.1: file-entry-cache@^6.0.1: version "6.0.1" - resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== dependencies: flat-cache "^3.0.4" fill-range@^7.1.1: version "7.1.1" - resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== dependencies: to-regex-range "^5.0.1" finalhandler@1.3.1: version "1.3.1" - resolved "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.3.1.tgz#0c575f1d1d324ddd1da35ad7ece3df7d19088019" integrity sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ== dependencies: debug "2.6.9" @@ -4273,32 +4237,16 @@ finalhandler@1.3.1: find-up@^7.0.0: version "7.0.0" - resolved "https://registry.npmjs.org/find-up/-/find-up-7.0.0.tgz" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-7.0.0.tgz#e8dec1455f74f78d888ad65bf7ca13dd2b4e66fb" integrity sha512-YyZM99iHrqLKjmt4LJDj58KI+fYyufRLBSYcqycxf//KpBk9FoewoGX0450m9nB44qrZnovzC2oeP5hUibxc/g== dependencies: locate-path "^7.2.0" path-exists "^5.0.0" unicorn-magic "^0.1.0" -firebase-admin@^9.5.0: - version "9.12.0" - resolved "https://registry.npmjs.org/firebase-admin/-/firebase-admin-9.12.0.tgz" - integrity sha512-AtA7OH5RbIFGoc0gZOQgaYC6cdjdhZv4w3XgWoupkPKO1HY+0GzixOuXDa75kFeoVyhIyo4PkLg/GAC1dC1P6w== - dependencies: - "@firebase/database-compat" "^0.1.1" - "@firebase/database-types" "^0.7.2" - "@types/node" ">=12.12.47" - dicer "^0.3.0" - jsonwebtoken "^8.5.1" - jwks-rsa "^2.0.2" - node-forge "^0.10.0" - optionalDependencies: - "@google-cloud/firestore" "^4.5.0" - "@google-cloud/storage" "^5.3.0" - flat-cache@^3.0.4: version "3.2.0" - resolved "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.2.0.tgz#2c0c2d5040c99b1632771a9d105725c0115363ee" integrity sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw== dependencies: flatted "^3.2.9" @@ -4307,33 +4255,35 @@ flat-cache@^3.0.4: flatted@^3.2.9: version "3.3.3" - resolved "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.3.tgz#67c8fad95454a7c7abebf74bb78ee74a44023358" integrity sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg== fn.name@1.x.x: version "1.1.0" - resolved "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz" + resolved "https://registry.yarnpkg.com/fn.name/-/fn.name-1.1.0.tgz#26cad8017967aea8731bc42961d04a3d5988accc" integrity sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw== fnv-plus@^1.3.1: version "1.3.1" - resolved "https://registry.npmjs.org/fnv-plus/-/fnv-plus-1.3.1.tgz" + resolved "https://registry.yarnpkg.com/fnv-plus/-/fnv-plus-1.3.1.tgz#c34cb4572565434acb08ba257e4044ce2b006d67" integrity sha512-Gz1EvfOneuFfk4yG458dJ3TLJ7gV19q3OM/vVvvHf7eT02Hm1DleB4edsia6ahbKgAYxO9gvyQ1ioWZR+a00Yw== for-each@^0.3.3, for-each@^0.3.5: version "0.3.5" - resolved "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz" + resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.5.tgz#d650688027826920feeb0af747ee7b9421a41d47" integrity sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg== dependencies: is-callable "^1.2.7" form-data-encoder@1.7.2: version "1.7.2" - resolved "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-1.7.2.tgz" + resolved "https://registry.yarnpkg.com/form-data-encoder/-/form-data-encoder-1.7.2.tgz#1f1ae3dccf58ed4690b86d87e4f57c654fbab040" integrity sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A== -form-data@^4.0.0: - version "4.0.3" +form-data@^4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.4.tgz#784cdcce0669a9d68e94d11ac4eea98088edd2c4" + integrity sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow== dependencies: asynckit "^0.4.0" combined-stream "^1.0.8" @@ -4343,7 +4293,7 @@ form-data@^4.0.0: formdata-node@^4.3.2: version "4.4.1" - resolved "https://registry.npmjs.org/formdata-node/-/formdata-node-4.4.1.tgz" + resolved "https://registry.yarnpkg.com/formdata-node/-/formdata-node-4.4.1.tgz#23f6a5cb9cb55315912cbec4ff7b0f59bbd191e2" integrity sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ== dependencies: node-domexception "1.0.0" @@ -4351,40 +4301,32 @@ formdata-node@^4.3.2: forwarded@0.2.0: version "0.2.0" - resolved "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz" + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== fresh@0.5.2: version "0.5.2" - resolved "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== -fs-capacitor@^2.0.4: - version "2.0.4" - resolved "https://registry.npmjs.org/fs-capacitor/-/fs-capacitor-2.0.4.tgz" - integrity sha512-8S4f4WsCryNw2mJJchi46YgB6CR5Ze+4L1h8ewl9tEpL4SJ3ZO+c/bS4BWhB8bK+O3TMqhuZarTitd0S0eh2pA== - -fs-capacitor@^6.2.0: +fs-capacitor@^2.0.4, fs-capacitor@^6.1.0, fs-capacitor@^6.2.0, fs-capacitor@^8.0.0: version "6.2.0" - resolved "https://registry.npmjs.org/fs-capacitor/-/fs-capacitor-6.2.0.tgz" + resolved "https://registry.yarnpkg.com/fs-capacitor/-/fs-capacitor-6.2.0.tgz#fa79ac6576629163cb84561995602d8999afb7f5" integrity sha512-nKcE1UduoSKX27NSZlg879LdQc94OtbOsEmKMN2MBNudXREvijRKx2GEBsTMTfws+BrbkJoEuynbGSVRSpauvw== -fs-capacitor@^8.0.0: - version "8.0.0" - resolved "https://registry.npmjs.org/fs-capacitor/-/fs-capacitor-8.0.0.tgz" - integrity sha512-+Lk6iSKajdGw+7XYxUkwIzreJ2G1JFlYOdnKJv5PzwFLVsoJYBpCuS7WPIUSNT1IbQaEWT1nhYU63Ud03DyzLA== - -fs-extra@^11.2.0, fs-extra@~11.3.0: - version "11.3.0" +fs-extra@11.1.1: + version "11.1.1" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.1.1.tgz#da69f7c39f3b002378b0954bb6ae7efdc0876e2d" + integrity sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ== dependencies: graceful-fs "^4.2.0" jsonfile "^6.0.1" universalify "^2.0.0" -fs-extra@11.1.1: - version "11.1.1" - resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz" - integrity sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ== +fs-extra@^11.2.0, fs-extra@~11.3.0: + version "11.3.2" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.3.2.tgz#c838aeddc6f4a8c74dd15f85e11fe5511bfe02a4" + integrity sha512-Xr9F6z6up6Ws+NjzMCZc6WXg2YFRlrLP9NQDO3VQrWrfiojdhS56TzueT88ze0uBdCTwEIhQ3ptnmKeWGFAe0A== dependencies: graceful-fs "^4.2.0" jsonfile "^6.0.1" @@ -4392,29 +4334,29 @@ fs-extra@11.1.1: fs-minipass@^2.0.0: version "2.1.0" - resolved "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== dependencies: minipass "^3.0.0" fs.realpath@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== fsevents@~2.3.2, fsevents@~2.3.3: version "2.3.3" - resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== function-bind@^1.1.2: version "1.1.2" - resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== function.prototype.name@^1.1.6, function.prototype.name@^1.1.8: version "1.1.8" - resolved "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz" + resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.8.tgz#e68e1df7b259a5c949eeef95cdbde53edffabb78" integrity sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q== dependencies: call-bind "^1.0.8" @@ -4426,62 +4368,32 @@ function.prototype.name@^1.1.6, function.prototype.name@^1.1.8: functional-red-black-tree@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" integrity sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g== functions-have-names@^1.2.3: version "1.2.3" - resolved "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz" + resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== -gaxios@^4.0.0: - version "4.3.3" - resolved "https://registry.npmjs.org/gaxios/-/gaxios-4.3.3.tgz" - integrity sha512-gSaYYIO1Y3wUtdfHmjDUZ8LWaxJQpiavzbF5Kq53akSzvmVg0RfyOcFDbO1KJ/KCGRFz2qG+lS81F0nkr7cRJA== - dependencies: - abort-controller "^3.0.0" - extend "^3.0.2" - https-proxy-agent "^5.0.0" - is-stream "^2.0.0" - node-fetch "^2.6.7" - -gaxios@^5.0.0: - version "5.1.3" - resolved "https://registry.npmjs.org/gaxios/-/gaxios-5.1.3.tgz" - integrity sha512-95hVgBRgEIRQQQHIbnxBXeHbW4TqFk4ZDJW7wmVtvYar72FdhRIo1UGOLS2eRAKCPEdPBWu+M7+A33D9CdX9rA== - dependencies: - extend "^3.0.2" - https-proxy-agent "^5.0.0" - is-stream "^2.0.0" - node-fetch "^2.6.9" - -gcp-metadata@^4.2.0: - version "4.3.1" - resolved "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-4.3.1.tgz" - integrity sha512-x850LS5N7V1F3UcV7PoupzGsyD6iVwTVvsh3tbXfkctZnBnjW5yu5z1/3k3SehF7TyoTIe78rJs02GMMy+LF+A== - dependencies: - gaxios "^4.0.0" - json-bigint "^1.0.0" - -gcp-metadata@^5.2.0: - version "5.3.0" - resolved "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-5.3.0.tgz" - integrity sha512-FNTkdNEnBdlqF2oatizolQqNANMrcqJt6AAYt99B3y1aLLC8Hc5IOBb+ZnnzllodEEf6xMBp6wRcBbc16fa65w== - dependencies: - gaxios "^5.0.0" - json-bigint "^1.0.0" +generator-function@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/generator-function/-/generator-function-2.0.1.tgz#0e75dd410d1243687a0ba2e951b94eedb8f737a2" + integrity sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g== get-caller-file@^2.0.5: version "2.0.5" - resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== get-east-asian-width@^1.0.0: - version "1.3.0" + version "1.4.0" + resolved "https://registry.yarnpkg.com/get-east-asian-width/-/get-east-asian-width-1.4.0.tgz#9bc4caa131702b4b61729cb7e42735bc550c9ee6" + integrity sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q== get-intrinsic@^1.2.4, get-intrinsic@^1.2.5, get-intrinsic@^1.2.6, get-intrinsic@^1.2.7, get-intrinsic@^1.3.0: version "1.3.0" - resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz#743f0e3b6964a93a5491ed1bffaae054d7f98d01" integrity sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ== dependencies: call-bind-apply-helpers "^1.0.2" @@ -4495,9 +4407,9 @@ get-intrinsic@^1.2.4, get-intrinsic@^1.2.5, get-intrinsic@^1.2.6, get-intrinsic@ hasown "^2.0.2" math-intrinsics "^1.1.0" -get-proto@^1.0.0, get-proto@^1.0.1: +get-proto@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/get-proto/-/get-proto-1.0.1.tgz#150b3f2743869ef3e851ec0c49d15b1d14d00ee1" integrity sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g== dependencies: dunder-proto "^1.0.1" @@ -4505,12 +4417,12 @@ get-proto@^1.0.0, get-proto@^1.0.1: get-stream@^8.0.1: version "8.0.1" - resolved "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-8.0.1.tgz#def9dfd71742cd7754a7761ed43749a27d02eca2" integrity sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA== get-symbol-description@^1.1.0: version "1.1.0" - resolved "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz" + resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.1.0.tgz#7bdd54e0befe8ffc9f3b4e203220d9f1e881b6ee" integrity sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg== dependencies: call-bound "^1.0.3" @@ -4518,13 +4430,15 @@ get-symbol-description@^1.1.0: get-intrinsic "^1.2.6" get-tsconfig@^4.7.5: - version "4.10.1" + version "4.13.0" + resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.13.0.tgz#fcdd991e6d22ab9a600f00e91c318707a5d9a0d7" + integrity sha512-1VKTZJCwBrvbd+Wn3AOgQP/2Av+TfTCOlE4AcRJE72W1ksZXbAx8PPBR9RzgTeSPzlPMHrbANMH3LbltH73wxQ== dependencies: resolve-pkg-maps "^1.0.0" giget@^1.2.3: version "1.2.5" - resolved "https://registry.npmjs.org/giget/-/giget-1.2.5.tgz" + resolved "https://registry.yarnpkg.com/giget/-/giget-1.2.5.tgz#0bd4909356a0da75cc1f2b33538f93adec0d202f" integrity sha512-r1ekGw/Bgpi3HLV3h1MRBIlSAdHoIMklpaQ3OQLFcRw9PwAj2rqigvIbg+dBUI51OxVI2jsEtDywDBjSiuf7Ug== dependencies: citty "^0.1.6" @@ -4535,47 +4449,59 @@ giget@^1.2.3: pathe "^2.0.3" tar "^6.2.1" +giget@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/giget/-/giget-2.0.0.tgz#395fc934a43f9a7a29a29d55b99f23e30c14f195" + integrity sha512-L5bGsVkxJbJgdnwyuheIunkGatUF/zssUoxxjACCseZYAVbaqdh9Tsmmlkl8vYan09H7sbvKt4pS8GqKLBrEzA== + dependencies: + citty "^0.1.6" + consola "^3.4.0" + defu "^6.1.4" + node-fetch-native "^1.6.6" + nypm "^0.6.0" + pathe "^2.0.3" + glob-parent@^5.1.2, glob-parent@~5.1.2: version "5.1.2" - resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== dependencies: is-glob "^4.0.1" -glob@^7.0.5, glob@^7.1.3: - version "7.2.3" - resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" - integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== +glob@7.2.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" + integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" inherits "2" - minimatch "^3.1.1" + minimatch "^3.0.4" once "^1.3.0" path-is-absolute "^1.0.0" -glob@7.2.0: - version "7.2.0" - resolved "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz" - integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== +glob@^7.0.5, glob@^7.1.3: + version "7.2.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" inherits "2" - minimatch "^3.0.4" + minimatch "^3.1.1" once "^1.3.0" path-is-absolute "^1.0.0" globals@^13.6.0, globals@^13.9.0: version "13.24.0" - resolved "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.24.0.tgz#8432a19d78ce0c1e833949c36adb345400bb1171" integrity sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ== dependencies: type-fest "^0.20.2" globalthis@^1.0.4: version "1.0.4" - resolved "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz" + resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.4.tgz#7430ed3a975d97bfb59bcce41f5cabbafa651236" integrity sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ== dependencies: define-properties "^1.2.1" @@ -4583,7 +4509,7 @@ globalthis@^1.0.4: globby@^11.0.3, globby@^11.1.0: version "11.1.0" - resolved "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== dependencies: array-union "^2.1.0" @@ -4593,65 +4519,24 @@ globby@^11.0.3, globby@^11.1.0: merge2 "^1.4.1" slash "^3.0.0" -google-auth-library@^7.14.0, google-auth-library@^7.14.1: - version "7.14.1" - resolved "https://registry.npmjs.org/google-auth-library/-/google-auth-library-7.14.1.tgz" - integrity sha512-5Rk7iLNDFhFeBYc3s8l1CqzbEBcdhwR193RlD4vSNFajIcINKI8W8P0JLmBpwymHqqWbX34pJDQu39cSy/6RsA== - dependencies: - arrify "^2.0.0" - base64-js "^1.3.0" - ecdsa-sig-formatter "^1.0.11" - fast-text-encoding "^1.0.0" - gaxios "^4.0.0" - gcp-metadata "^4.2.0" - gtoken "^5.0.4" - jws "^4.0.0" - lru-cache "^6.0.0" - -google-gax@^2.24.1: - version "2.30.5" - resolved "https://registry.npmjs.org/google-gax/-/google-gax-2.30.5.tgz" - integrity sha512-Jey13YrAN2hfpozHzbtrwEfEHdStJh1GwaQ2+Akh1k0Tv/EuNVSuBtHZoKSBm5wBMvNsxTsEIZ/152NrYyZgxQ== - dependencies: - "@grpc/grpc-js" "~1.6.0" - "@grpc/proto-loader" "^0.6.12" - "@types/long" "^4.0.0" - abort-controller "^3.0.0" - duplexify "^4.0.0" - fast-text-encoding "^1.0.3" - google-auth-library "^7.14.0" - is-stream-ended "^0.1.4" - node-fetch "^2.6.1" - object-hash "^3.0.0" - proto3-json-serializer "^0.1.8" - protobufjs "6.11.3" - retry-request "^4.0.0" - -google-p12-pem@^3.1.3: - version "3.1.4" - resolved "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-3.1.4.tgz" - integrity sha512-HHuHmkLgwjdmVRngf5+gSmpkyaRI6QmOg77J8tkNBHhNEI62sGHyw4/+UkgyZEI7h84NbWprXDJ+sa3xOYFvTg== - dependencies: - node-forge "^1.3.1" - gopd@^1.0.1, gopd@^1.2.0: version "1.2.0" - resolved "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz" + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1" integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg== -graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0: +graceful-fs@^4.1.6, graceful-fs@^4.2.0: version "4.2.11" - resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== graphemer@^1.4.0: version "1.4.0" - resolved "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz" + resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== graphql-extensions@^0.16.0: version "0.16.0" - resolved "https://registry.npmjs.org/graphql-extensions/-/graphql-extensions-0.16.0.tgz" + resolved "https://registry.yarnpkg.com/graphql-extensions/-/graphql-extensions-0.16.0.tgz#32669fde0a2f115de60e5dda818ae457c1d71bb8" integrity sha512-rZQc/USoEIw437BGRUwoHoLPR1LA791Ltj6axONqgKIyyx2sqIO3YT9kTbB/eIUdJBrCozp4KuUeZ09xKeQDxg== dependencies: "@apollographql/apollo-tools" "^0.5.0" @@ -4660,34 +4545,36 @@ graphql-extensions@^0.16.0: graphql-middleware@^6.0.6: version "6.1.35" - resolved "https://registry.npmjs.org/graphql-middleware/-/graphql-middleware-6.1.35.tgz" + resolved "https://registry.yarnpkg.com/graphql-middleware/-/graphql-middleware-6.1.35.tgz#7297d41ceb35742b80640cca5cd85d1e47e8ab24" integrity sha512-azawK7ApUYtcuPGRGBR9vDZu795pRuaFhO5fgomdJppdfKRt7jwncuh0b7+D3i574/4B+16CNWgVpnGVlg3ZCg== dependencies: "@graphql-tools/delegate" "^8.8.1" "@graphql-tools/schema" "^8.5.1" graphql-scalars@^1.22.4: - version "1.24.2" + version "1.25.0" + resolved "https://registry.yarnpkg.com/graphql-scalars/-/graphql-scalars-1.25.0.tgz#88f2891d60942c420286a2e76a29abfe645ac899" + integrity sha512-b0xyXZeRFkne4Eq7NAnL400gStGqG/Sx9VqX0A05nHyEbv57UJnWKsjNnrpVqv5e/8N1MUxkt0wwcRXbiyKcFg== dependencies: tslib "^2.5.0" graphql-subscriptions@^1.0.0: version "1.2.1" - resolved "https://registry.npmjs.org/graphql-subscriptions/-/graphql-subscriptions-1.2.1.tgz" + resolved "https://registry.yarnpkg.com/graphql-subscriptions/-/graphql-subscriptions-1.2.1.tgz#2142b2d729661ddf967b7388f7cf1dd4cf2e061d" integrity sha512-95yD/tKi24q8xYa7Q9rhQN16AYj5wPbrb8tmHGM3WRc9EBmWrG/0kkMl+tQG8wcEuE9ibR4zyOM31p5Sdr2v4g== dependencies: iterall "^1.3.0" graphql-tag@^2.11.0: version "2.12.6" - resolved "https://registry.npmjs.org/graphql-tag/-/graphql-tag-2.12.6.tgz" + resolved "https://registry.yarnpkg.com/graphql-tag/-/graphql-tag-2.12.6.tgz#d441a569c1d2537ef10ca3d1633b48725329b5f1" integrity sha512-FdSNcu2QQcWnM2VNvSCCDCVS5PpPqpzgFT8+GXzqJuoDd0CBncxCY278u4mhRO7tMgo2JjgJA5aZ+nWSQ/Z+xg== dependencies: tslib "^2.1.0" graphql-tools@^4.0.8: version "4.0.8" - resolved "https://registry.npmjs.org/graphql-tools/-/graphql-tools-4.0.8.tgz" + resolved "https://registry.yarnpkg.com/graphql-tools/-/graphql-tools-4.0.8.tgz#e7fb9f0d43408fb0878ba66b522ce871bafe9d30" integrity sha512-MW+ioleBrwhRjalKjYaLQbr+920pHBgy9vM/n47sswtns8+96sRn5M/G+J1eu7IMeKWiN/9p6tmwCHU7552VJg== dependencies: apollo-link "^1.2.14" @@ -4696,9 +4583,20 @@ graphql-tools@^4.0.8: iterall "^1.1.3" uuid "^3.1.0" +graphql-upload@^11.0.0: + version "11.0.0" + resolved "https://registry.yarnpkg.com/graphql-upload/-/graphql-upload-11.0.0.tgz#24b245ff18f353bab6715e8a055db9fd73035e10" + integrity sha512-zsrDtu5gCbQFDWsNa5bMB4nf1LpKX9KDgh+f8oL1288ijV4RxeckhVozAjqjXAfRpxOHD1xOESsh6zq8SjdgjA== + dependencies: + busboy "^0.3.1" + fs-capacitor "^6.1.0" + http-errors "^1.7.3" + isobject "^4.0.0" + object-path "^0.11.4" + graphql-upload@^12.0.0: version "12.0.0" - resolved "https://registry.npmjs.org/graphql-upload/-/graphql-upload-12.0.0.tgz" + resolved "https://registry.yarnpkg.com/graphql-upload/-/graphql-upload-12.0.0.tgz#2351d20d294e920fb25d2eba9f7c352e37a1a02b" integrity sha512-ovZ3Q7sZ17Bmn8tYl22MfrpNR7nYM/DUszXWgkue7SFIlI9jtqszHAli8id8ZcnGBc9GF0gUTNSskYWW+5aNNQ== dependencies: busboy "^0.3.1" @@ -4707,24 +4605,19 @@ graphql-upload@^12.0.0: isobject "^4.0.0" object-path "^0.11.5" -graphql@*: - version "16.11.0" - resolved "https://registry.npmjs.org/graphql/-/graphql-16.11.0.tgz" - integrity sha512-mS1lbMsxgQj6hge1XZ6p7GPhbrtFwUFYi3wRzXAC/FmYnyXMTvvI3td3rjmQ2u8ewXueaSvRPWaEcgVVOT9Jnw== +graphql@*, "graphql@0.13.1 - 16": + version "16.12.0" + resolved "https://registry.yarnpkg.com/graphql/-/graphql-16.12.0.tgz#28cc2462435b1ac3fdc6976d030cef83a0c13ac7" + integrity sha512-DKKrynuQRne0PNpEbzuEdHlYOMksHSUI8Zc9Unei5gTsMNA2/vMpoMz/yKba50pejK56qj98qM0SjYxAKi13gQ== -"graphql@^0.10.5 || ^0.11.3 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0", "graphql@^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0", "graphql@^0.11.3 || ^0.12.3 || ^0.13.0 || ^14.0.0 || ^15.0.0", "graphql@^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0", "graphql@^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0", "graphql@^0.13.0 || ^14.0.0 || ^15.0.0", "graphql@^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0", "graphql@^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0", "graphql@^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0", "graphql@^14.2.1 || ^15.0.0", "graphql@^14.2.1 || ^15.0.0 || ^16.0.0", graphql@>=0.10.0, "graphql@0.13.1 - 15", graphql@15.5.0: +graphql@15.5.0: version "15.5.0" - resolved "https://registry.npmjs.org/graphql/-/graphql-15.5.0.tgz" + resolved "https://registry.yarnpkg.com/graphql/-/graphql-15.5.0.tgz#39d19494dbe69d1ea719915b578bf920344a69d5" integrity sha512-OmaM7y0kaK31NKG31q4YbD2beNYa6jBBKtMFT6gLYJljHLJr42IqJ8KX08u3Li/0ifzTU5HjmoOOrwa5BRLeDA== -"graphql@0.13.1 - 16": - version "16.11.0" - resolved "https://registry.npmjs.org/graphql/-/graphql-16.11.0.tgz" - integrity sha512-mS1lbMsxgQj6hge1XZ6p7GPhbrtFwUFYi3wRzXAC/FmYnyXMTvvI3td3rjmQ2u8ewXueaSvRPWaEcgVVOT9Jnw== - groq-sdk@^0.3.2: version "0.3.3" - resolved "https://registry.npmjs.org/groq-sdk/-/groq-sdk-0.3.3.tgz" + resolved "https://registry.yarnpkg.com/groq-sdk/-/groq-sdk-0.3.3.tgz#88cecb4049fc899b97be7396ce087fa46a704258" integrity sha512-wdOeZ2QymPjjP3tmFpUAnfMisoLbt7xF2MfpROeFAngcqWbfTyB9j9pMWSEAMF/E4gZx8f2Y+5zswO0q92CSxA== dependencies: "@types/node" "^18.11.18" @@ -4737,82 +4630,68 @@ groq-sdk@^0.3.2: node-fetch "^2.6.7" web-streams-polyfill "^3.2.1" -gtoken@^5.0.4: - version "5.3.2" - resolved "https://registry.npmjs.org/gtoken/-/gtoken-5.3.2.tgz" - integrity sha512-gkvEKREW7dXWF8NV8pVrKfW7WqReAmjjkMBh6lNCCGOM4ucS0r0YyXXl0r/9Yj8wcW/32ISkfc8h5mPTDbtifQ== - dependencies: - gaxios "^4.0.0" - google-p12-pem "^3.1.3" - jws "^4.0.0" - has-bigints@^1.0.2: version "1.1.0" - resolved "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz" + resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.1.0.tgz#28607e965ac967e03cd2a2c70a2636a1edad49fe" integrity sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg== has-flag@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== has-flag@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== dependencies: es-define-property "^1.0.0" has-proto@^1.2.0: version "1.2.0" - resolved "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz" + resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.2.0.tgz#5de5a6eabd95fdffd9818b43055e8065e39fe9d5" integrity sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ== dependencies: dunder-proto "^1.0.0" has-symbols@^1.0.3, has-symbols@^1.1.0: version "1.1.0" - resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.1.0.tgz#fc9c6a783a084951d0b971fe1018de813707a338" integrity sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ== has-tostringtag@^1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== dependencies: has-symbols "^1.0.3" -hash-stream-validation@^0.2.2: - version "0.2.4" - resolved "https://registry.npmjs.org/hash-stream-validation/-/hash-stream-validation-0.2.4.tgz" - integrity sha512-Gjzu0Xn7IagXVkSu9cSFuK1fqzwtLwFhNhVL8IFJijRNMgUttFbBSIAzKuSIrsFMO1+g1RlsoN49zPIbwPDMGQ== - hasown@^2.0.2: version "2.0.2" - resolved "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== dependencies: function-bind "^1.1.2" -http-errors@^1.7.3: - version "1.8.1" - resolved "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz" - integrity sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g== +http-errors@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" + integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== dependencies: - depd "~1.1.2" + depd "2.0.0" inherits "2.0.4" setprototypeof "1.2.0" - statuses ">= 1.5.0 < 2" + statuses "2.0.1" toidentifier "1.0.1" -http-errors@^1.8.0: +http-errors@^1.7.3, http-errors@^1.8.0: version "1.8.1" - resolved "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.8.1.tgz#7c3f28577cbc8a207388455dbd62295ed07bd68c" integrity sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g== dependencies: depd "~1.1.2" @@ -4821,91 +4700,48 @@ http-errors@^1.8.0: statuses ">= 1.5.0 < 2" toidentifier "1.0.1" -http-errors@2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz" - integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== - dependencies: - depd "2.0.0" - inherits "2.0.4" - setprototypeof "1.2.0" - statuses "2.0.1" - toidentifier "1.0.1" - -http-parser-js@>=0.5.1: - version "0.5.10" - resolved "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.10.tgz" - integrity sha512-Pysuw9XpUq5dVc/2SMHpuTY01RFl8fttgcyunjL7eEMhGM3cI4eOmiCycJDVCo/7O7ClfQD3SaI6ftDzqOXYMA== - -http-proxy-agent@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz" - integrity sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w== - dependencies: - "@tootallnate/once" "2" - agent-base "6" - debug "4" - -https-proxy-agent@^5.0.0: - version "5.0.1" - resolved "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz" - integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== - dependencies: - agent-base "6" - debug "4" - human-signals@^5.0.0: version "5.0.0" - resolved "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-5.0.0.tgz#42665a284f9ae0dade3ba41ebc37eb4b852f3a28" integrity sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ== humanize-ms@^1.2.1: version "1.2.1" - resolved "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz" + resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" integrity sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ== dependencies: ms "^2.0.0" -iconv-lite@^0.4.24, iconv-lite@0.4.24: +iconv-lite@0.4.24, iconv-lite@^0.4.24: version "0.4.24" - resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== dependencies: safer-buffer ">= 2.1.2 < 3" -idb@7.1.1: - version "7.1.1" - resolved "https://registry.npmjs.org/idb/-/idb-7.1.1.tgz" - integrity sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ== - ieee754@^1.1.13, ieee754@^1.2.1: version "1.2.1" - resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== ignore-by-default@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/ignore-by-default/-/ignore-by-default-1.0.1.tgz#48ca6d72f6c6a3af00a9ad4ae6876be3889e2b09" integrity sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA== ignore@^4.0.6: version "4.0.6" - resolved "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== -ignore@^5.2.0: +ignore@^5.2.0, ignore@^5.2.4: version "5.3.2" - resolved "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz" - integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g== - -ignore@^5.2.4: - version "5.3.2" - resolved "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5" integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g== import-fresh@^3.0.0, import-fresh@^3.2.1: version "3.3.1" - resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.1.tgz#9cecb56503c0ada1f2741dbbd6546e4b13b57ccf" integrity sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ== dependencies: parent-module "^1.0.0" @@ -4913,72 +4749,68 @@ import-fresh@^3.0.0, import-fresh@^3.2.1: import-lazy@~4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz" + resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-4.0.0.tgz#e8eb627483a0a43da3c03f3e35548be5cb0cc153" integrity sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw== imurmurhash@^0.1.4: version "0.1.4" - resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== inflection@^1.13.4: version "1.13.4" - resolved "https://registry.npmjs.org/inflection/-/inflection-1.13.4.tgz" + resolved "https://registry.yarnpkg.com/inflection/-/inflection-1.13.4.tgz#65aa696c4e2da6225b148d7a154c449366633a32" integrity sha512-6I/HUDeYFfuNCVS3td055BaXBwKYuzw7K3ExVMStBowKo9oOAMJIXIHvdyR3iboTCp1b+1i5DSkIZTcwIktuDw== inflection@^3.0.0: version "3.0.2" - resolved "https://registry.npmjs.org/inflection/-/inflection-3.0.2.tgz" + resolved "https://registry.yarnpkg.com/inflection/-/inflection-3.0.2.tgz#2f591c3dad053e3fac65a03bf6431b675d829601" integrity sha512-+Bg3+kg+J6JUWn8J6bzFmOWkTQ6L/NHfDRSYU+EVvuKHDxUDHAXgqixHfVlzuBQaPOTac8hn43aPhMNk6rMe3g== inflight@^1.0.4: version "1.0.6" - resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== dependencies: once "^1.3.0" wrappy "1" -inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.1, inherits@~2.0.3, inherits@2, inherits@2.0.4: +inherits@2, inherits@2.0.4, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3: version "2.0.4" - resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== internal-slot@^1.1.0: version "1.1.0" - resolved "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.1.0.tgz#1eac91762947d2f7056bc838d93e13b2e9604961" integrity sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw== dependencies: es-errors "^1.3.0" hasown "^2.0.2" side-channel "^1.1.0" -ip-address@^9.0.5: - version "9.0.5" - dependencies: - jsbn "1.1.0" - sprintf-js "^1.1.3" +ip-address@^10.0.1: + version "10.1.0" + resolved "https://registry.yarnpkg.com/ip-address/-/ip-address-10.1.0.tgz#d8dcffb34d0e02eb241427444a6e23f5b0595aa4" + integrity sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q== ipaddr.js@1.9.1: version "1.9.1" - resolved "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== is-array-buffer@^3.0.4, is-array-buffer@^3.0.5: version "3.0.5" - resolved "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz" + resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.5.tgz#65742e1e687bd2cc666253068fd8707fe4d44280" integrity sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A== dependencies: call-bind "^1.0.8" call-bound "^1.0.3" get-intrinsic "^1.2.6" -is-arrayish@^0.3.1: - version "0.3.2" - is-async-function@^2.0.0: version "2.1.1" - resolved "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz" + resolved "https://registry.yarnpkg.com/is-async-function/-/is-async-function-2.1.1.tgz#3e69018c8e04e73b738793d020bfe884b9fd3523" integrity sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ== dependencies: async-function "^1.0.0" @@ -4989,21 +4821,21 @@ is-async-function@^2.0.0: is-bigint@^1.1.0: version "1.1.0" - resolved "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz" + resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.1.0.tgz#dda7a3445df57a42583db4228682eba7c4170672" integrity sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ== dependencies: has-bigints "^1.0.2" is-binary-path@~2.1.0: version "2.1.0" - resolved "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== dependencies: binary-extensions "^2.0.0" is-boolean-object@^1.2.1: version "1.2.2" - resolved "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz" + resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.2.2.tgz#7067f47709809a393c71ff5bb3e135d8a9215d9e" integrity sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A== dependencies: call-bound "^1.0.3" @@ -5011,24 +4843,24 @@ is-boolean-object@^1.2.1: is-buffer@~1.1.6: version "1.1.6" - resolved "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== is-callable@^1.2.7: version "1.2.7" - resolved "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== -is-core-module@^2.13.0, is-core-module@^2.16.0, is-core-module@^2.16.1: +is-core-module@^2.13.0, is-core-module@^2.16.1: version "2.16.1" - resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.16.1.tgz#2a98801a849f43e2add644fbb6bc6229b19a4ef4" integrity sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w== dependencies: hasown "^2.0.2" is-data-view@^1.0.1, is-data-view@^1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz" + resolved "https://registry.yarnpkg.com/is-data-view/-/is-data-view-1.0.2.tgz#bae0a41b9688986c2188dda6657e56b8f9e63b8e" integrity sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw== dependencies: call-bound "^1.0.2" @@ -5037,7 +4869,7 @@ is-data-view@^1.0.1, is-data-view@^1.0.2: is-date-object@^1.0.5, is-date-object@^1.1.0: version "1.1.0" - resolved "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.1.0.tgz#ad85541996fc7aa8b2729701d27b7319f95d82f7" integrity sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg== dependencies: call-bound "^1.0.2" @@ -5045,54 +4877,57 @@ is-date-object@^1.0.5, is-date-object@^1.1.0: is-extglob@^2.1.1: version "2.1.1" - resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== is-finalizationregistry@^1.1.0: version "1.1.1" - resolved "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz" + resolved "https://registry.yarnpkg.com/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz#eefdcdc6c94ddd0674d9c85887bf93f944a97c90" integrity sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg== dependencies: call-bound "^1.0.3" is-fullwidth-code-point@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== is-generator-function@^1.0.10: - version "1.1.0" + version "1.1.2" + resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.1.2.tgz#ae3b61e3d5ea4e4839b90bad22b02335051a17d5" + integrity sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA== dependencies: - call-bound "^1.0.3" - get-proto "^1.0.0" + call-bound "^1.0.4" + generator-function "^2.0.0" + get-proto "^1.0.1" has-tostringtag "^1.0.2" safe-regex-test "^1.1.0" is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: version "4.0.3" - resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== dependencies: is-extglob "^2.1.1" is-interactive@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz" + resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-2.0.0.tgz#40c57614593826da1100ade6059778d597f16e90" integrity sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ== is-map@^2.0.3: version "2.0.3" - resolved "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz" + resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.3.tgz#ede96b7fe1e270b3c4465e3a465658764926d62e" integrity sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw== is-negative-zero@^2.0.3: version "2.0.3" - resolved "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.3.tgz#ced903a027aca6381b777a5743069d7376a49747" integrity sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw== is-number-object@^1.1.1: version "1.1.1" - resolved "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.1.1.tgz#144b21e95a1bc148205dcc2814a9134ec41b2541" integrity sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw== dependencies: call-bound "^1.0.3" @@ -5100,17 +4935,12 @@ is-number-object@^1.1.1: is-number@^7.0.0: version "7.0.0" - resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== -is-obj@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz" - integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== - is-regex@^1.2.1: version "1.2.1" - resolved "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.2.1.tgz#76d70a3ed10ef9be48eb577887d74205bf0cad22" integrity sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g== dependencies: call-bound "^1.0.2" @@ -5120,34 +4950,29 @@ is-regex@^1.2.1: is-set@^2.0.3: version "2.0.3" - resolved "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz" + resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.3.tgz#8ab209ea424608141372ded6e0cb200ef1d9d01d" integrity sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg== is-shared-array-buffer@^1.0.4: version "1.0.4" - resolved "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz" + resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz#9b67844bd9b7f246ba0708c3a93e34269c774f6f" integrity sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A== dependencies: call-bound "^1.0.3" -is-stream-ended@^0.1.4: - version "0.1.4" - resolved "https://registry.npmjs.org/is-stream-ended/-/is-stream-ended-0.1.4.tgz" - integrity sha512-xj0XPvmr7bQFTvirqnFr50o0hQIh6ZItDqloxt5aJrR4NQsYeSsyFQERYGCAzfindAcnKjINnwEEgLx4IqVzQw== - is-stream@^2.0.0: version "2.0.1" - resolved "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== is-stream@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-3.0.0.tgz#e6bfd7aa6bef69f4f472ce9bb681e3e57b4319ac" integrity sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA== is-string@^1.1.1: version "1.1.1" - resolved "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.1.1.tgz#92ea3f3d5c5b6e039ca8677e5ac8d07ea773cbb9" integrity sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA== dependencies: call-bound "^1.0.3" @@ -5155,7 +4980,7 @@ is-string@^1.1.1: is-symbol@^1.0.4, is-symbol@^1.1.1: version "1.1.1" - resolved "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.1.1.tgz#f47761279f532e2b05a7024a7506dbbedacd0634" integrity sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w== dependencies: call-bound "^1.0.2" @@ -5164,101 +4989,84 @@ is-symbol@^1.0.4, is-symbol@^1.1.1: is-typed-array@^1.1.13, is-typed-array@^1.1.14, is-typed-array@^1.1.15: version "1.1.15" - resolved "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.15.tgz#4bfb4a45b61cee83a5a46fba778e4e8d59c0ce0b" integrity sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ== dependencies: which-typed-array "^1.1.16" -is-typedarray@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz" - integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== - is-unicode-supported@^1.3.0: version "1.3.0" - resolved "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz" + resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz#d824984b616c292a2e198207d4a609983842f714" integrity sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ== is-unicode-supported@^2.0.0: version "2.1.0" - resolved "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz" + resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz#09f0ab0de6d3744d48d265ebb98f65d11f2a9b3a" integrity sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ== is-url@^1.2.4: version "1.2.4" - resolved "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz" + resolved "https://registry.yarnpkg.com/is-url/-/is-url-1.2.4.tgz#04a4df46d28c4cff3d73d01ff06abeb318a1aa52" integrity sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww== is-weakmap@^2.0.2: version "2.0.2" - resolved "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz" + resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.2.tgz#bf72615d649dfe5f699079c54b83e47d1ae19cfd" integrity sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w== is-weakref@^1.0.2, is-weakref@^1.1.1: version "1.1.1" - resolved "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz" + resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.1.1.tgz#eea430182be8d64174bd96bffbc46f21bf3f9293" integrity sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew== dependencies: call-bound "^1.0.3" is-weakset@^2.0.3: version "2.0.4" - resolved "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz" + resolved "https://registry.yarnpkg.com/is-weakset/-/is-weakset-2.0.4.tgz#c9f5deb0bc1906c6d6f1027f284ddf459249daca" integrity sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ== dependencies: call-bound "^1.0.3" get-intrinsic "^1.2.6" +isarray@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" + integrity sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ== + isarray@^2.0.5: version "2.0.5" - resolved "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== isarray@~1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== -isarray@0.0.1: - version "0.0.1" - resolved "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz" - integrity sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ== - isexe@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== isobject@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/isobject/-/isobject-4.0.0.tgz" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-4.0.0.tgz#3f1c9155e73b192022a80819bacd0343711697b0" integrity sha512-S/2fF5wH8SJA/kmwr6HYhK/RI/OkhD84k8ntalo0iJjZikgq1XFvR5M8NPT1x5F7fBwCG3qHfnzeP/Vh/ZxCUA== iterall@^1.1.3, iterall@^1.2.1, iterall@^1.3.0: version "1.3.0" - resolved "https://registry.npmjs.org/iterall/-/iterall-1.3.0.tgz" + resolved "https://registry.yarnpkg.com/iterall/-/iterall-1.3.0.tgz#afcb08492e2915cbd8a0884eb93a8c94d0d72fea" integrity sha512-QZ9qOMdF+QLHxy1QIpUHUU1D5pS2CG2P69LF6L6CPjPYA/XMOmKV3PZpawHoAjHNyB0swdVTRxdYT4tbBbxqwg== -iterator.prototype@^1.1.4: - version "1.1.5" - resolved "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.5.tgz" - integrity sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g== - dependencies: - define-data-property "^1.1.4" - es-object-atoms "^1.0.0" - get-intrinsic "^1.2.6" - get-proto "^1.0.0" - has-symbols "^1.1.0" - set-function-name "^2.0.2" - javascript-stringify@^2.1.0: version "2.1.0" - resolved "https://registry.npmjs.org/javascript-stringify/-/javascript-stringify-2.1.0.tgz" + resolved "https://registry.yarnpkg.com/javascript-stringify/-/javascript-stringify-2.1.0.tgz#27c76539be14d8bd128219a2d731b09337904e79" integrity sha512-JVAfqNPTvNq3sB/VHQJAFxN/sPgKnsKrCwyRt15zwNCdrMMJDdcEOdubuy+DuJYYdm0ox1J4uzEuYKkN+9yhVg== jest-diff@^26.0.0: version "26.6.2" - resolved "https://registry.npmjs.org/jest-diff/-/jest-diff-26.6.2.tgz" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-26.6.2.tgz#1aa7468b52c3a68d7d5c5fdcdfcd5e49bd164394" integrity sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA== dependencies: chalk "^4.0.0" @@ -5268,68 +5076,57 @@ jest-diff@^26.0.0: jest-get-type@^26.3.0: version "26.3.0" - resolved "https://registry.npmjs.org/jest-get-type/-/jest-get-type-26.3.0.tgz" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-26.3.0.tgz#e97dc3c3f53c2b406ca7afaed4493b1d099199e0" integrity sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig== jiti@^1.21.6: version "1.21.7" - resolved "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz" + resolved "https://registry.yarnpkg.com/jiti/-/jiti-1.21.7.tgz#9dd81043424a3d28458b193d965f0d18a2300ba9" integrity sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A== -jiti@2.4.2: - version "2.4.2" +jiti@^2.4.2: + version "2.6.1" + resolved "https://registry.yarnpkg.com/jiti/-/jiti-2.6.1.tgz#178ef2fc9a1a594248c20627cd820187a4d78d92" + integrity sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ== jju@~1.4.0: version "1.4.0" - resolved "https://registry.npmjs.org/jju/-/jju-1.4.0.tgz" + resolved "https://registry.yarnpkg.com/jju/-/jju-1.4.0.tgz#a3abe2718af241a2b2904f84a625970f389ae32a" integrity sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA== -jose@^2.0.6: - version "2.0.7" - resolved "https://registry.npmjs.org/jose/-/jose-2.0.7.tgz" - integrity sha512-5hFWIigKqC+e/lRyQhfnirrAqUdIPMB7SJRqflJaO29dW7q5DFvH1XCSTmv6PQ6pb++0k6MJlLRoS0Wv4s38Wg== - dependencies: - "@panva/asn1.js" "^1.0.0" - js-base64@^3.7.7: - version "3.7.7" + version "3.7.8" + resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-3.7.8.tgz#af44496bc09fa178ed9c4adf67eb2b46f5c6d2a4" + integrity sha512-hNngCeKxIUQiEUN3GPJOkz4wF/YvdUdbNL9hsBcMQTkKzboD7T/q3OYOuuPZLUE6dBxSGpwhk5mwuDud7JVAow== js-tiktoken@^1.0.12: - version "1.0.20" + version "1.0.21" + resolved "https://registry.yarnpkg.com/js-tiktoken/-/js-tiktoken-1.0.21.tgz#368a9957591a30a62997dd0c4cf30866f00f8221" + integrity sha512-biOj/6M5qdgx5TKjDnFT1ymSpM5tbd3ylwDtrQvFQSu0Z7bBYko2dF+W/aUkXUPuk6IVpRxk/3Q2sHOzGlS36g== dependencies: base64-js "^1.5.1" -"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: +js-tokens@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== js-yaml@^3.13.1: version "3.14.1" - resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== dependencies: argparse "^1.0.7" esprima "^4.0.0" -jsbn@1.1.0: - version "1.1.0" - -json-bigint@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz" - integrity sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ== - dependencies: - bignumber.js "^9.0.0" - json-buffer@3.0.1: version "3.0.1" - resolved "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz" + resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== json-schema-library@^9.3.4: version "9.3.5" - resolved "https://registry.npmjs.org/json-schema-library/-/json-schema-library-9.3.5.tgz" + resolved "https://registry.yarnpkg.com/json-schema-library/-/json-schema-library-9.3.5.tgz#dd66002257a13572acd681854a023e1da0e86bfa" integrity sha512-5eBDx7cbfs+RjylsVO+N36b0GOPtv78rfqgf2uON+uaHUIC62h63Y8pkV2ovKbaL4ZpQcHp21968x5nx/dFwqQ== dependencies: "@sagold/json-pointer" "^5.1.2" @@ -5342,22 +5139,22 @@ json-schema-library@^9.3.4: json-schema-traverse@^0.4.1: version "0.4.1" - resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== json-schema-traverse@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== json-stable-stringify-without-jsonify@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== json2csv@^5.0.6: version "5.0.7" - resolved "https://registry.npmjs.org/json2csv/-/json2csv-5.0.7.tgz" + resolved "https://registry.yarnpkg.com/json2csv/-/json2csv-5.0.7.tgz#f3a583c25abd9804be873e495d1e65ad8d1b54ae" integrity sha512-YRZbUnyaJZLZUJSRi2G/MqahCyRv9n/ds+4oIetjDF3jWQA7AG7iSeKTiZiCNqtMZM7HDyt0e/W6lEnoGEmMGA== dependencies: commander "^6.1.0" @@ -5366,13 +5163,15 @@ json2csv@^5.0.6: json5@^1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz" + resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593" integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA== dependencies: minimist "^1.2.0" jsonfile@^6.0.1: - version "6.1.0" + version "6.2.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.2.0.tgz#7c265bd1b65de6977478300087c99f1c84383f62" + integrity sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg== dependencies: universalify "^2.0.0" optionalDependencies: @@ -5380,28 +5179,12 @@ jsonfile@^6.0.1: jsonparse@^1.3.1: version "1.3.1" - resolved "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz" + resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" integrity sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg== -jsonwebtoken@^8.5.1: - version "8.5.1" - resolved "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz" - integrity sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w== - dependencies: - jws "^3.2.2" - lodash.includes "^4.3.0" - lodash.isboolean "^3.0.3" - lodash.isinteger "^4.0.4" - lodash.isnumber "^3.0.3" - lodash.isplainobject "^4.0.6" - lodash.isstring "^4.0.1" - lodash.once "^4.0.0" - ms "^2.1.1" - semver "^5.6.0" - jsonwebtoken@^9.0.2: version "9.0.2" - resolved "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz" + resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz#65ff91f4abef1784697d40952bb1998c504caaf3" integrity sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ== dependencies: jws "^3.2.2" @@ -5415,97 +5198,48 @@ jsonwebtoken@^9.0.2: ms "^2.1.1" semver "^7.5.4" -"jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.3.5: - version "3.3.5" - resolved "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz" - integrity sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ== - dependencies: - array-includes "^3.1.6" - array.prototype.flat "^1.3.1" - object.assign "^4.1.4" - object.values "^1.1.6" - jwa@^1.4.1: version "1.4.2" - resolved "https://registry.npmjs.org/jwa/-/jwa-1.4.2.tgz" + resolved "https://registry.yarnpkg.com/jwa/-/jwa-1.4.2.tgz#16011ac6db48de7b102777e57897901520eec7b9" integrity sha512-eeH5JO+21J78qMvTIDdBXidBd6nG2kZjg5Ohz/1fpa28Z4CcsWUzJ1ZZyFq/3z3N17aZy+ZuBoHljASbL1WfOw== dependencies: buffer-equal-constant-time "^1.0.1" ecdsa-sig-formatter "1.0.11" safe-buffer "^5.0.1" -jwa@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/jwa/-/jwa-2.0.1.tgz" - integrity sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg== - dependencies: - buffer-equal-constant-time "^1.0.1" - ecdsa-sig-formatter "1.0.11" - safe-buffer "^5.0.1" - -jwks-rsa@^2.0.2: - version "2.1.5" - resolved "https://registry.npmjs.org/jwks-rsa/-/jwks-rsa-2.1.5.tgz" - integrity sha512-IODtn1SwEm7n6GQZnQLY0oxKDrMh7n/jRH1MzE8mlxWMrh2NnMyOsXTebu8vJ1qCpmuTJcL4DdiE0E4h8jnwsA== - dependencies: - "@types/express" "^4.17.14" - "@types/jsonwebtoken" "^8.5.9" - debug "^4.3.4" - jose "^2.0.6" - limiter "^1.1.5" - lru-memoizer "^2.1.4" - jws@^3.2.2: version "3.2.2" - resolved "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz" + resolved "https://registry.yarnpkg.com/jws/-/jws-3.2.2.tgz#001099f3639468c9414000e99995fa52fb478304" integrity sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA== dependencies: jwa "^1.4.1" safe-buffer "^5.0.1" -jws@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz" - integrity sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg== - dependencies: - jwa "^2.0.0" - safe-buffer "^5.0.1" - -kareem@2.3.2: - version "2.3.2" - resolved "https://registry.npmjs.org/kareem/-/kareem-2.3.2.tgz" - integrity sha512-STHz9P7X2L4Kwn72fA4rGyqyXdmrMSdxqHx9IXon/FXluXieaFA6KJ2upcHAHxQPQ0LeM/OjLrhFxifHewOALQ== - -kareem@2.6.3: - version "2.6.3" - resolved "https://registry.npmjs.org/kareem/-/kareem-2.6.3.tgz" - integrity sha512-C3iHfuGUXK2u8/ipq9LfjFfXFxAZMQJJq7vLS45r3D9Y2xQ/m4S8zaR4zMLFWh9AsNPXmcFfUDhTEO8UIC/V6Q== - keyv@^4.5.3: version "4.5.4" - resolved "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== dependencies: json-buffer "3.0.1" kleur@^3.0.3: version "3.0.3" - resolved "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz" + resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== kleur@^4.1.5: version "4.1.5" - resolved "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz" + resolved "https://registry.yarnpkg.com/kleur/-/kleur-4.1.5.tgz#95106101795f7050c6c650f350c683febddb1780" integrity sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ== kuler@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz" + resolved "https://registry.yarnpkg.com/kuler/-/kuler-2.0.0.tgz#e2c570a3800388fb44407e851531c1d670b061b3" integrity sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A== langsmith@^0.1.56-rc.1: version "0.1.68" - resolved "https://registry.npmjs.org/langsmith/-/langsmith-0.1.68.tgz" + resolved "https://registry.yarnpkg.com/langsmith/-/langsmith-0.1.68.tgz#848332e822fe5e6734a07f1c36b6530cc1798afb" integrity sha512-otmiysWtVAqzMx3CJ4PrtUBhWRG5Co8Z4o7hSZENPjlit9/j3/vm3TSvbaxpDYakZxtMjhkcJTqrdYFipISEiQ== dependencies: "@types/uuid" "^10.0.0" @@ -5515,111 +5249,84 @@ langsmith@^0.1.56-rc.1: semver "^7.6.3" uuid "^10.0.0" -language-subtag-registry@^0.3.20: - version "0.3.23" - resolved "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz" - integrity sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ== - -language-tags@^1.0.9: - version "1.0.9" - resolved "https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz" - integrity sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA== - dependencies: - language-subtag-registry "^0.3.20" - levn@^0.4.1: version "0.4.1" - resolved "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== dependencies: prelude-ls "^1.2.1" type-check "~0.4.0" -limiter@^1.1.5: - version "1.1.5" - resolved "https://registry.npmjs.org/limiter/-/limiter-1.1.5.tgz" - integrity sha512-FWWMIEOxz3GwUI4Ts/IvgVy6LPvoMPgjMdQ185nN6psJyBJ4yOpzqm695/h5umdLJg2vW3GR5iG11MAkR2AzJA== - locate-path@^7.2.0: version "7.2.0" - resolved "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-7.2.0.tgz#69cb1779bd90b35ab1e771e1f2f89a202c2a8a8a" integrity sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA== dependencies: p-locate "^6.0.0" -lodash.camelcase@^4.3.0: - version "4.3.0" - resolved "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz" - integrity sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA== - -lodash.clonedeep@^4.5.0: - version "4.5.0" - resolved "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz" - integrity sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ== - lodash.get@^4.4.2: version "4.4.2" - resolved "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz" + resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" integrity sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ== lodash.includes@^4.3.0: version "4.3.0" - resolved "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz" + resolved "https://registry.yarnpkg.com/lodash.includes/-/lodash.includes-4.3.0.tgz#60bb98a87cb923c68ca1e51325483314849f553f" integrity sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w== lodash.isboolean@^3.0.3: version "3.0.3" - resolved "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz" + resolved "https://registry.yarnpkg.com/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz#6c2e171db2a257cd96802fd43b01b20d5f5870f6" integrity sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg== lodash.isinteger@^4.0.4: version "4.0.4" - resolved "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz" + resolved "https://registry.yarnpkg.com/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz#619c0af3d03f8b04c31f5882840b77b11cd68343" integrity sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA== lodash.isnumber@^3.0.3: version "3.0.3" - resolved "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz" + resolved "https://registry.yarnpkg.com/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz#3ce76810c5928d03352301ac287317f11c0b1ffc" integrity sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw== lodash.isplainobject@^4.0.6: version "4.0.6" - resolved "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz" + resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" integrity sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA== lodash.isstring@^4.0.1: version "4.0.1" - resolved "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz" + resolved "https://registry.yarnpkg.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451" integrity sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw== lodash.merge@^4.6.2: version "4.6.2" - resolved "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz" + resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== lodash.once@^4.0.0: version "4.1.1" - resolved "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz" + resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac" integrity sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg== lodash.sortby@^4.7.0: version "4.7.0" - resolved "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz" + resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" integrity sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA== lodash.truncate@^4.4.2: version "4.4.2" - resolved "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz" + resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" integrity sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw== lodash@^4.17.21: version "4.17.21" - resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== log-symbols@^6.0.0: version "6.0.0" - resolved "https://registry.npmjs.org/log-symbols/-/log-symbols-6.0.0.tgz" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-6.0.0.tgz#bb95e5f05322651cac30c0feb6404f9f2a8a9439" integrity sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw== dependencies: chalk "^5.3.0" @@ -5627,7 +5334,7 @@ log-symbols@^6.0.0: logform@^2.7.0: version "2.7.0" - resolved "https://registry.npmjs.org/logform/-/logform-2.7.0.tgz" + resolved "https://registry.yarnpkg.com/logform/-/logform-2.7.0.tgz#cfca97528ef290f2e125a08396805002b2d060d1" integrity sha512-TFYA4jnP7PVbmlBIfhlSe+WKxs9dklXMTEGcBCIvLhE/Tn3H6Gk1norupVW7m5Cnd4bLcr08AytbyV/xj7f/kQ== dependencies: "@colors/colors" "1.6.0" @@ -5639,61 +5346,34 @@ logform@^2.7.0: loglevel@^1.6.7: version "1.9.2" - resolved "https://registry.npmjs.org/loglevel/-/loglevel-1.9.2.tgz" + resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.9.2.tgz#c2e028d6c757720107df4e64508530db6621ba08" integrity sha512-HgMmCqIJSAKqo68l0rS2AanEWfkxaZ5wNiEFb5ggm08lDs9Xl2KxBlX3PTcaD2chBM1gXAYf491/M2Rv8Jwayg== long@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/long/-/long-4.0.0.tgz" + resolved "https://registry.yarnpkg.com/long/-/long-4.0.0.tgz#9a7b71cfb7d361a194ea555241c92f7468d5bf28" integrity sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA== -long@^5.0.0: - version "5.3.2" - resolved "https://registry.npmjs.org/long/-/long-5.3.2.tgz" - integrity sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA== - -loose-envify@^1.4.0: - version "1.4.0" - resolved "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz" - integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== - dependencies: - js-tokens "^3.0.0 || ^4.0.0" - -lru-cache@^6.0.0, lru-cache@6.0.0: +lru-cache@^6.0.0: version "6.0.0" - resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== dependencies: yallist "^4.0.0" -lru-memoizer@^2.1.4: - version "2.3.0" - resolved "https://registry.npmjs.org/lru-memoizer/-/lru-memoizer-2.3.0.tgz" - integrity sha512-GXn7gyHAMhO13WSKrIiNfztwxodVsP8IoZ3XfrJV4yH2x0/OeTO/FIaAHTY5YekdGgW94njfuKmyyt1E0mR6Ug== - dependencies: - lodash.clonedeep "^4.5.0" - lru-cache "6.0.0" - -make-dir@^3.0.0: - version "3.1.0" - resolved "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz" - integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== - dependencies: - semver "^6.0.0" - make-error@^1.1.1: version "1.3.6" - resolved "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz" + resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== math-intrinsics@^1.1.0: version "1.1.0" - resolved "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz" + resolved "https://registry.yarnpkg.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz#a0dd74be81e2aa5c2f27e65ce283605ee4e2b7f9" integrity sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g== md5@^2.3.0: version "2.3.0" - resolved "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz" + resolved "https://registry.yarnpkg.com/md5/-/md5-2.3.0.tgz#c3da9a6aae3a30b46b7b0c349b87b110dc3bda4f" integrity sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g== dependencies: charenc "0.0.2" @@ -5702,120 +5382,110 @@ md5@^2.3.0: media-typer@0.3.0: version "0.3.0" - resolved "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== memory-pager@^1.0.2: version "1.5.0" - resolved "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz" + resolved "https://registry.yarnpkg.com/memory-pager/-/memory-pager-1.5.0.tgz#d8751655d22d384682741c972f2c3d6dfa3e66b5" integrity sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg== merge-descriptors@1.0.3: version "1.0.3" - resolved "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.3.tgz#d80319a65f3c7935351e5cfdac8f9318504dbed5" integrity sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ== merge-stream@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== merge2@^1.3.0, merge2@^1.4.1: version "1.4.1" - resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== methods@~1.1.2: version "1.1.2" - resolved "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz" + resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== micromatch@^4.0.8: version "4.0.8" - resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202" integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA== dependencies: braces "^3.0.3" picomatch "^2.3.1" -"mime-db@>= 1.43.0 < 2": - version "1.54.0" - resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz" - integrity sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ== - mime-db@1.52.0: version "1.52.0" - resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== -mime-types@^2.0.8, mime-types@^2.1.12, mime-types@~2.1.24, mime-types@~2.1.34: +mime-types@^2.1.12, mime-types@~2.1.24, mime-types@~2.1.34: version "2.1.35" - resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== dependencies: mime-db "1.52.0" -mime@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz" - integrity sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A== - mime@1.6.0: version "1.6.0" - resolved "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== mimic-fn@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-4.0.0.tgz#60a90550d5cb0b239cca65d893b1a53b29871ecc" integrity sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw== mimic-function@^5.0.0: version "5.0.1" - resolved "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz" + resolved "https://registry.yarnpkg.com/mimic-function/-/mimic-function-5.0.1.tgz#acbe2b3349f99b9deaca7fb70e48b83e94e67076" integrity sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA== +minimatch@9.0.3: + version "9.0.3" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825" + integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== + dependencies: + brace-expansion "^2.0.1" + minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== dependencies: brace-expansion "^1.1.7" minimatch@^9.0.3: version "9.0.5" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.5.tgz#d74f9dd6b57d83d8e98cfb82133b03978bc929e5" integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow== dependencies: brace-expansion "^2.0.1" -minimatch@9.0.3: - version "9.0.3" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz" - integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== - dependencies: - brace-expansion "^2.0.1" - minimist@^1.2.0, minimist@^1.2.6: version "1.2.8" - resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== minipass@^3.0.0: version "3.3.6" - resolved "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.6.tgz#7bba384db3a1520d18c9c0e5251c3444e95dd94a" integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw== dependencies: yallist "^4.0.0" minipass@^5.0.0: version "5.0.0" - resolved "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d" integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== minizlib@^2.1.1: version "2.1.2" - resolved "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== dependencies: minipass "^3.0.0" @@ -5823,53 +5493,49 @@ minizlib@^2.1.1: mkdirp@^0.5.4: version "0.5.6" - resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== dependencies: minimist "^1.2.6" mkdirp@^1.0.3: version "1.0.4" - resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== mlly@^1.7.1, mlly@^1.7.4: - version "1.7.4" + version "1.8.0" + resolved "https://registry.yarnpkg.com/mlly/-/mlly-1.8.0.tgz#e074612b938af8eba1eaf43299cbc89cb72d824e" + integrity sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g== dependencies: - acorn "^8.14.0" - pathe "^2.0.1" - pkg-types "^1.3.0" - ufo "^1.5.4" + acorn "^8.15.0" + pathe "^2.0.3" + pkg-types "^1.3.1" + ufo "^1.6.1" moment-timezone@^0.5.43: version "0.5.48" - resolved "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.48.tgz" + resolved "https://registry.yarnpkg.com/moment-timezone/-/moment-timezone-0.5.48.tgz#111727bb274734a518ae154b5ca589283f058967" integrity sha512-f22b8LV1gbTO2ms2j2z13MuPogNoh5UzxL3nzNAYKGraILnbGc9NEE6dyiiiLv46DGRb8A4kg8UKWLjPthxBHw== dependencies: moment "^2.29.4" moment@^2.29.4: version "2.30.1" - resolved "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz" + resolved "https://registry.yarnpkg.com/moment/-/moment-2.30.1.tgz#f8c91c07b7a786e30c59926df530b4eac96974ae" integrity sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how== mongodb-connection-string-url@^2.6.0: version "2.6.0" - resolved "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-2.6.0.tgz" + resolved "https://registry.yarnpkg.com/mongodb-connection-string-url/-/mongodb-connection-string-url-2.6.0.tgz#57901bf352372abdde812c81be47b75c6b2ec5cf" integrity sha512-WvTZlI9ab0QYtTYnuMLgobULWhokRjtC7db9LtcVfJ+Hsnyr5eo6ZtNAt3Ly24XZScGMelOcGtm7lSn0332tPQ== dependencies: "@types/whatwg-url" "^8.2.1" whatwg-url "^11.0.0" -mongodb-connection-string-url@^3.0.0: - version "3.0.2" - dependencies: - "@types/whatwg-url" "^11.0.2" - whatwg-url "^14.1.0 || ^13.0.0" - mongodb@^4.1.4: version "4.17.2" - resolved "https://registry.npmjs.org/mongodb/-/mongodb-4.17.2.tgz" + resolved "https://registry.yarnpkg.com/mongodb/-/mongodb-4.17.2.tgz#237c0534e36a3449bd74c6bf6d32f87a1ca7200c" integrity sha512-mLV7SEiov2LHleRJPMPrK2PMyhXFZt2UQLC4VD4pnth3jMjYKHhtqfwwkkvS/NXuo/Fp3vbhaNcXrIDaLRb9Tg== dependencies: bson "^4.7.2" @@ -5879,102 +5545,24 @@ mongodb@^4.1.4: "@aws-sdk/credential-providers" "^3.186.0" "@mongodb-js/saslprep" "^1.1.0" -mongodb@~6.17.0: - version "6.17.0" - dependencies: - "@mongodb-js/saslprep" "^1.1.9" - bson "^6.10.4" - mongodb-connection-string-url "^3.0.0" - -mongodb@3.7.4: - version "3.7.4" - resolved "https://registry.npmjs.org/mongodb/-/mongodb-3.7.4.tgz" - integrity sha512-K5q8aBqEXMwWdVNh94UQTwZ6BejVbFhh1uB6c5FKtPE9eUMZPUO3sRZdgIEcHSrAWmxzpG/FeODDKL388sqRmw== - dependencies: - bl "^2.2.1" - bson "^1.1.4" - denque "^1.4.1" - optional-require "^1.1.8" - safe-buffer "^5.1.2" - optionalDependencies: - saslprep "^1.0.0" - -mongoose-legacy-pluralize@1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/mongoose-legacy-pluralize/-/mongoose-legacy-pluralize-1.0.2.tgz" - integrity sha512-Yo/7qQU4/EyIS8YDFSeenIvXxZN+ld7YdV9LqFVQJzTLye8unujAWPZ4NWKfFA+RNjh+wvTWKY9Z3E5XM6ZZiQ== - -mongoose@*, mongoose@^5.12.12: - version "5.13.23" - resolved "https://registry.npmjs.org/mongoose/-/mongoose-5.13.23.tgz" - integrity sha512-Q5bo1yYOcH2wbBPP4tGmcY5VKsFkQcjUDh66YjrbneAFB3vNKQwLvteRFLuLiU17rA5SDl3UMcMJLD9VS8ng2Q== - dependencies: - "@types/bson" "1.x || 4.0.x" - "@types/mongodb" "^3.5.27" - bson "^1.1.4" - kareem "2.3.2" - mongodb "3.7.4" - mongoose-legacy-pluralize "1.0.2" - mpath "0.8.4" - mquery "3.2.5" - ms "2.1.2" - optional-require "1.0.x" - regexp-clone "1.0.0" - safe-buffer "5.2.1" - sift "13.5.2" - sliced "1.0.1" - moo@^0.5.0: version "0.5.2" - resolved "https://registry.npmjs.org/moo/-/moo-0.5.2.tgz" + resolved "https://registry.yarnpkg.com/moo/-/moo-0.5.2.tgz#f9fe82473bc7c184b0d32e2215d3f6e67278733c" integrity sha512-iSAJLHYKnX41mKcJKjqvnAN9sf0LMDTXDEvFv+ffuRR9a1MIuXLjMNL6EsnDHSkKLTWNqQQ5uo61P4EbU4NU+Q== -mpath@0.8.4: - version "0.8.4" - resolved "https://registry.npmjs.org/mpath/-/mpath-0.8.4.tgz" - integrity sha512-DTxNZomBcTWlrMW76jy1wvV37X/cNNxPW1y2Jzd4DZkAaC5ZGsm8bfGfNOthcDuRJujXLqiuS6o3Tpy0JEoh7g== - -mpath@0.9.0: - version "0.9.0" - resolved "https://registry.npmjs.org/mpath/-/mpath-0.9.0.tgz" - integrity sha512-ikJRQTk8hw5DEoFVxHG1Gn9T/xcjtdnOKIU1JTmGjZZlg9LST2mBLmcX3/ICIbgJydT2GOc15RnNy5mHmzfSew== - -mquery@3.2.5: - version "3.2.5" - resolved "https://registry.npmjs.org/mquery/-/mquery-3.2.5.tgz" - integrity sha512-VjOKHHgU84wij7IUoZzFRU07IAxd5kWJaDmyUzQlbjHjyoeK5TNeeo8ZsFDtTYnSgpW6n/nMNIHvE3u8Lbrf4A== - dependencies: - bluebird "3.5.1" - debug "3.1.0" - regexp-clone "^1.0.0" - safe-buffer "5.1.2" - sliced "1.0.1" - -mquery@5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/mquery/-/mquery-5.0.0.tgz" - integrity sha512-iQMncpmEK8R8ncT8HJGsGc9Dsp8xcgYMVSbs5jgnm1lFHTZqMJTUWTDx1LBO8+mK3tPNZWFLBghQEIOULSTHZg== - dependencies: - debug "4.x" - -ms@^2.0.0, ms@^2.1.1, ms@^2.1.3, ms@2.1.3: - version "2.1.3" - resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - ms@2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== -ms@2.1.2: - version "2.1.2" - resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== +ms@2.1.3, ms@^2.0.0, ms@^2.1.1, ms@^2.1.3: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== multer@^1.4.2: version "1.4.4" - resolved "https://registry.npmjs.org/multer/-/multer-1.4.4.tgz" + resolved "https://registry.yarnpkg.com/multer/-/multer-1.4.4.tgz#e2bc6cac0df57a8832b858d7418ccaa8ebaf7d8c" integrity sha512-2wY2+xD4udX612aMqMcB8Ws2Voq6NIUPEtD1be6m411T4uDH/VtL9i//xvcyFlTVfRdaBsk7hV5tgrGQqhuBiw== dependencies: append-field "^1.0.0" @@ -5988,7 +5576,7 @@ multer@^1.4.2: multimatch@^7.0.0: version "7.0.0" - resolved "https://registry.npmjs.org/multimatch/-/multimatch-7.0.0.tgz" + resolved "https://registry.yarnpkg.com/multimatch/-/multimatch-7.0.0.tgz#d0a1bf144db9106b8d19e3cb8cabec1a8986c27f" integrity sha512-SYU3HBAdF4psHEL/+jXDKHO95/m5P2RvboHT2Y0WtTttvJLP4H/2WS9WlQPFvF6C8d6SpLw8vjCnQOnVIVOSJQ== dependencies: array-differ "^4.0.0" @@ -5997,22 +5585,22 @@ multimatch@^7.0.0: mustache@^4.2.0: version "4.2.0" - resolved "https://registry.npmjs.org/mustache/-/mustache-4.2.0.tgz" + resolved "https://registry.yarnpkg.com/mustache/-/mustache-4.2.0.tgz#e5892324d60a12ec9c2a73359edca52972bf6f64" integrity sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ== mute-stream@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-1.0.0.tgz#e31bd9fe62f0aed23520aa4324ea6671531e013e" integrity sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA== natural-compare@^1.4.0: version "1.4.0" - resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== nearley@^2.20.1: version "2.20.1" - resolved "https://registry.npmjs.org/nearley/-/nearley-2.20.1.tgz" + resolved "https://registry.yarnpkg.com/nearley/-/nearley-2.20.1.tgz#246cd33eff0d012faf197ff6774d7ac78acdd474" integrity sha512-+Mc8UaAebFzgV+KpI5n7DasuuQCHA89dmwm7JXw3TV43ukfNQ9DnBH3Mdb2g/I4Fdxc26pwimBWvjIw0UAILSQ== dependencies: commander "^2.19.0" @@ -6022,49 +5610,41 @@ nearley@^2.20.1: negotiator@0.6.3: version "0.6.3" - resolved "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== node-cron@^3.0.3: version "3.0.3" - resolved "https://registry.npmjs.org/node-cron/-/node-cron-3.0.3.tgz" + resolved "https://registry.yarnpkg.com/node-cron/-/node-cron-3.0.3.tgz#c4bc7173dd96d96c50bdb51122c64415458caff2" integrity sha512-dOal67//nohNgYWb+nWmg5dkFdIwDm8EpeGYMekPMrngV3637lqnX0lbUcCtgibHTz6SEz7DAIjKvKDFYCnO1A== dependencies: uuid "8.3.2" node-domexception@1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/node-domexception/-/node-domexception-1.0.0.tgz#6888db46a1f71c0b76b3f7555016b63fe64766e5" integrity sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ== node-fetch-native@^1.6.6: - version "1.6.6" + version "1.6.7" + resolved "https://registry.yarnpkg.com/node-fetch-native/-/node-fetch-native-1.6.7.tgz#9d09ca63066cc48423211ed4caf5d70075d76a71" + integrity sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q== -node-fetch@^2.6.1, node-fetch@^2.6.7, node-fetch@^2.6.9, node-fetch@^2.7.0: +node-fetch@^2.6.1, node-fetch@^2.6.7, node-fetch@^2.7.0: version "2.7.0" - resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== dependencies: whatwg-url "^5.0.0" -node-forge@^0.10.0: - version "0.10.0" - resolved "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz" - integrity sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA== - -node-forge@^1.3.1: - version "1.3.1" - resolved "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz" - integrity sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA== - nodemailer@^6.5.0: version "6.10.1" - resolved "https://registry.npmjs.org/nodemailer/-/nodemailer-6.10.1.tgz" + resolved "https://registry.yarnpkg.com/nodemailer/-/nodemailer-6.10.1.tgz#cbc434c54238f83a51c07eabd04e2b3e832da623" integrity sha512-Z+iLaBGVaSjbIzQ4pX6XV41HrooLsQ10ZWPUehGmuantvzWoDVBnmsdUcOIDM1t+yPor5pDhVlDESgOMEGxhHA== nodemon@^2.0.7: version "2.0.22" - resolved "https://registry.npmjs.org/nodemon/-/nodemon-2.0.22.tgz" + resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-2.0.22.tgz#182c45c3a78da486f673d6c1702e00728daf5258" integrity sha512-B8YqaKMmyuCO7BowF1Z1/mkPqLk6cs/l63Ojtd6otKjMx47Dq1utxfRxcavH1I7VSaL8n5BUaoutadnsX3AAVQ== dependencies: chokidar "^3.5.2" @@ -6080,19 +5660,19 @@ nodemon@^2.0.7: normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== npm-run-path@^5.1.0: version "5.3.0" - resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-5.3.0.tgz#e23353d0ebb9317f174e93417e4a4d82d0249e9f" integrity sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ== dependencies: path-key "^4.0.0" nypm@^0.5.4: version "0.5.4" - resolved "https://registry.npmjs.org/nypm/-/nypm-0.5.4.tgz" + resolved "https://registry.yarnpkg.com/nypm/-/nypm-0.5.4.tgz#a5ab0d8d37f96342328479f88ef58699f29b3051" integrity sha512-X0SNNrZiGU8/e/zAB7sCTtdxWTMSIO73q+xuKgglm2Yvzwlo8UoC5FNySQFCvl84uPaeADkqHUZUkWy4aH4xOA== dependencies: citty "^0.1.6" @@ -6102,34 +5682,40 @@ nypm@^0.5.4: tinyexec "^0.3.2" ufo "^1.5.4" +nypm@^0.6.0: + version "0.6.2" + resolved "https://registry.yarnpkg.com/nypm/-/nypm-0.6.2.tgz#467512024948398fafa73cea30a3ed9efc5af071" + integrity sha512-7eM+hpOtrKrBDCh7Ypu2lJ9Z7PNZBdi/8AT3AX8xoCj43BBVHD0hPSTEvMtkMpfs8FCqBGhxB+uToIQimA111g== + dependencies: + citty "^0.1.6" + consola "^3.4.2" + pathe "^2.0.3" + pkg-types "^2.3.0" + tinyexec "^1.0.1" + object-assign@^4, object-assign@^4.1.1: version "4.1.1" - resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== -object-hash@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz" - integrity sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw== - object-inspect@^1.13.3, object-inspect@^1.13.4: version "1.13.4" - resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.4.tgz#8375265e21bc20d0fa582c22e1b13485d6e00213" integrity sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew== object-keys@^1.1.1: version "1.1.1" - resolved "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== object-path@^0.11.4, object-path@^0.11.5: version "0.11.8" - resolved "https://registry.npmjs.org/object-path/-/object-path-0.11.8.tgz" + resolved "https://registry.yarnpkg.com/object-path/-/object-path-0.11.8.tgz#ed002c02bbdd0070b78a27455e8ae01fc14d4742" integrity sha512-YJjNZrlXJFM42wTBn6zgOJVar9KFJvzx6sTWDte8sWZF//cnjl0BxHNpfZx+ZffXX63A9q0b1zsFiBX4g4X5KA== -object.assign@^4.1.2, object.assign@^4.1.4, object.assign@^4.1.7: +object.assign@^4.1.2, object.assign@^4.1.7: version "4.1.7" - resolved "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.7.tgz#8c14ca1a424c6a561b0bb2a22f66f5049a945d3d" integrity sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw== dependencies: call-bind "^1.0.8" @@ -6139,9 +5725,9 @@ object.assign@^4.1.2, object.assign@^4.1.4, object.assign@^4.1.7: has-symbols "^1.1.0" object-keys "^1.1.1" -object.entries@^1.1.2, object.entries@^1.1.9: +object.entries@^1.1.2: version "1.1.9" - resolved "https://registry.npmjs.org/object.entries/-/object.entries-1.1.9.tgz" + resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.9.tgz#e4770a6a1444afb61bd39f984018b5bede25f8b3" integrity sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw== dependencies: call-bind "^1.0.8" @@ -6151,7 +5737,7 @@ object.entries@^1.1.2, object.entries@^1.1.9: object.fromentries@^2.0.8: version "2.0.8" - resolved "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz" + resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.8.tgz#f7195d8a9b97bd95cbc1999ea939ecd1a2b00c65" integrity sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ== dependencies: call-bind "^1.0.7" @@ -6161,7 +5747,7 @@ object.fromentries@^2.0.8: object.getownpropertydescriptors@^2.1.8: version "2.1.8" - resolved "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.8.tgz" + resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.8.tgz#2f1fe0606ec1a7658154ccd4f728504f69667923" integrity sha512-qkHIGe4q0lSYMv0XI4SsBTJz3WaURhLvd0lKSgtVuOsJ2krg4SgMw3PIRQFMp07yi++UR3se2mkcLqsBNpBb/A== dependencies: array.prototype.reduce "^1.0.6" @@ -6174,16 +5760,16 @@ object.getownpropertydescriptors@^2.1.8: object.groupby@^1.0.3: version "1.0.3" - resolved "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz" + resolved "https://registry.yarnpkg.com/object.groupby/-/object.groupby-1.0.3.tgz#9b125c36238129f6f7b61954a1e7176148d5002e" integrity sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ== dependencies: call-bind "^1.0.7" define-properties "^1.2.1" es-abstract "^1.23.2" -object.values@^1.1.6, object.values@^1.2.1: +object.values@^1.2.1: version "1.2.1" - resolved "https://registry.npmjs.org/object.values/-/object.values-1.2.1.tgz" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.2.1.tgz#deed520a50809ff7f75a7cfd4bc64c7a038c6216" integrity sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA== dependencies: call-bind "^1.0.8" @@ -6193,47 +5779,52 @@ object.values@^1.1.6, object.values@^1.2.1: ohash@^1.1.3: version "1.1.6" - resolved "https://registry.npmjs.org/ohash/-/ohash-1.1.6.tgz" + resolved "https://registry.yarnpkg.com/ohash/-/ohash-1.1.6.tgz#9ff7b0271d7076290794537d68ec2b40a60d133e" integrity sha512-TBu7PtV8YkAZn0tSxobKY2n2aAQva936lhRrj6957aDaCf9IEtqsKbgMzXE/F/sjqYOwmrukeORHNLe5glk7Cg== -on-finished@^2.3.0, on-finished@2.4.1: +ohash@^2.0.11: + version "2.0.11" + resolved "https://registry.yarnpkg.com/ohash/-/ohash-2.0.11.tgz#60b11e8cff62ca9dee88d13747a5baa145f5900b" + integrity sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ== + +on-finished@2.4.1, on-finished@^2.3.0: version "2.4.1" - resolved "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== dependencies: ee-first "1.1.1" -once@^1.3.0, once@^1.3.1, once@^1.4.0: +once@^1.3.0: version "1.4.0" - resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== dependencies: wrappy "1" one-time@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/one-time/-/one-time-1.0.0.tgz#e06bc174aed214ed58edede573b433bbf827cb45" integrity sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g== dependencies: fn.name "1.x.x" onetime@^6.0.0: version "6.0.0" - resolved "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-6.0.0.tgz#7c24c18ed1fd2e9bca4bd26806a33613c77d34b4" integrity sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ== dependencies: mimic-fn "^4.0.0" onetime@^7.0.0: version "7.0.0" - resolved "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-7.0.0.tgz#9f16c92d8c9ef5120e3acd9dd9957cceecc1ab60" integrity sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ== dependencies: mimic-function "^5.0.0" -openai@*, openai@^4.57.3: +openai@^4.57.3: version "4.104.0" - resolved "https://registry.npmjs.org/openai/-/openai-4.104.0.tgz" + resolved "https://registry.yarnpkg.com/openai/-/openai-4.104.0.tgz#c489765dc051b95019845dab64b0e5207cae4d30" integrity sha512-p99EFNsA/yX6UhVO93f5kJsDRLAg+CTA2RBqdHK4RtK8u5IJw32Hyb2dTGKbnnFmnuoBv5r7Z2CURI9sGZpSuA== dependencies: "@types/node" "^18.11.18" @@ -6244,19 +5835,9 @@ openai@*, openai@^4.57.3: formdata-node "^4.3.2" node-fetch "^2.6.7" -optional-require@^1.1.8: - version "1.1.8" - dependencies: - require-at "^1.0.6" - -optional-require@1.0.x: - version "1.0.3" - resolved "https://registry.npmjs.org/optional-require/-/optional-require-1.0.3.tgz" - integrity sha512-RV2Zp2MY2aeYK5G+B/Sps8lW5NHAzE5QClbFP15j+PWmP+T9PxlJXBOOLoSAdgwFvS4t0aMR4vpedMkbHfh0nA== - optionator@^0.9.1: version "0.9.4" - resolved "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.4.tgz#7ea1c1a5d91d764fb282139c88fe11e182a3a734" integrity sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g== dependencies: deep-is "^0.1.3" @@ -6268,7 +5849,7 @@ optionator@^0.9.1: ora@^8.0.1: version "8.2.0" - resolved "https://registry.npmjs.org/ora/-/ora-8.2.0.tgz" + resolved "https://registry.yarnpkg.com/ora/-/ora-8.2.0.tgz#8fbbb7151afe33b540dd153f171ffa8bd38e9861" integrity sha512-weP+BZ8MVNnlCm8c0Qdc1WSWq4Qn7I+9CJGm7Qali6g44e/PUzbjNqJX5NJ9ljlNMosfJvg1fKEGILklK9cwnw== dependencies: chalk "^5.3.0" @@ -6283,12 +5864,12 @@ ora@^8.0.1: os-tmpdir@~1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== own-keys@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/own-keys/-/own-keys-1.0.1.tgz#e4006910a2bf913585289676eebd6f390cf51358" integrity sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg== dependencies: get-intrinsic "^1.2.6" @@ -6297,33 +5878,26 @@ own-keys@^1.0.1: p-finally@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" integrity sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow== -p-limit@^3.0.1: - version "3.1.0" - resolved "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz" - integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== - dependencies: - yocto-queue "^0.1.0" - p-limit@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-4.0.0.tgz#914af6544ed32bfa54670b061cafcbd04984b644" integrity sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ== dependencies: yocto-queue "^1.0.0" p-locate@^6.0.0: version "6.0.0" - resolved "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-6.0.0.tgz#3da9a49d4934b901089dca3302fa65dc5a05c04f" integrity sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw== dependencies: p-limit "^4.0.0" p-queue@^6.6.2: version "6.6.2" - resolved "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz" + resolved "https://registry.yarnpkg.com/p-queue/-/p-queue-6.6.2.tgz#2068a9dcf8e67dd0ec3e7a2bcb76810faa85e426" integrity sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ== dependencies: eventemitter3 "^4.0.4" @@ -6331,7 +5905,7 @@ p-queue@^6.6.2: p-retry@4: version "4.6.2" - resolved "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz" + resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-4.6.2.tgz#9baae7184057edd4e17231cee04264106e092a16" integrity sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ== dependencies: "@types/retry" "0.12.0" @@ -6339,107 +5913,111 @@ p-retry@4: p-timeout@^3.2.0: version "3.2.0" - resolved "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz" + resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-3.2.0.tgz#c7e17abc971d2a7962ef83626b35d635acf23dfe" integrity sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg== dependencies: p-finally "^1.0.0" pako@^0.2.5: version "0.2.9" - resolved "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz" + resolved "https://registry.yarnpkg.com/pako/-/pako-0.2.9.tgz#f3f7522f4ef782348da8161bad9ecfd51bf83a75" integrity sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA== pako@^1.0.6: version "1.0.11" - resolved "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz" + resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== parent-module@^1.0.0: version "1.0.1" - resolved "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== dependencies: callsites "^3.0.0" parseurl@^1.3.2, parseurl@~1.3.3: version "1.3.3" - resolved "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== path-exists@^5.0.0: version "5.0.0" - resolved "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-5.0.0.tgz#a6aad9489200b21fab31e49cf09277e5116fb9e7" integrity sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ== path-is-absolute@^1.0.0: version "1.0.1" - resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== path-key@^3.1.0: version "3.1.1" - resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== path-key@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-4.0.0.tgz#295588dc3aee64154f877adb9d780b81c554bf18" integrity sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ== path-parse@^1.0.7: version "1.0.7" - resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== path-to-regexp@0.1.12: version "0.1.12" - resolved "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.12.tgz#d5e1a12e478a976d432ef3c58d534b9923164bb7" integrity sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ== path-type@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== pathe@^1.1.2: version "1.1.2" - resolved "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz" + resolved "https://registry.yarnpkg.com/pathe/-/pathe-1.1.2.tgz#6c4cb47a945692e48a1ddd6e4094d170516437ec" integrity sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ== pathe@^2.0.1, pathe@^2.0.3: version "2.0.3" - resolved "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz" + resolved "https://registry.yarnpkg.com/pathe/-/pathe-2.0.3.tgz#3ecbec55421685b70a9da872b2cff3e1cbed1716" integrity sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w== perfect-debounce@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/perfect-debounce/-/perfect-debounce-1.0.0.tgz#9c2e8bc30b169cc984a58b7d5b28049839591d2a" integrity sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA== -pg-cloudflare@^1.2.6: - version "1.2.6" +pg-cloudflare@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/pg-cloudflare/-/pg-cloudflare-1.2.7.tgz#a1f3d226bab2c45ae75ea54d65ec05ac6cfafbef" + integrity sha512-YgCtzMH0ptvZJslLM1ffsY4EuGaU0cx4XSdXLRFae8bPP4dS5xL1tNB3k2o/N64cHJpwU7dxKli/nZ2lUa5fLg== pg-connection-string@^2.6.1, pg-connection-string@^2.9.1: version "2.9.1" - resolved "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.9.1.tgz" + resolved "https://registry.yarnpkg.com/pg-connection-string/-/pg-connection-string-2.9.1.tgz#bb1fd0011e2eb76ac17360dc8fa183b2d3465238" integrity sha512-nkc6NpDcvPVpZXxrreI/FOtX3XemeLl8E0qFr6F2Lrm/I8WOnaWNhIPK2Z7OHpw7gh5XJThi6j6ppgNoaT1w4w== pg-int8@1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/pg-int8/-/pg-int8-1.0.1.tgz#943bd463bf5b71b4170115f80f8efc9a0c0eb78c" integrity sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw== pg-pool@^3.10.1: version "3.10.1" - resolved "https://registry.npmjs.org/pg-pool/-/pg-pool-3.10.1.tgz" + resolved "https://registry.yarnpkg.com/pg-pool/-/pg-pool-3.10.1.tgz#481047c720be2d624792100cac1816f8850d31b2" integrity sha512-Tu8jMlcX+9d8+QVzKIvM/uJtp07PKr82IUOYEphaWcoBhIYkoHpLXN3qO59nAI11ripznDsEzEv8nUxBVWajGg== -pg-protocol@^1.10.2, pg-protocol@^1.2.0: - version "1.10.2" +pg-protocol@^1.10.3, pg-protocol@^1.2.0: + version "1.10.3" + resolved "https://registry.yarnpkg.com/pg-protocol/-/pg-protocol-1.10.3.tgz#ac9e4778ad3f84d0c5670583bab976ea0a34f69f" + integrity sha512-6DIBgBQaTKDJyxnXaLiLR8wBpQQcGWuAESkRBX/t6OwA8YsqP+iVSiond2EDy6Y/dsGk8rh/jtax3js5NeV7JQ== -pg-types@^2.2.0, pg-types@2.2.0: +pg-types@2.2.0, pg-types@^2.2.0: version "2.2.0" - resolved "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz" + resolved "https://registry.yarnpkg.com/pg-types/-/pg-types-2.2.0.tgz#2d0250d636454f7cfa3b6ae0382fdfa8063254a3" integrity sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA== dependencies: pg-int8 "1.0.1" @@ -6448,100 +6026,111 @@ pg-types@^2.2.0, pg-types@2.2.0: postgres-date "~1.0.4" postgres-interval "^1.1.0" -pg@^8.5.1, pg@>=8, pg@>=8.0: - version "8.16.2" +pg@^8.5.1: + version "8.16.3" + resolved "https://registry.yarnpkg.com/pg/-/pg-8.16.3.tgz#160741d0b44fdf64680e45374b06d632e86c99fd" + integrity sha512-enxc1h0jA/aq5oSDMvqyW3q89ra6XIIDZgCX9vkMrnz5DFTw/Ny3Li2lFQ+pt3L6MCgm/5o2o8HW9hiJji+xvw== dependencies: pg-connection-string "^2.9.1" pg-pool "^3.10.1" - pg-protocol "^1.10.2" + pg-protocol "^1.10.3" pg-types "2.2.0" pgpass "1.0.5" optionalDependencies: - pg-cloudflare "^1.2.6" + pg-cloudflare "^1.2.7" pgpass@1.0.5: version "1.0.5" - resolved "https://registry.npmjs.org/pgpass/-/pgpass-1.0.5.tgz" + resolved "https://registry.yarnpkg.com/pgpass/-/pgpass-1.0.5.tgz#9b873e4a564bb10fa7a7dbd55312728d422a223d" integrity sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug== dependencies: split2 "^4.1.0" picocolors@^1.0.0: version "1.1.1" - resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: version "2.3.1" - resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== -pkg-types@^1.2.0, pkg-types@^1.3.0, pkg-types@^1.3.1: +pkg-types@^1.2.0, pkg-types@^1.3.1: version "1.3.1" - resolved "https://registry.npmjs.org/pkg-types/-/pkg-types-1.3.1.tgz" + resolved "https://registry.yarnpkg.com/pkg-types/-/pkg-types-1.3.1.tgz#bd7cc70881192777eef5326c19deb46e890917df" integrity sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ== dependencies: confbox "^0.1.8" mlly "^1.7.4" pathe "^2.0.1" +pkg-types@^2.2.0, pkg-types@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pkg-types/-/pkg-types-2.3.0.tgz#037f2c19bd5402966ff6810e32706558cb5b5726" + integrity sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig== + dependencies: + confbox "^0.2.2" + exsolve "^1.0.7" + pathe "^2.0.3" + pluralize@^8.0.0: version "8.0.0" - resolved "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz" + resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-8.0.0.tgz#1a6fa16a38d12a1901e0320fa017051c539ce3b1" integrity sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA== pony-cause@^2.1.4: version "2.1.11" - resolved "https://registry.npmjs.org/pony-cause/-/pony-cause-2.1.11.tgz" + resolved "https://registry.yarnpkg.com/pony-cause/-/pony-cause-2.1.11.tgz#d69a20aaccdb3bdb8f74dd59e5c68d8e6772e4bd" integrity sha512-M7LhCsdNbNgiLYiP4WjsfLUuFmCfnjdF6jKe2R9NKl4WFN+HZPGHJZ9lnLP7f9ZnKe3U9nuWD0szirmj+migUg== possible-typed-array-names@^1.0.0: version "1.1.0" - resolved "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz" + resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz#93e3582bc0e5426586d9d07b79ee40fc841de4ae" integrity sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg== postgres-array@~2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz" + resolved "https://registry.yarnpkg.com/postgres-array/-/postgres-array-2.0.0.tgz#48f8fce054fbc69671999329b8834b772652d82e" integrity sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA== postgres-bytea@~1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/postgres-bytea/-/postgres-bytea-1.0.0.tgz#027b533c0aa890e26d172d47cf9ccecc521acd35" integrity sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w== postgres-date@~1.0.4: version "1.0.7" - resolved "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz" + resolved "https://registry.yarnpkg.com/postgres-date/-/postgres-date-1.0.7.tgz#51bc086006005e5061c591cee727f2531bf641a8" integrity sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q== postgres-interval@^1.1.0: version "1.2.0" - resolved "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz" + resolved "https://registry.yarnpkg.com/postgres-interval/-/postgres-interval-1.2.0.tgz#b460c82cb1587507788819a06aa0fffdb3544695" integrity sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ== dependencies: xtend "^4.0.0" prelude-ls@^1.2.1: version "1.2.1" - resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== prettier-linter-helpers@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== dependencies: fast-diff "^1.1.2" -prettier@^2.2.1, prettier@>=1.13.0: +prettier@^2.2.1: version "2.8.8" - resolved "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da" integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== pretty-format@^26.0.0, pretty-format@^26.6.2: version "26.6.2" - resolved "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-26.6.2.tgz#e35c2705f14cb7fe2fe94fa078345b444120fc93" integrity sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg== dependencies: "@jest/types" "^26.6.2" @@ -6549,108 +6138,40 @@ pretty-format@^26.0.0, pretty-format@^26.6.2: ansi-styles "^4.0.0" react-is "^17.0.1" -prisma@*, prisma@^6.9.0: - version "6.10.1" +prisma@^6.9.0: + version "6.19.0" + resolved "https://registry.yarnpkg.com/prisma/-/prisma-6.19.0.tgz#9882425df57a7de72f73c6a41592ff9eda0b00a8" + integrity sha512-F3eX7K+tWpkbhl3l4+VkFtrwJlLXbAM+f9jolgoUZbFcm1DgHZ4cq9AgVEgUym2au5Ad/TDLN8lg83D+M10ycw== dependencies: - "@prisma/config" "6.10.1" - "@prisma/engines" "6.10.1" + "@prisma/config" "6.19.0" + "@prisma/engines" "6.19.0" process-nextick-args@~2.0.0: version "2.0.1" - resolved "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== process@^0.11.10: version "0.11.10" - resolved "https://registry.npmjs.org/process/-/process-0.11.10.tgz" + resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== progress@^2.0.0: version "2.0.3" - resolved "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz" + resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== prompts@2.4.2: version "2.4.2" - resolved "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz" + resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== dependencies: kleur "^3.0.3" sisteransi "^1.0.5" -prop-types@^15.8.1: - version "15.8.1" - resolved "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz" - integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== - dependencies: - loose-envify "^1.4.0" - object-assign "^4.1.1" - react-is "^16.13.1" - -proto3-json-serializer@^0.1.8: - version "0.1.9" - resolved "https://registry.npmjs.org/proto3-json-serializer/-/proto3-json-serializer-0.1.9.tgz" - integrity sha512-A60IisqvnuI45qNRygJjrnNjX2TMdQGMY+57tR3nul3ZgO2zXkR9OGR8AXxJhkqx84g0FTnrfi3D5fWMSdANdQ== - dependencies: - protobufjs "^6.11.2" - -protobufjs@^6.11.2, protobufjs@^6.11.3, protobufjs@^6.8.6: - version "6.11.4" - resolved "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.4.tgz" - integrity sha512-5kQWPaJHi1WoCpjTGszzQ32PG2F4+wRY6BmAT4Vfw56Q2FZ4YZzK20xUYQH4YkfehY1e6QSICrJquM6xXZNcrw== - dependencies: - "@protobufjs/aspromise" "^1.1.2" - "@protobufjs/base64" "^1.1.2" - "@protobufjs/codegen" "^2.0.4" - "@protobufjs/eventemitter" "^1.1.0" - "@protobufjs/fetch" "^1.1.0" - "@protobufjs/float" "^1.0.2" - "@protobufjs/inquire" "^1.1.0" - "@protobufjs/path" "^1.1.2" - "@protobufjs/pool" "^1.1.0" - "@protobufjs/utf8" "^1.1.0" - "@types/long" "^4.0.1" - "@types/node" ">=13.7.0" - long "^4.0.0" - -protobufjs@^7.2.5: - version "7.5.3" - dependencies: - "@protobufjs/aspromise" "^1.1.2" - "@protobufjs/base64" "^1.1.2" - "@protobufjs/codegen" "^2.0.4" - "@protobufjs/eventemitter" "^1.1.0" - "@protobufjs/fetch" "^1.1.0" - "@protobufjs/float" "^1.0.2" - "@protobufjs/inquire" "^1.1.0" - "@protobufjs/path" "^1.1.2" - "@protobufjs/pool" "^1.1.0" - "@protobufjs/utf8" "^1.1.0" - "@types/node" ">=13.7.0" - long "^5.0.0" - -protobufjs@6.11.3: - version "6.11.3" - resolved "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.3.tgz" - integrity sha512-xL96WDdCZYdU7Slin569tFX712BxsxslWwAfAhCYjQKGTq7dAU91Lomy6nLLhh/dyGhk/YH4TwTSRxTzhuHyZg== - dependencies: - "@protobufjs/aspromise" "^1.1.2" - "@protobufjs/base64" "^1.1.2" - "@protobufjs/codegen" "^2.0.4" - "@protobufjs/eventemitter" "^1.1.0" - "@protobufjs/fetch" "^1.1.0" - "@protobufjs/float" "^1.0.2" - "@protobufjs/inquire" "^1.1.0" - "@protobufjs/path" "^1.1.2" - "@protobufjs/pool" "^1.1.0" - "@protobufjs/utf8" "^1.1.0" - "@types/long" "^4.0.1" - "@types/node" ">=13.7.0" - long "^4.0.0" - proxy-addr@~2.0.7: version "2.0.7" - resolved "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== dependencies: forwarded "0.2.0" @@ -6658,51 +6179,34 @@ proxy-addr@~2.0.7: pstree.remy@^1.1.8: version "1.1.8" - resolved "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz" + resolved "https://registry.yarnpkg.com/pstree.remy/-/pstree.remy-1.1.8.tgz#c242224f4a67c21f686839bbdb4ac282b8373d3a" integrity sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w== -pump@^3.0.0: - version "3.0.3" - resolved "https://registry.npmjs.org/pump/-/pump-3.0.3.tgz" - integrity sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - -pumpify@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/pumpify/-/pumpify-2.0.1.tgz" - integrity sha512-m7KOje7jZxrmutanlkS1daj1dS6z6BgslzOXmcSEpIlCxM3VJH7lG5QLeck/6hgF6F4crFf01UtQmNsJfweTAw== - dependencies: - duplexify "^4.1.1" - inherits "^2.0.3" - pump "^3.0.0" - -punycode@^1.4.1: - version "1.4.1" - resolved "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz" - integrity sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ== - -punycode@^2.1.0, punycode@^2.1.1, punycode@^2.3.1: +punycode@^2.1.0, punycode@^2.1.1: version "2.3.1" - resolved "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== +pure-rand@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/pure-rand/-/pure-rand-6.1.0.tgz#d173cf23258231976ccbdb05247c9787957604f2" + integrity sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA== + qs@6.13.0: version "6.13.0" - resolved "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.13.0.tgz#6ca3bd58439f7e245655798997787b0d88a51906" integrity sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg== dependencies: side-channel "^1.0.6" queue-microtask@^1.2.2: version "1.2.3" - resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" + resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== quicktype-core@23.0.149: version "23.0.149" - resolved "https://registry.npmjs.org/quicktype-core/-/quicktype-core-23.0.149.tgz" + resolved "https://registry.yarnpkg.com/quicktype-core/-/quicktype-core-23.0.149.tgz#814dff9a16dc2ecc70f2ab6ed7c378bd29f2e036" integrity sha512-P6orZe46XwDcl17MdJc1SLgAornP3XzEHYE25vhS2DWG5t0mszS9oSS5BiFir/XnBv2Ak0P70Zz5m7C2WhLjWw== dependencies: "@glideapps/ts-necessities" "2.2.3" @@ -6723,12 +6227,12 @@ quicktype-core@23.0.149: railroad-diagrams@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/railroad-diagrams/-/railroad-diagrams-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/railroad-diagrams/-/railroad-diagrams-1.0.0.tgz#eb7e6267548ddedfb899c1b90e57374559cddb7e" integrity sha512-cz93DjNeLY0idrCNOH6PviZGRN9GJhsdm9hpn1YCS879fj4W+x5IFJhhkRZcwVgMmFF7R82UA/7Oh+R8lLZg6A== randexp@0.4.6: version "0.4.6" - resolved "https://registry.npmjs.org/randexp/-/randexp-0.4.6.tgz" + resolved "https://registry.yarnpkg.com/randexp/-/randexp-0.4.6.tgz#e986ad5e5e31dae13ddd6f7b3019aa7c87f60ca3" integrity sha512-80WNmd9DA0tmZrw9qQa62GPPWfuXJknrmVmLcxvq4uZBdYqb1wYoKTmnlGUchvVWe0XiLupYkBoXVOxz3C8DYQ== dependencies: discontinuous-range "1.0.0" @@ -6736,12 +6240,12 @@ randexp@0.4.6: range-parser@~1.2.1: version "1.2.1" - resolved "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== raw-body@2.5.2: version "2.5.2" - resolved "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.2.tgz#99febd83b90e08975087e8f1f9419a149366b68a" integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA== dependencies: bytes "3.1.2" @@ -6751,38 +6255,41 @@ raw-body@2.5.2: rc9@^2.1.2: version "2.1.2" - resolved "https://registry.npmjs.org/rc9/-/rc9-2.1.2.tgz" + resolved "https://registry.yarnpkg.com/rc9/-/rc9-2.1.2.tgz#6282ff638a50caa0a91a31d76af4a0b9cbd1080d" integrity sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg== dependencies: defu "^6.1.4" destr "^2.0.3" -react-is@^16.13.1: - version "16.13.1" - resolved "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz" - integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== - react-is@^17.0.1: version "17.0.2" - resolved "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== -readable-stream@^2.2.2: - version "2.3.8" - resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz" - integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== +readable-stream@1.1.x: + version "1.1.14" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" + integrity sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ== dependencies: core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.1.1" - util-deprecate "~1.0.1" + inherits "~2.0.1" + isarray "0.0.1" + string_decoder "~0.10.x" + +readable-stream@4.5.2: + version "4.5.2" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-4.5.2.tgz#9e7fc4c45099baeed934bff6eb97ba6cf2729e09" + integrity sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g== + dependencies: + abort-controller "^3.0.0" + buffer "^6.0.3" + events "^3.3.0" + process "^0.11.10" + string_decoder "^1.3.0" -readable-stream@^2.3.5: +readable-stream@^2.2.2: version "2.3.8" - resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== dependencies: core-util-is "~1.0.0" @@ -6793,51 +6300,35 @@ readable-stream@^2.3.5: string_decoder "~1.1.1" util-deprecate "~1.0.1" -readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.2: +readable-stream@^3.4.0, readable-stream@^3.6.2: version "3.6.2" - resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== dependencies: inherits "^2.0.3" string_decoder "^1.1.1" util-deprecate "^1.0.1" -readable-stream@1.1.x: - version "1.1.14" - resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz" - integrity sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "0.0.1" - string_decoder "~0.10.x" - -readable-stream@4.5.2: - version "4.5.2" - resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-4.5.2.tgz" - integrity sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g== - dependencies: - abort-controller "^3.0.0" - buffer "^6.0.3" - events "^3.3.0" - process "^0.11.10" - string_decoder "^1.3.0" +readdirp@^4.0.1: + version "4.1.2" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-4.1.2.tgz#eb85801435fbf2a7ee58f19e0921b068fc69948d" + integrity sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg== readdirp@~3.6.0: version "3.6.0" - resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== dependencies: picomatch "^2.2.1" -reflect-metadata@*, reflect-metadata@^0.1.13: +reflect-metadata@^0.1.13: version "0.1.14" - resolved "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.14.tgz" + resolved "https://registry.yarnpkg.com/reflect-metadata/-/reflect-metadata-0.1.14.tgz#24cf721fe60677146bb77eeb0e1f9dece3d65859" integrity sha512-ZhYeb6nRaXCfhnndflDK8qI6ZQ/YcWZCISRAWICW9XYqMUwjZM9Z0DveWX/ABN01oxSHwVxKQmxeYZSsm0jh5A== reflect.getprototypeof@^1.0.6, reflect.getprototypeof@^1.0.9: version "1.0.10" - resolved "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz" + resolved "https://registry.yarnpkg.com/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz#c629219e78a3316d8b604c765ef68996964e7bf9" integrity sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw== dependencies: call-bind "^1.0.8" @@ -6849,14 +6340,9 @@ reflect.getprototypeof@^1.0.6, reflect.getprototypeof@^1.0.9: get-proto "^1.0.1" which-builtin-type "^1.2.1" -regexp-clone@^1.0.0, regexp-clone@1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/regexp-clone/-/regexp-clone-1.0.0.tgz" - integrity sha512-TuAasHQNamyyJ2hb97IuBEif4qBHGjPHBS64sZwytpLEqtBQ1gPJTnOaQ6qmpET16cK14kkjbazl6+p0RRv0yw== - -regexp.prototype.flags@^1.5.3, regexp.prototype.flags@^1.5.4: +regexp.prototype.flags@^1.5.4: version "1.5.4" - resolved "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz#1ad6c62d44a259007e55b3970e00f746efbcaa19" integrity sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA== dependencies: call-bind "^1.0.8" @@ -6868,60 +6354,46 @@ regexp.prototype.flags@^1.5.3, regexp.prototype.flags@^1.5.4: regexpp@^3.1.0: version "3.2.0" - resolved "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== remeda@^1.61.0: version "1.61.0" - resolved "https://registry.npmjs.org/remeda/-/remeda-1.61.0.tgz" + resolved "https://registry.yarnpkg.com/remeda/-/remeda-1.61.0.tgz#dccd31ab75d0f02865f3ef89e4f0ce0076096464" integrity sha512-caKfSz9rDeSKBQQnlJnVW3mbVdFgxgGWQKq1XlFokqjf+hQD5gxutLGTTY2A/x24UxVyJe9gH5fAkFI63ULw4A== -require-at@^1.0.6: - version "1.0.6" - resolved "https://registry.npmjs.org/require-at/-/require-at-1.0.6.tgz" - integrity sha512-7i1auJbMUrXEAZCOQ0VNJgmcT2VOKPRl2YGJwgpHpC9CE91Mv4/4UYIUm4chGJaI381ZDq1JUicFii64Hapd8g== - require-directory@^2.1.1: version "2.1.1" - resolved "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== require-from-string@^2.0.2: version "2.0.2" - resolved "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz" + resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== resolve-from@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== resolve-pkg-maps@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz#616b3dc2c57056b5588c31cdf4b3d64db133720f" integrity sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw== resolve@^1.22.4, resolve@~1.22.1: - version "1.22.10" - resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz" - integrity sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w== - dependencies: - is-core-module "^2.16.0" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" - -resolve@^2.0.0-next.5: - version "2.0.0-next.5" - resolved "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz" - integrity sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA== + version "1.22.11" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.11.tgz#aad857ce1ffb8bfa9b0b1ac29f1156383f68c262" + integrity sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ== dependencies: - is-core-module "^2.13.0" + is-core-module "^2.16.1" path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" restore-cursor@^5.0.0: version "5.1.0" - resolved "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-5.1.0.tgz#0766d95699efacb14150993f55baf0953ea1ebe7" integrity sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA== dependencies: onetime "^7.0.0" @@ -6929,49 +6401,41 @@ restore-cursor@^5.0.0: ret@~0.1.10: version "0.1.15" - resolved "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz" + resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== retry-as-promised@^7.0.4: version "7.1.1" - resolved "https://registry.npmjs.org/retry-as-promised/-/retry-as-promised-7.1.1.tgz" + resolved "https://registry.yarnpkg.com/retry-as-promised/-/retry-as-promised-7.1.1.tgz#3626246f04c1941ff10cebcfa3df0577fd8ab2d7" integrity sha512-hMD7odLOt3LkTjcif8aRZqi/hybjpLNgSk5oF5FCowfCjok6LukpN2bDX7R5wDmbgBQFn7YoBxSagmtXHaJYJw== -retry-request@^4.0.0, retry-request@^4.2.2: - version "4.2.2" - resolved "https://registry.npmjs.org/retry-request/-/retry-request-4.2.2.tgz" - integrity sha512-xA93uxUD/rogV7BV59agW/JHPGXeREMWiZc9jhcwY4YdZ7QOtC7qbomYg0n4wyk2lJhggjvKvhNX8wln/Aldhg== - dependencies: - debug "^4.1.1" - extend "^3.0.2" - -retry@^0.13.1, retry@0.13.1: +retry@0.13.1, retry@^0.13.1: version "0.13.1" - resolved "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.13.1.tgz#185b1587acf67919d63b357349e03537b2484658" integrity sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg== reusify@^1.0.4: version "1.1.0" - resolved "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.1.0.tgz#0fe13b9522e1473f51b558ee796e08f11f9b489f" integrity sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw== rimraf@^3.0.2: version "3.0.2" - resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== dependencies: glob "^7.1.3" run-parallel@^1.1.9: version "1.2.0" - resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== dependencies: queue-microtask "^1.2.2" safe-array-concat@^1.1.2, safe-array-concat@^1.1.3: version "1.1.3" - resolved "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz" + resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.1.3.tgz#c9e54ec4f603b0bbb8e7e5007a5ee7aecd1538c3" integrity sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q== dependencies: call-bind "^1.0.8" @@ -6980,32 +6444,27 @@ safe-array-concat@^1.1.2, safe-array-concat@^1.1.3: has-symbols "^1.1.0" isarray "^2.0.5" -safe-buffer@^5.0.1, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@>=5.1.0, safe-buffer@~5.2.0, safe-buffer@5.2.1: +safe-buffer@5.2.1, safe-buffer@^5.0.1, safe-buffer@^5.2.1, safe-buffer@~5.2.0: version "5.2.1" - resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" - resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - -safe-buffer@5.1.2: - version "5.1.2" - resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== safe-push-apply@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/safe-push-apply/-/safe-push-apply-1.0.0.tgz#01850e981c1602d398c85081f360e4e6d03d27f5" integrity sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA== dependencies: es-errors "^1.3.0" isarray "^2.0.5" -safe-regex-test@^1.0.3, safe-regex-test@^1.1.0: +safe-regex-test@^1.1.0: version "1.1.0" - resolved "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz" + resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.1.0.tgz#7f87dfb67a3150782eaaf18583ff5d1711ac10c1" integrity sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw== dependencies: call-bound "^1.0.2" @@ -7014,59 +6473,44 @@ safe-regex-test@^1.0.3, safe-regex-test@^1.1.0: safe-stable-stringify@^2.3.1: version "2.5.0" - resolved "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz" + resolved "https://registry.yarnpkg.com/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz#4ca2f8e385f2831c432a719b108a3bf7af42a1dd" integrity sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA== "safer-buffer@>= 2.1.2 < 3": version "2.1.2" - resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -saslprep@^1.0.0: - version "1.0.3" - resolved "https://registry.npmjs.org/saslprep/-/saslprep-1.0.3.tgz" - integrity sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag== - dependencies: - sparse-bitfield "^3.0.3" - -semver@^5.6.0: - version "5.7.2" - resolved "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz" - integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== - semver@^5.7.1: version "5.7.2" - resolved "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== -semver@^6.0.0: - version "6.3.1" - resolved "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz" - integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== - semver@^6.3.1: version "6.3.1" - resolved "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== semver@^7.2.1, semver@^7.3.5, semver@^7.5.4, semver@^7.6.3: - version "7.7.2" + version "7.7.3" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.3.tgz#4b5f4143d007633a8dc671cd0a6ef9147b8bb946" + integrity sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q== semver@~7.0.0: version "7.0.0" - resolved "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== semver@~7.5.4: version "7.5.4" - resolved "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== dependencies: lru-cache "^6.0.0" send@0.19.0: version "0.19.0" - resolved "https://registry.npmjs.org/send/-/send-0.19.0.tgz" + resolved "https://registry.yarnpkg.com/send/-/send-0.19.0.tgz#bbc5a388c8ea6c048967049dbeac0e4a3f09d7f8" integrity sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw== dependencies: debug "2.6.9" @@ -7085,19 +6529,19 @@ send@0.19.0: sequelize-pool@^7.1.0: version "7.1.0" - resolved "https://registry.npmjs.org/sequelize-pool/-/sequelize-pool-7.1.0.tgz" + resolved "https://registry.yarnpkg.com/sequelize-pool/-/sequelize-pool-7.1.0.tgz#210b391af4002762f823188fd6ecfc7413020768" integrity sha512-G9c0qlIWQSK29pR/5U2JF5dDQeqqHRragoyahj/Nx4KOOQ3CPPfzxnfqFPCSB7x5UgjOgnZ61nSxz+fjDpRlJg== sequelize-typescript@^2.1.6: version "2.1.6" - resolved "https://registry.npmjs.org/sequelize-typescript/-/sequelize-typescript-2.1.6.tgz" + resolved "https://registry.yarnpkg.com/sequelize-typescript/-/sequelize-typescript-2.1.6.tgz#9476c8a2510114ed1c3a26b424c47e05c2e6284e" integrity sha512-Vc2N++3en346RsbGjL3h7tgAl2Y7V+2liYTAOZ8XL0KTw3ahFHsyAUzOwct51n+g70I1TOUDgs06Oh6+XGcFkQ== dependencies: glob "7.2.0" -sequelize@^6.5.0, sequelize@>=6.20.1: +sequelize@*, sequelize@^6.5.0: version "6.37.7" - resolved "https://registry.npmjs.org/sequelize/-/sequelize-6.37.7.tgz" + resolved "https://registry.yarnpkg.com/sequelize/-/sequelize-6.37.7.tgz#55a6f8555ae76c1fbd4bce76b2ac5fcc0a1e6eb6" integrity sha512-mCnh83zuz7kQxxJirtFD7q6Huy6liPanI67BSlbzSYgVNl5eXVdE2CN1FuAeZwG1SNpGsNRCV+bJAVVnykZAFA== dependencies: "@types/debug" "^4.1.8" @@ -7119,7 +6563,7 @@ sequelize@^6.5.0, sequelize@>=6.20.1: serve-static@1.16.2: version "1.16.2" - resolved "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.16.2.tgz#b6a5343da47f6bdd2673848bf45754941e803296" integrity sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw== dependencies: encodeurl "~2.0.0" @@ -7129,7 +6573,7 @@ serve-static@1.16.2: set-function-length@^1.2.2: version "1.2.2" - resolved "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz" + resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449" integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== dependencies: define-data-property "^1.1.4" @@ -7141,7 +6585,7 @@ set-function-length@^1.2.2: set-function-name@^2.0.2: version "2.0.2" - resolved "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz" + resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.2.tgz#16a705c5a0dc2f5e638ca96d8a8cd4e1c2b90985" integrity sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ== dependencies: define-data-property "^1.1.4" @@ -7151,7 +6595,7 @@ set-function-name@^2.0.2: set-proto@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/set-proto/-/set-proto-1.0.0.tgz#0760dbcff30b2d7e801fd6e19983e56da337565e" integrity sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw== dependencies: dunder-proto "^1.0.1" @@ -7160,30 +6604,33 @@ set-proto@^1.0.0: setprototypeof@1.2.0: version "1.2.0" - resolved "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== sha.js@^2.4.11: - version "2.4.11" + version "2.4.12" + resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.12.tgz#eb8b568bf383dfd1867a32c3f2b74eb52bdbf23f" + integrity sha512-8LzC5+bvI45BjpfXU8V5fdU2mfeKiQe1D1gIMn7XUlF3OTUrpdJpPPH4EMAnF0DsHHdSZqCdSss5qCmJKuiO3w== dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" + inherits "^2.0.4" + safe-buffer "^5.2.1" + to-buffer "^1.2.0" shebang-command@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== dependencies: shebang-regex "^3.0.0" shebang-regex@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== side-channel-list@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/side-channel-list/-/side-channel-list-1.0.0.tgz#10cb5984263115d3b7a0e336591e290a830af8ad" integrity sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA== dependencies: es-errors "^1.3.0" @@ -7191,7 +6638,7 @@ side-channel-list@^1.0.0: side-channel-map@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/side-channel-map/-/side-channel-map-1.0.1.tgz#d6bb6b37902c6fef5174e5f533fab4c732a26f42" integrity sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA== dependencies: call-bound "^1.0.2" @@ -7201,7 +6648,7 @@ side-channel-map@^1.0.1: side-channel-weakmap@^1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz" + resolved "https://registry.yarnpkg.com/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz#11dda19d5368e40ce9ec2bdc1fb0ecbc0790ecea" integrity sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A== dependencies: call-bound "^1.0.2" @@ -7212,7 +6659,7 @@ side-channel-weakmap@^1.0.2: side-channel@^1.0.6, side-channel@^1.1.0: version "1.1.0" - resolved "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.1.0.tgz#c3fcff9c4da932784873335ec9765fa94ff66bc9" integrity sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw== dependencies: es-errors "^1.3.0" @@ -7221,133 +6668,107 @@ side-channel@^1.0.6, side-channel@^1.1.0: side-channel-map "^1.0.1" side-channel-weakmap "^1.0.2" -sift@13.5.2: - version "13.5.2" - resolved "https://registry.npmjs.org/sift/-/sift-13.5.2.tgz" - integrity sha512-+gxdEOMA2J+AI+fVsCqeNn7Tgx3M9ZN9jdi95939l1IJ8cZsqS8sqpJyOkic2SJk+1+98Uwryt/gL6XDaV+UZA== - -sift@17.1.3: - version "17.1.3" - resolved "https://registry.npmjs.org/sift/-/sift-17.1.3.tgz" - integrity sha512-Rtlj66/b0ICeFzYTuNvX/EF1igRbbnGSvEyT79McoZa/DeGhMyC5pWKOEsZKnpkqtSeovd5FL/bjHWC3CIIvCQ== - -signal-exit@^3.0.2: - version "3.0.7" - resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz" - integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== - signal-exit@^4.1.0: version "4.1.0" - resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== -simple-swizzle@^0.2.2: - version "0.2.2" - dependencies: - is-arrayish "^0.3.1" - simple-update-notifier@^1.0.7: version "1.1.0" - resolved "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.1.0.tgz" + resolved "https://registry.yarnpkg.com/simple-update-notifier/-/simple-update-notifier-1.1.0.tgz#67694c121de354af592b347cdba798463ed49c82" integrity sha512-VpsrsJSUcJEseSbMHkrsrAVSdvVS5I96Qo1QAQ4FxQ9wXFcB+pjj7FB7/us9+GcgfW4ziHtYMc1J0PLczb55mg== dependencies: semver "~7.0.0" siphash@^1.1.0: version "1.2.0" - resolved "https://registry.npmjs.org/siphash/-/siphash-1.2.0.tgz" + resolved "https://registry.yarnpkg.com/siphash/-/siphash-1.2.0.tgz#5171c421fae07e69633397a0ab245ee112e90374" integrity sha512-zGo/O5A0Nr4oSteEAMlhemqQpCBbVTRaTjUQdO+QFUqe1iofq/NNPe2W1RxJreh89fIk6NhQcNi41UeTGCvr+g== sisteransi@^1.0.5: version "1.0.5" - resolved "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz" + resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== slash@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== slice-ansi@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== dependencies: ansi-styles "^4.0.0" astral-regex "^2.0.0" is-fullwidth-code-point "^3.0.0" -sliced@1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/sliced/-/sliced-1.0.1.tgz" - integrity sha512-VZBmZP8WU3sMOZm1bdgTadsQbcscK0UM8oKxKVBs4XAhUo2Xxzm/OFMGBkPusxw9xL3Uy8LrzEqGqJhclsr0yA== - smart-buffer@^4.2.0: version "4.2.0" - resolved "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz" + resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae" integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== smtp-address-parser@1.0.10: version "1.0.10" - resolved "https://registry.npmjs.org/smtp-address-parser/-/smtp-address-parser-1.0.10.tgz" + resolved "https://registry.yarnpkg.com/smtp-address-parser/-/smtp-address-parser-1.0.10.tgz#9fc4ed6021f13dc3d8f591e0ad0d50454073025e" integrity sha512-Osg9LmvGeAG/hyao4mldbflLOkkr3a+h4m1lwKCK5U8M6ZAr7tdXEz/+/vr752TSGE4MNUlUl9cIK2cB8cgzXg== dependencies: nearley "^2.20.1" socks@^2.7.1: - version "2.8.5" + version "2.8.7" + resolved "https://registry.yarnpkg.com/socks/-/socks-2.8.7.tgz#e2fb1d9a603add75050a2067db8c381a0b5669ea" + integrity sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A== dependencies: - ip-address "^9.0.5" + ip-address "^10.0.1" smart-buffer "^4.2.0" sparse-bitfield@^3.0.3: version "3.0.3" - resolved "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz" + resolved "https://registry.yarnpkg.com/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz#ff4ae6e68656056ba4b3e792ab3334d38273ca11" integrity sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ== dependencies: memory-pager "^1.0.2" split2@^4.1.0: version "4.2.0" - resolved "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz" + resolved "https://registry.yarnpkg.com/split2/-/split2-4.2.0.tgz#c9c5920904d148bab0b9f67145f245a86aadbfa4" integrity sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg== -sprintf-js@^1.1.3: - version "1.1.3" - sprintf-js@~1.0.2: version "1.0.3" - resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== sqlstring@^2.3.3: version "2.3.3" - resolved "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.3.tgz" + resolved "https://registry.yarnpkg.com/sqlstring/-/sqlstring-2.3.3.tgz#2ddc21f03bce2c387ed60680e739922c65751d0c" integrity sha512-qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg== stack-trace@0.0.x: version "0.0.10" - resolved "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz" + resolved "https://registry.yarnpkg.com/stack-trace/-/stack-trace-0.0.10.tgz#547c70b347e8d32b4e108ea1a2a159e5fdde19c0" integrity sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg== -"statuses@>= 1.5.0 < 2": - version "1.5.0" - resolved "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz" - integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== - statuses@2.0.1: version "2.0.1" - resolved "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== +"statuses@>= 1.5.0 < 2": + version "1.5.0" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" + integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== + stdin-discarder@^0.2.2: version "0.2.2" - resolved "https://registry.npmjs.org/stdin-discarder/-/stdin-discarder-0.2.2.tgz" + resolved "https://registry.yarnpkg.com/stdin-discarder/-/stdin-discarder-0.2.2.tgz#390037f44c4ae1a1ae535c5fe38dc3aba8d997be" integrity sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ== stop-iteration-iterator@^1.1.0: version "1.1.0" - resolved "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz" + resolved "https://registry.yarnpkg.com/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz#f481ff70a548f6124d0312c3aa14cbfa7aa542ad" integrity sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ== dependencies: es-errors "^1.3.0" @@ -7355,58 +6776,22 @@ stop-iteration-iterator@^1.1.0: stoppable@^1.1.0: version "1.1.0" - resolved "https://registry.npmjs.org/stoppable/-/stoppable-1.1.0.tgz" + resolved "https://registry.yarnpkg.com/stoppable/-/stoppable-1.1.0.tgz#32da568e83ea488b08e4d7ea2c3bcc9d75015d5b" integrity sha512-KXDYZ9dszj6bzvnEMRYvxgeTHU74QBFL54XKtP3nyMuJ81CFYtABZ3bAzL2EdFUaEwJOBOgENyFj3R7oTzDyyw== -stream-events@^1.0.4, stream-events@^1.0.5: - version "1.0.5" - resolved "https://registry.npmjs.org/stream-events/-/stream-events-1.0.5.tgz" - integrity sha512-E1GUzBSgvct8Jsb3v2X15pjzN1tYebtbLaMg+eBOUOAxgbLoSbT2NS91ckc5lJD1KfLjId+jXJRgo0qnV5Nerg== - dependencies: - stubs "^3.0.0" - -stream-shift@^1.0.2: - version "1.0.3" - resolved "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.3.tgz" - integrity sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ== - -streamsearch@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz" - integrity sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg== - streamsearch@0.1.2: version "0.1.2" - resolved "https://registry.npmjs.org/streamsearch/-/streamsearch-0.1.2.tgz" + resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-0.1.2.tgz#808b9d0e56fc273d809ba57338e929919a1a9f1a" integrity sha512-jos8u++JKm0ARcSUTAZXOVC0mSox7Bhn6sBgty73P1f3JGf7yG2clTbBNHUdde/kdvP2FESam+vM6l8jBrNxHA== -string_decoder@^1.1.1, string_decoder@^1.3.0: - version "1.3.0" - resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" - -string_decoder@~0.10.x: - version "0.10.31" - resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz" - integrity sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ== - -string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz" - integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== - dependencies: - safe-buffer "~5.1.0" - string-argv@^0.3.2, string-argv@~0.3.1: version "0.3.2" - resolved "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz" + resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.3.2.tgz#2b6d0ef24b656274d957d54e0a4bbf6153dc02b6" integrity sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q== string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" - resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== dependencies: emoji-regex "^8.0.0" @@ -7415,52 +6800,16 @@ string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: string-width@^7.2.0: version "7.2.0" - resolved "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-7.2.0.tgz#b5bb8e2165ce275d4d43476dd2700ad9091db6dc" integrity sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ== dependencies: emoji-regex "^10.3.0" get-east-asian-width "^1.0.0" strip-ansi "^7.1.0" -string.prototype.includes@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/string.prototype.includes/-/string.prototype.includes-2.0.1.tgz" - integrity sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-abstract "^1.23.3" - -string.prototype.matchall@^4.0.12: - version "4.0.12" - resolved "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.12.tgz" - integrity sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA== - dependencies: - call-bind "^1.0.8" - call-bound "^1.0.3" - define-properties "^1.2.1" - es-abstract "^1.23.6" - es-errors "^1.3.0" - es-object-atoms "^1.0.0" - get-intrinsic "^1.2.6" - gopd "^1.2.0" - has-symbols "^1.1.0" - internal-slot "^1.1.0" - regexp.prototype.flags "^1.5.3" - set-function-name "^2.0.2" - side-channel "^1.1.0" - -string.prototype.repeat@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz" - integrity sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.5" - string.prototype.trim@^1.2.10: version "1.2.10" - resolved "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz" + resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz#40b2dd5ee94c959b4dcfb1d65ce72e90da480c81" integrity sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA== dependencies: call-bind "^1.0.8" @@ -7473,7 +6822,7 @@ string.prototype.trim@^1.2.10: string.prototype.trimend@^1.0.9: version "1.0.9" - resolved "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz#62e2731272cd285041b36596054e9f66569b6942" integrity sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ== dependencies: call-bind "^1.0.8" @@ -7483,51 +6832,69 @@ string.prototype.trimend@^1.0.9: string.prototype.trimstart@^1.0.8: version "1.0.8" - resolved "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz#7ee834dda8c7c17eff3118472bb35bfedaa34dde" integrity sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg== dependencies: call-bind "^1.0.7" define-properties "^1.2.1" es-object-atoms "^1.0.0" +string_decoder@^1.1.1, string_decoder@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +string_decoder@~0.10.x: + version "0.10.31" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" + integrity sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ== + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" - resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== dependencies: ansi-regex "^5.0.1" strip-ansi@^7.1.0: - version "7.1.0" + version "7.1.2" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.2.tgz#132875abde678c7ea8d691533f2e7e22bb744dba" + integrity sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA== dependencies: ansi-regex "^6.0.1" strip-bom@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== strip-final-newline@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-3.0.0.tgz#52894c313fbff318835280aed60ff71ebf12b8fd" integrity sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw== strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: version "3.1.1" - resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== -strnum@^1.0.5: - version "1.1.2" - -stubs@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/stubs/-/stubs-3.0.0.tgz" - integrity sha512-PdHt7hHUJKxvTCgbKX9C1V/ftOcjJQgz8BZwNfV5c4B6dcGqlpelTbJ999jBGZ2jYiPAwcX5dP6oBwVlBlUbxw== +strnum@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/strnum/-/strnum-2.1.1.tgz#cf2a6e0cf903728b8b2c4b971b7e36b4e82d46ab" + integrity sha512-7ZvoFTiCnGxBtDqJ//Cu6fWtZtc7Y3x+QOirG15wztbdngGSkht27o2pyGWrVy0b4WAy3jbKmnoK6g5VlVNUUw== subscriptions-transport-ws@^0.9.19: version "0.9.19" - resolved "https://registry.npmjs.org/subscriptions-transport-ws/-/subscriptions-transport-ws-0.9.19.tgz" + resolved "https://registry.yarnpkg.com/subscriptions-transport-ws/-/subscriptions-transport-ws-0.9.19.tgz#10ca32f7e291d5ee8eb728b9c02e43c52606cdcf" integrity sha512-dxdemxFFB0ppCLg10FTtRqH/31FNRL1y1BQv8209MK5I4CwALb7iihQg+7p65lFcIl8MHatINWBLOqpgU4Kyyw== dependencies: backo2 "^1.0.2" @@ -7538,35 +6905,28 @@ subscriptions-transport-ws@^0.9.19: supports-color@^5.3.0, supports-color@^5.5.0: version "5.5.0" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== dependencies: has-flag "^3.0.0" -supports-color@^7.0.0: - version "7.2.0" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" - integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== - dependencies: - has-flag "^4.0.0" - -supports-color@^7.1.0: +supports-color@^7.0.0, supports-color@^7.1.0: version "7.2.0" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== dependencies: has-flag "^4.0.0" supports-color@~8.1.1: version "8.1.1" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== dependencies: has-flag "^4.0.0" supports-hyperlinks@^2.2.0: version "2.3.0" - resolved "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz" + resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz#3943544347c1ff90b15effb03fc14ae45ec10624" integrity sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA== dependencies: has-flag "^4.0.0" @@ -7574,29 +6934,31 @@ supports-hyperlinks@^2.2.0: supports-preserve-symlinks-flag@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== swagger-ui-dist@>=4.11.0: - version "5.25.2" + version "5.30.2" + resolved "https://registry.yarnpkg.com/swagger-ui-dist/-/swagger-ui-dist-5.30.2.tgz#b146c5bd92cc712340f8847b546ea64d785efeb2" + integrity sha512-HWCg1DTNE/Nmapt+0m2EPXFwNKNeKK4PwMjkwveN/zn1cV2Kxi9SURd+m0SpdcSgWEK/O64sf8bzXdtUhigtHA== dependencies: "@scarf/scarf" "=1.4.0" swagger-ui-express@^4.1.6: version "4.6.3" - resolved "https://registry.npmjs.org/swagger-ui-express/-/swagger-ui-express-4.6.3.tgz" + resolved "https://registry.yarnpkg.com/swagger-ui-express/-/swagger-ui-express-4.6.3.tgz#870d0892654fe80e6970a2d680e22521acd2dc19" integrity sha512-CDje4PndhTD2HkgyKH3pab+LKspDeB/NhPN2OF1j+piYIamQqBYwAXWESOT1Yju2xFg51bRW9sUng2WxDjzArw== dependencies: swagger-ui-dist ">=4.11.0" symbol-observable@^1.0.4: version "1.2.0" - resolved "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz" + resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ== table@^6.0.9: version "6.9.0" - resolved "https://registry.npmjs.org/table/-/table-6.9.0.tgz" + resolved "https://registry.yarnpkg.com/table/-/table-6.9.0.tgz#50040afa6264141c7566b3b81d4d82c47a8668f5" integrity sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A== dependencies: ajv "^8.0.1" @@ -7607,7 +6969,7 @@ table@^6.0.9: tar@^6.2.1: version "6.2.1" - resolved "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz" + resolved "https://registry.yarnpkg.com/tar/-/tar-6.2.1.tgz#717549c541bc3c2af15751bea94b1dd068d4b03a" integrity sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A== dependencies: chownr "^2.0.0" @@ -7617,20 +6979,9 @@ tar@^6.2.1: mkdirp "^1.0.3" yallist "^4.0.0" -teeny-request@^7.1.3: - version "7.2.0" - resolved "https://registry.npmjs.org/teeny-request/-/teeny-request-7.2.0.tgz" - integrity sha512-SyY0pek1zWsi0LRVAALem+avzMLc33MKW/JLLakdP4s9+D7+jHcy5x6P+h94g2QNZsAqQNfX5lsbd3WSeJXrrw== - dependencies: - http-proxy-agent "^5.0.0" - https-proxy-agent "^5.0.0" - node-fetch "^2.6.1" - stream-events "^1.0.5" - uuid "^8.0.0" - terminal-link@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/terminal-link/-/terminal-link-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/terminal-link/-/terminal-link-3.0.0.tgz#91c82a66b52fc1684123297ce384429faf72ac5c" integrity sha512-flFL3m4wuixmf6IfhFJd1YPiLiMuxEc8uHRM1buzIeZPm22Au2pDqBJQgdo7n1WfPU1ONFGv7YDwpFBmHGF6lg== dependencies: ansi-escapes "^5.0.0" @@ -7638,92 +6989,99 @@ terminal-link@^3.0.0: text-hex@1.0.x: version "1.0.0" - resolved "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/text-hex/-/text-hex-1.0.0.tgz#69dc9c1b17446ee79a92bf5b884bb4b9127506f5" integrity sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg== text-table@^0.2.0: version "0.2.0" - resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== tiny-inflate@^1.0.0: version "1.0.3" - resolved "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz" + resolved "https://registry.yarnpkg.com/tiny-inflate/-/tiny-inflate-1.0.3.tgz#122715494913a1805166aaf7c93467933eea26c4" integrity sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw== tinyexec@^0.3.2: version "0.3.2" - resolved "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz" + resolved "https://registry.yarnpkg.com/tinyexec/-/tinyexec-0.3.2.tgz#941794e657a85e496577995c6eef66f53f42b3d2" integrity sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA== +tinyexec@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/tinyexec/-/tinyexec-1.0.2.tgz#bdd2737fe2ba40bd6f918ae26642f264b99ca251" + integrity sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg== + tmp@^0.0.33: version "0.0.33" - resolved "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== dependencies: os-tmpdir "~1.0.2" +to-buffer@^1.2.0: + version "1.2.2" + resolved "https://registry.yarnpkg.com/to-buffer/-/to-buffer-1.2.2.tgz#ffe59ef7522ada0a2d1cb5dfe03bb8abc3cdc133" + integrity sha512-db0E3UJjcFhpDhAF4tLo03oli3pwl3dbnzXOUIlRKrp+ldk/VUxzpWYZENsw2SZiuBjHAk7DfB0VU7NKdpb6sw== + dependencies: + isarray "^2.0.5" + safe-buffer "^5.2.1" + typed-array-buffer "^1.0.3" + to-regex-range@^5.0.1: version "5.0.1" - resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== dependencies: is-number "^7.0.0" toidentifier@1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== toposort-class@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/toposort-class/-/toposort-class-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/toposort-class/-/toposort-class-1.0.1.tgz#7ffd1f78c8be28c3ba45cd4e1a3f5ee193bd9988" integrity sha512-OsLcGGbYF3rMjPUf8oKktyvCiUxSbqMMS39m33MAjLTC1DVIH6x3WSt63/M77ihI09+Sdfk1AXvfhCEeUmC7mg== touch@^3.1.0: version "3.1.1" - resolved "https://registry.npmjs.org/touch/-/touch-3.1.1.tgz" + resolved "https://registry.yarnpkg.com/touch/-/touch-3.1.1.tgz#097a23d7b161476435e5c1344a95c0f75b4a5694" integrity sha512-r0eojU4bI8MnHr8c5bNo7lJDdI2qXlWWJk6a9EAFG7vbhTjElYhBVS3/miuE0uOuoLdb8Mc/rVfsmm6eo5o9GA== tr46@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-3.0.0.tgz#555c4e297a950617e8eeddef633c87d4d9d6cbf9" integrity sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA== dependencies: punycode "^2.1.1" -tr46@^5.1.0: - version "5.1.1" - resolved "https://registry.npmjs.org/tr46/-/tr46-5.1.1.tgz" - integrity sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw== - dependencies: - punycode "^2.3.1" - tr46@~0.0.3: version "0.0.3" - resolved "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== triple-beam@^1.3.0: version "1.4.1" - resolved "https://registry.npmjs.org/triple-beam/-/triple-beam-1.4.1.tgz" + resolved "https://registry.yarnpkg.com/triple-beam/-/triple-beam-1.4.1.tgz#6fde70271dc6e5d73ca0c3b24e2d92afb7441984" integrity sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg== ts-api-utils@^1.0.1: version "1.4.3" - resolved "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.3.tgz" + resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.4.3.tgz#bfc2215fe6528fecab2b0fba570a2e8a4263b064" integrity sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw== ts-invariant@^0.4.0: version "0.4.4" - resolved "https://registry.npmjs.org/ts-invariant/-/ts-invariant-0.4.4.tgz" + resolved "https://registry.yarnpkg.com/ts-invariant/-/ts-invariant-0.4.4.tgz#97a523518688f93aafad01b0e80eb803eb2abd86" integrity sha512-uEtWkFM/sdZvRNNDL3Ehu4WVpwaulhwQszV8mrtcdeE8nN00BV9mAmQ88RkrBhFgl9gMgvjJLAQcZbnPXI9mlA== dependencies: tslib "^1.9.3" ts-node@^10.9.1: version "10.9.2" - resolved "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.2.tgz#70f021c9e185bccdca820e26dc413805c101c71f" integrity sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ== dependencies: "@cspotcode/source-map-support" "^0.8.0" @@ -7742,7 +7100,7 @@ ts-node@^10.9.1: tsconfig-paths@^3.15.0: version "3.15.0" - resolved "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz#5299ec605e55b1abb23ec939ef15edaf483070d4" integrity sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg== dependencies: "@types/json5" "^0.0.29" @@ -7750,40 +7108,32 @@ tsconfig-paths@^3.15.0: minimist "^1.2.6" strip-bom "^3.0.0" -tslib@^1.10.0: - version "1.14.1" - resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" - integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== - -tslib@^1.8.1: - version "1.14.1" - resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" - integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== - -tslib@^1.9.3: +tslib@^1.10.0, tslib@^1.8.1, tslib@^1.9.3: version "1.14.1" - resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== tslib@^2.1.0, tslib@^2.4.0, tslib@^2.5.0, tslib@^2.6.2: version "2.8.1" - resolved "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== tslib@~2.4.0: version "2.4.1" - resolved "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.1.tgz#0d0bfbaac2880b91e22df0768e55be9753a5b17e" integrity sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA== tsutils@^3.21.0: version "3.21.0" - resolved "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== dependencies: tslib "^1.8.1" tsx@^4.7.0: - version "4.20.3" + version "4.20.6" + resolved "https://registry.yarnpkg.com/tsx/-/tsx-4.20.6.tgz#8fb803fd9c1f70e8ccc93b5d7c5e03c3979ccb2e" + integrity sha512-ytQKuwgmrrkDTFP4LjR0ToE2nqgy886GpvRSpU0JAnrdBYppuY5rLkRUYPU1yCryb24SsKBTL/hlDQAEFVwtZg== dependencies: esbuild "~0.25.0" get-tsconfig "^4.7.5" @@ -7792,34 +7142,34 @@ tsx@^4.7.0: type-check@^0.4.0, type-check@~0.4.0: version "0.4.0" - resolved "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== dependencies: prelude-ls "^1.2.1" type-fest@^0.20.2: version "0.20.2" - resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== type-fest@^0.21.3: version "0.21.3" - resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== type-fest@^1.0.2: version "1.4.0" - resolved "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-1.4.0.tgz#e9fb813fe3bf1744ec359d55d1affefa76f14be1" integrity sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA== type-fest@^4.0.0: version "4.41.0" - resolved "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-4.41.0.tgz#6ae1c8e5731273c2bf1f58ad39cbae2c91a46c58" integrity sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA== type-is@^1.6.16, type-is@^1.6.4, type-is@~1.6.18: version "1.6.18" - resolved "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== dependencies: media-typer "0.3.0" @@ -7827,7 +7177,7 @@ type-is@^1.6.16, type-is@^1.6.4, type-is@~1.6.18: typed-array-buffer@^1.0.3: version "1.0.3" - resolved "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz" + resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz#a72395450a4869ec033fd549371b47af3a2ee536" integrity sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw== dependencies: call-bound "^1.0.3" @@ -7836,7 +7186,7 @@ typed-array-buffer@^1.0.3: typed-array-byte-length@^1.0.3: version "1.0.3" - resolved "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz" + resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz#8407a04f7d78684f3d252aa1a143d2b77b4160ce" integrity sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg== dependencies: call-bind "^1.0.8" @@ -7847,7 +7197,7 @@ typed-array-byte-length@^1.0.3: typed-array-byte-offset@^1.0.4: version "1.0.4" - resolved "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz" + resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz#ae3698b8ec91a8ab945016108aef00d5bff12355" integrity sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ== dependencies: available-typed-arrays "^1.0.7" @@ -7860,7 +7210,7 @@ typed-array-byte-offset@^1.0.4: typed-array-length@^1.0.7: version "1.0.7" - resolved "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz" + resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.7.tgz#ee4deff984b64be1e118b0de8c9c877d5ce73d3d" integrity sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg== dependencies: call-bind "^1.0.7" @@ -7870,29 +7220,24 @@ typed-array-length@^1.0.7: possible-typed-array-names "^1.0.0" reflect.getprototypeof "^1.0.6" -typedarray-to-buffer@^3.1.5: - version "3.1.5" - resolved "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz" - integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== - dependencies: - is-typedarray "^1.0.0" - typedarray@^0.0.6: version "0.0.6" - resolved "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz" + resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== -typescript@^5.2.2, typescript@>=2.7, "typescript@>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta", typescript@>=4.2.0, typescript@>=5.1.0: - version "5.8.3" +typescript@^5.2.2: + version "5.9.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.9.3.tgz#5b4f59e15310ab17a216f5d6cf53ee476ede670f" + integrity sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw== -ufo@^1.5.4: +ufo@^1.5.4, ufo@^1.6.1: version "1.6.1" - resolved "https://registry.npmjs.org/ufo/-/ufo-1.6.1.tgz" + resolved "https://registry.yarnpkg.com/ufo/-/ufo-1.6.1.tgz#ac2db1d54614d1b22c1d603e3aef44a85d8f146b" integrity sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA== umzug@^3.0.0-beta.16: version "3.8.2" - resolved "https://registry.npmjs.org/umzug/-/umzug-3.8.2.tgz" + resolved "https://registry.yarnpkg.com/umzug/-/umzug-3.8.2.tgz#53c2189604d36956d7b75a89128108d0e3073a9f" integrity sha512-BEWEF8OJjTYVC56GjELeHl/1XjFejrD7aHzn+HldRJTx+pL1siBrKHZC8n4K/xL3bEzVA9o++qD1tK2CpZu4KA== dependencies: "@rushstack/ts-command-line" "^4.12.2" @@ -7903,7 +7248,7 @@ umzug@^3.0.0-beta.16: unbox-primitive@^1.1.0: version "1.1.0" - resolved "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz" + resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.1.0.tgz#8d9d2c9edeea8460c7f35033a88867944934d1e2" integrity sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw== dependencies: call-bound "^1.0.3" @@ -7913,25 +7258,27 @@ unbox-primitive@^1.1.0: undefsafe@^2.0.5: version "2.0.5" - resolved "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz" + resolved "https://registry.yarnpkg.com/undefsafe/-/undefsafe-2.0.5.tgz#38733b9327bdcd226db889fb723a6efd162e6e2c" integrity sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA== undici-types@~5.26.4: version "5.26.5" - resolved "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== undici-types@~6.21.0: version "6.21.0" - resolved "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.21.0.tgz#691d00af3909be93a7faa13be61b3a5b50ef12cb" integrity sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ== -undici-types@~7.8.0: - version "7.8.0" +undici-types@~7.16.0: + version "7.16.0" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-7.16.0.tgz#ffccdff36aea4884cbfce9a750a0580224f58a46" + integrity sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw== unicode-properties@^1.4.1: version "1.4.1" - resolved "https://registry.npmjs.org/unicode-properties/-/unicode-properties-1.4.1.tgz" + resolved "https://registry.yarnpkg.com/unicode-properties/-/unicode-properties-1.4.1.tgz#96a9cffb7e619a0dc7368c28da27e05fc8f9be5f" integrity sha512-CLjCCLQ6UuMxWnbIylkisbRj31qxHPAurvena/0iwSVbQ2G1VY5/HjV0IRabOEbDHlzZlRdCrD4NhB0JtU40Pg== dependencies: base64-js "^1.3.0" @@ -7939,7 +7286,7 @@ unicode-properties@^1.4.1: unicode-trie@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/unicode-trie/-/unicode-trie-2.0.0.tgz" + resolved "https://registry.yarnpkg.com/unicode-trie/-/unicode-trie-2.0.0.tgz#8fd8845696e2e14a8b67d78fa9e0dd2cad62fec8" integrity sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ== dependencies: pako "^0.2.5" @@ -7947,46 +7294,39 @@ unicode-trie@^2.0.0: unicorn-magic@^0.1.0: version "0.1.0" - resolved "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz" + resolved "https://registry.yarnpkg.com/unicorn-magic/-/unicorn-magic-0.1.0.tgz#1bb9a51c823aaf9d73a8bfcd3d1a23dde94b0ce4" integrity sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ== -unique-string@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz" - integrity sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg== - dependencies: - crypto-random-string "^2.0.0" - universalify@^2.0.0: version "2.0.1" - resolved "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== -unpipe@~1.0.0, unpipe@1.0.0: +unpipe@1.0.0, unpipe@~1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== uri-js@^4.2.2, uri-js@^4.4.1: version "4.4.1" - resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== dependencies: punycode "^2.1.0" urijs@^1.19.1: version "1.19.11" - resolved "https://registry.npmjs.org/urijs/-/urijs-1.19.11.tgz" + resolved "https://registry.yarnpkg.com/urijs/-/urijs-1.19.11.tgz#204b0d6b605ae80bea54bea39280cdb7c9f923cc" integrity sha512-HXgFDgDommxn5/bIv0cnQZsPhHDA90NPHD6+c/v21U5+Sx5hoP8+dP9IZXBU1gIfvdRfhG8cel9QNPeionfcCQ== util-deprecate@^1.0.1, util-deprecate@~1.0.1: version "1.0.2" - resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== util.promisify@^1.0.0: version "1.1.3" - resolved "https://registry.npmjs.org/util.promisify/-/util.promisify-1.1.3.tgz" + resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.1.3.tgz#3d77cf56628b4aad743e5acde8e5c44cea7dbf1c" integrity sha512-GIEaZ6o86fj09Wtf0VfZ5XP7tmd4t3jM5aZCgmBi231D0DB1AEBa3Aa6MP48DMsAIi96WkpWLimIWVwOjbDMOw== dependencies: call-bind "^1.0.8" @@ -8004,112 +7344,90 @@ util.promisify@^1.0.0: utils-merge@1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== +uuid@8.3.2, uuid@^8.0.0, uuid@^8.3.2: + version "8.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" + integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== + uuid@^10.0.0: version "10.0.0" - resolved "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-10.0.0.tgz#5a95aa454e6e002725c79055fd42aaba30ca6294" integrity sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ== uuid@^3.1.0: version "3.4.0" - resolved "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== -uuid@^8.0.0, uuid@^8.3.2, uuid@8.3.2: - version "8.3.2" - resolved "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz" - integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== - uuid@^9.0.1: version "9.0.1" - resolved "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.1.tgz#e188d4c8853cc722220392c424cd637f32293f30" integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA== v8-compile-cache-lib@^3.0.1: version "3.0.1" - resolved "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz" + resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== v8-compile-cache@^2.0.3: version "2.4.0" - resolved "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.4.0.tgz" + resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.4.0.tgz#cdada8bec61e15865f05d097c5f4fd30e94dc128" integrity sha512-ocyWc3bAHBB/guyqJQVI5o4BZkPhznPYUG2ea80Gond/BgNWpap8TOmLSeeQG7bnh2KMISxskdADG59j7zruhw== valid-url@^1.0.9: version "1.0.9" - resolved "https://registry.npmjs.org/valid-url/-/valid-url-1.0.9.tgz" + resolved "https://registry.yarnpkg.com/valid-url/-/valid-url-1.0.9.tgz#1c14479b40f1397a75782f115e4086447433a200" integrity sha512-QQDsV8OnSf5Uc30CKSwG9lnhMPe6exHtTXLRYX8uMwKENy640pU+2BgBL0LRbDh/eYRahNCS7aewCx0wf3NYVA== validator@^13.9.0: - version "13.15.15" - resolved "https://registry.npmjs.org/validator/-/validator-13.15.15.tgz" - integrity sha512-BgWVbCI72aIQy937xbawcs+hrVaN/CZ2UwutgaJ36hGqRrLNM+f5LUT/YPRbo8IV/ASeFzXszezV+y2+rq3l8A== + version "13.15.23" + resolved "https://registry.yarnpkg.com/validator/-/validator-13.15.23.tgz#59a874f84e4594588e3409ab1edbe64e96d0c62d" + integrity sha512-4yoz1kEWqUjzi5zsPbAS/903QXSYp0UOtHsPpp7p9rHAw/W+dkInskAE386Fat3oKRROwO98d9ZB0G4cObgUyw== value-or-promise@1.0.11: version "1.0.11" - resolved "https://registry.npmjs.org/value-or-promise/-/value-or-promise-1.0.11.tgz" + resolved "https://registry.yarnpkg.com/value-or-promise/-/value-or-promise-1.0.11.tgz#3e90299af31dd014fe843fe309cefa7c1d94b140" integrity sha512-41BrgH+dIbCFXClcSapVs5M6GkENd3gQOJpEfPDNa71LsUGMXDL0jMWpI/Rh7WhX+Aalfz2TTS3Zt5pUsbnhLg== vary@^1, vary@~1.1.2: version "1.1.2" - resolved "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== -web-streams-polyfill@^3.2.1: - version "3.3.3" - resolved "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz" - integrity sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw== - web-streams-polyfill@4.0.0-beta.3: version "4.0.0-beta.3" - resolved "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-4.0.0-beta.3.tgz" + resolved "https://registry.yarnpkg.com/web-streams-polyfill/-/web-streams-polyfill-4.0.0-beta.3.tgz#2898486b74f5156095e473efe989dcf185047a38" integrity sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug== +web-streams-polyfill@^3.2.1: + version "3.3.3" + resolved "https://registry.yarnpkg.com/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz#2073b91a2fdb1fbfbd401e7de0ac9f8214cecb4b" + integrity sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw== + webidl-conversions@^3.0.0: version "3.0.1" - resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== webidl-conversions@^7.0.0: version "7.0.0" - resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-7.0.0.tgz#256b4e1882be7debbf01d05f0aa2039778ea080a" integrity sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g== -websocket-driver@>=0.5.1: - version "0.7.4" - resolved "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz" - integrity sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg== - dependencies: - http-parser-js ">=0.5.1" - safe-buffer ">=5.1.0" - websocket-extensions ">=0.1.1" - -websocket-extensions@>=0.1.1: - version "0.1.4" - resolved "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz" - integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg== - whatwg-url@^11.0.0: version "11.0.0" - resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-11.0.0.tgz#0a849eebb5faf2119b901bb76fd795c2848d4018" integrity sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ== dependencies: tr46 "^3.0.0" webidl-conversions "^7.0.0" -"whatwg-url@^14.1.0 || ^13.0.0": - version "14.2.0" - resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.2.0.tgz" - integrity sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw== - dependencies: - tr46 "^5.1.0" - webidl-conversions "^7.0.0" - whatwg-url@^5.0.0: version "5.0.0" - resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== dependencies: tr46 "~0.0.3" @@ -8117,7 +7435,7 @@ whatwg-url@^5.0.0: which-boxed-primitive@^1.1.0, which-boxed-primitive@^1.1.1: version "1.1.1" - resolved "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz" + resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz#d76ec27df7fa165f18d5808374a5fe23c29b176e" integrity sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA== dependencies: is-bigint "^1.1.0" @@ -8128,7 +7446,7 @@ which-boxed-primitive@^1.1.0, which-boxed-primitive@^1.1.1: which-builtin-type@^1.2.1: version "1.2.1" - resolved "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz" + resolved "https://registry.yarnpkg.com/which-builtin-type/-/which-builtin-type-1.2.1.tgz#89183da1b4907ab089a6b02029cc5d8d6574270e" integrity sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q== dependencies: call-bound "^1.0.2" @@ -8147,7 +7465,7 @@ which-builtin-type@^1.2.1: which-collection@^1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz" + resolved "https://registry.yarnpkg.com/which-collection/-/which-collection-1.0.2.tgz#627ef76243920a107e7ce8e96191debe4b16c2a0" integrity sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw== dependencies: is-map "^2.0.3" @@ -8157,7 +7475,7 @@ which-collection@^1.0.2: which-typed-array@^1.1.16, which-typed-array@^1.1.19: version "1.1.19" - resolved "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.19.tgz#df03842e870b6b88e117524a4b364b6fc689f956" integrity sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw== dependencies: available-typed-arrays "^1.0.7" @@ -8170,14 +7488,14 @@ which-typed-array@^1.1.16, which-typed-array@^1.1.19: which@^2.0.1: version "2.0.2" - resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== dependencies: isexe "^2.0.0" winston-transport@^4.9.0: version "4.9.0" - resolved "https://registry.npmjs.org/winston-transport/-/winston-transport-4.9.0.tgz" + resolved "https://registry.yarnpkg.com/winston-transport/-/winston-transport-4.9.0.tgz#3bba345de10297654ea6f33519424560003b3bf9" integrity sha512-8drMJ4rkgaPo1Me4zD/3WLfI/zPdA9o2IipKODunnGDcuqbHwjsbB79ylv04LCGGzU0xQ6vTznOMpQGaLhhm6A== dependencies: logform "^2.7.0" @@ -8185,10 +7503,12 @@ winston-transport@^4.9.0: triple-beam "^1.3.0" winston@^3.3.3: - version "3.17.0" + version "3.18.3" + resolved "https://registry.yarnpkg.com/winston/-/winston-3.18.3.tgz#93ac10808c8e1081d723bc8811cd2f445ddfdcd1" + integrity sha512-NoBZauFNNWENgsnC9YpgyYwOVrl2m58PpQ8lNHjV3kosGs7KJ7Npk9pCUE+WJlawVSe8mykWDKWFSVfs3QO9ww== dependencies: "@colors/colors" "^1.6.0" - "@dabh/diagnostics" "^2.0.2" + "@dabh/diagnostics" "^2.0.8" async "^3.2.3" is-stream "^2.0.0" logform "^2.7.0" @@ -8201,24 +7521,24 @@ winston@^3.3.3: wkx@^0.5.0: version "0.5.0" - resolved "https://registry.npmjs.org/wkx/-/wkx-0.5.0.tgz" + resolved "https://registry.yarnpkg.com/wkx/-/wkx-0.5.0.tgz#c6c37019acf40e517cc6b94657a25a3d4aa33e8c" integrity sha512-Xng/d4Ichh8uN4l0FToV/258EjMGU9MGcA0HV2d9B/ZpZB3lqQm7nkOdZdm5GhKtLLhAE7PiVQwN4eN+2YJJUg== dependencies: "@types/node" "*" word-wrap@^1.2.5: version "1.2.5" - resolved "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34" integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== wordwrap@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" integrity sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q== wrap-ansi@^6.2.0: version "6.2.0" - resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== dependencies: ansi-styles "^4.0.0" @@ -8227,7 +7547,7 @@ wrap-ansi@^6.2.0: wrap-ansi@^7.0.0: version "7.0.0" - resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== dependencies: ansi-styles "^4.0.0" @@ -8236,37 +7556,17 @@ wrap-ansi@^7.0.0: wrappy@1: version "1.0.2" - resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== -write-file-atomic@^3.0.0: - version "3.0.3" - resolved "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz" - integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== - dependencies: - imurmurhash "^0.1.4" - is-typedarray "^1.0.0" - signal-exit "^3.0.2" - typedarray-to-buffer "^3.1.5" - "ws@^5.2.0 || ^6.0.0 || ^7.0.0": version "7.5.10" - resolved "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.10.tgz#58b5c20dc281633f6c19113f39b349bd8bd558d9" integrity sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ== -ws@^8.18.0: - version "8.18.3" - resolved "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz" - integrity sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg== - -xdg-basedir@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz" - integrity sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q== - xss@^1.0.8: version "1.0.15" - resolved "https://registry.npmjs.org/xss/-/xss-1.0.15.tgz" + resolved "https://registry.yarnpkg.com/xss/-/xss-1.0.15.tgz#96a0e13886f0661063028b410ed1b18670f4e59a" integrity sha512-FVdlVVC67WOIPvfOwhoMETV72f6GbW7aOabBC3WxN/oUdoEMDyLz4OgRv5/gck2ZeNqEQu+Tb0kloovXOfpYVg== dependencies: commander "^2.20.3" @@ -8274,56 +7574,40 @@ xss@^1.0.8: xtend@^4.0.0: version "4.0.2" - resolved "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== y18n@^5.0.5: version "5.0.8" - resolved "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== yallist@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== yaml@^2.4.1: - version "2.8.0" + version "2.8.1" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.8.1.tgz#1870aa02b631f7e8328b93f8bc574fac5d6c4d79" + integrity sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw== yamljs@^0.3.0: version "0.3.0" - resolved "https://registry.npmjs.org/yamljs/-/yamljs-0.3.0.tgz" + resolved "https://registry.yarnpkg.com/yamljs/-/yamljs-0.3.0.tgz#dc060bf267447b39f7304e9b2bfbe8b5a7ddb03b" integrity sha512-C/FsVVhht4iPQYXOInoxUM/1ELSf9EsgKH34FofQOp6hwCPrW4vG4w5++TED3xRUo8gD7l0P1J1dLlDYzODsTQ== dependencies: argparse "^1.0.7" glob "^7.0.5" -yargs-parser@^20.2.2: - version "20.2.9" - resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz" - integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== - yargs-parser@^21.1.1: version "21.1.1" - resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== -yargs@^16.2.0: - version "16.2.0" - resolved "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz" - integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== - dependencies: - cliui "^7.0.2" - escalade "^3.1.1" - get-caller-file "^2.0.5" - require-directory "^2.1.1" - string-width "^4.2.0" - y18n "^5.0.5" - yargs-parser "^20.2.2" - yargs@^17.7.2: version "17.7.2" - resolved "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== dependencies: cliui "^8.0.1" @@ -8336,25 +7620,22 @@ yargs@^17.7.2: yn@3.1.1: version "3.1.1" - resolved "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz" + resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== -yocto-queue@^0.1.0: - version "0.1.0" - resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz" - integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== - yocto-queue@^1.0.0: - version "1.2.1" - resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.1.tgz" - integrity sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg== + version "1.2.2" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-1.2.2.tgz#3e09c95d3f1aa89a58c114c99223edf639152c00" + integrity sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ== yoctocolors-cjs@^2.1.2: - version "2.1.2" + version "2.1.3" + resolved "https://registry.yarnpkg.com/yoctocolors-cjs/-/yoctocolors-cjs-2.1.3.tgz#7e4964ea8ec422b7a40ac917d3a344cfd2304baa" + integrity sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw== zen-observable-ts@^0.8.21: version "0.8.21" - resolved "https://registry.npmjs.org/zen-observable-ts/-/zen-observable-ts-0.8.21.tgz" + resolved "https://registry.yarnpkg.com/zen-observable-ts/-/zen-observable-ts-0.8.21.tgz#85d0031fbbde1eba3cd07d3ba90da241215f421d" integrity sha512-Yj3yXweRc8LdRMrCC8nIc4kkjWecPAUVh0TI0OUrWXx6aX790vLcDlWca6I4vsyCGH3LpWxq0dJRcMOFoVqmeg== dependencies: tslib "^1.9.3" @@ -8362,15 +7643,15 @@ zen-observable-ts@^0.8.21: zen-observable@^0.8.0: version "0.8.15" - resolved "https://registry.npmjs.org/zen-observable/-/zen-observable-0.8.15.tgz" + resolved "https://registry.yarnpkg.com/zen-observable/-/zen-observable-0.8.15.tgz#96415c512d8e3ffd920afd3889604e30b9eaac15" integrity sha512-PQ2PC7R9rslx84ndNBZB/Dkv8V8fZEpk83RLgXtYd0fwUgEjseMn1Dgajh2x6S8QbZAFa9p2qVCEuYZNgve0dQ== zod-to-json-schema@^3.22.3, zod-to-json-schema@^3.22.5: version "3.24.6" - resolved "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.24.6.tgz" + resolved "https://registry.yarnpkg.com/zod-to-json-schema/-/zod-to-json-schema-3.24.6.tgz#5920f020c4d2647edfbb954fa036082b92c9e12d" integrity sha512-h/z3PKvcTcTetyjl1fkj79MHNEjm+HpD6NXheWjzOekY7kV+lwDYnHw+ivHkijnCSMz1yJaWBD9vu/Fcmk+vEg== -zod@^3.22.4, zod@^3.23.5, zod@^3.23.8, zod@^3.24.1: +zod@^3.22.4, zod@^3.23.5: version "3.25.76" - resolved "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz" + resolved "https://registry.yarnpkg.com/zod/-/zod-3.25.76.tgz#26841c3f6fd22a6a2760e7ccb719179768471e34" integrity sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ== diff --git a/docker-compose.yml b/docker-compose.yml index f603fc26..c5b40407 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -24,8 +24,6 @@ services: - /app/node_modules ports: - 5000:5000 - environment: - - FRONTEND_URL=http://localhost:3000 dns: - 8.8.8.8 depends_on: diff --git a/frontend/.eslintrc.js b/frontend/.eslintrc.js index bd54c02d..694dee9a 100644 --- a/frontend/.eslintrc.js +++ b/frontend/.eslintrc.js @@ -38,6 +38,7 @@ module.exports = { "react/jsx-no-bind": "off", "no-lonely-if": "off", "no-restricted-syntax": "off", + "@typescript-eslint/no-explicit-any": "off", }, ignorePatterns: ["build/*"], }; diff --git a/frontend/Dockerfile b/frontend/Dockerfile index 303afbd6..8989432b 100644 --- a/frontend/Dockerfile +++ b/frontend/Dockerfile @@ -1,7 +1,6 @@ FROM node:20-slim WORKDIR /app -# Set Node.js memory limit for build ENV NODE_OPTIONS="--max-old-space-size=4096" COPY package.json yarn.lock ./ @@ -9,15 +8,6 @@ RUN yarn config set registry https://registry.npmmirror.com/ && \ yarn install --network-timeout 600000 COPY . ./ -# Accept build arguments and set as environment variables for build -ARG REACT_APP_BACKEND_URL -ARG REACT_APP_JWT_SECRET -ENV REACT_APP_BACKEND_URL=$REACT_APP_BACKEND_URL -ENV REACT_APP_JWT_SECRET=$REACT_APP_JWT_SECRET - -# Build the production bundle RUN yarn build - -# Serve the static files EXPOSE 3000 ENTRYPOINT ["yarn", "serve"] \ No newline at end of file diff --git a/frontend/Dockerfile.dev b/frontend/Dockerfile.dev index d5ea87f0..2ccf5ccd 100644 --- a/frontend/Dockerfile.dev +++ b/frontend/Dockerfile.dev @@ -1,8 +1,12 @@ FROM node:20-slim WORKDIR /app + +ENV NODE_OPTIONS="--max-old-space-size=4096" + COPY package.json yarn.lock ./ RUN yarn config set registry https://registry.npmmirror.com/ && \ yarn install --network-timeout 600000 COPY . ./ + EXPOSE 3000 ENTRYPOINT ["yarn", "start"] \ No newline at end of file diff --git a/frontend/package-lock.json b/frontend/package-lock.json new file mode 100644 index 00000000..1d8515fb --- /dev/null +++ b/frontend/package-lock.json @@ -0,0 +1,24007 @@ +{ + "name": "frontend", + "version": "0.1.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "frontend", + "version": "0.1.0", + "dependencies": { + "@apollo/client": "^3.7.1", + "@chakra-ui/anatomy": "^2.3.4", + "@chakra-ui/icons": "^2.2.4", + "@chakra-ui/react": "^2.8.2", + "@chakra-ui/styled-system": "^2.12.0", + "@chakra-ui/theme-tools": "^2.2.6", + "@emotion/react": "11", + "@emotion/styled": "11", + "@fullcalendar/core": "^6.1.15", + "@fullcalendar/daygrid": "^6.1.15", + "@fullcalendar/react": "^6.1.15", + "@fullcalendar/timegrid": "^6.1.15", + "@mui/icons-material": "5.15.14", + "@mui/material": "^5.15.14", + "@rjsf/bootstrap-4": "^2.5.1", + "@rjsf/core": "^2.5.1", + "@testing-library/jest-dom": "^5.11.4", + "@testing-library/react": "^11.1.0", + "@testing-library/user-event": "^12.1.10", + "@types/apollo-upload-client": "^14.1.0", + "@types/jest": "^26.0.15", + "@types/json2csv": "^5.0.3", + "@types/react": "^18.0.25", + "@types/react-big-calendar": "^1.16.2", + "@types/react-dom": "^18.0.9", + "@types/react-jsonschema-form": "^1.7.4", + "@types/react-table": "^7.0.29", + "apollo-upload-client": "^16.0.0", + "axios": "^1.6.0", + "bootstrap": "^4.6.0", + "buffer": "^6.0.3", + "crypto-js": "^4.2.0", + "date-fns": "^4.1.0", + "framer-motion": "6", + "graphql": "^15.5.0", + "humps": "^2.0.1", + "jose": "4", + "json-schema": "^0.4.0", + "json2csv": "^5.0.6", + "jwt-decode": "^4.0.0", + "moment": "^2.30.1", + "node-cron": "^3.0.3", + "react": "^18.2.0", + "react-big-calendar": "^1.19.4", + "react-bootstrap": "^1.5.2", + "react-dom": "^18.2.0", + "react-google-login": "^5.2.2", + "react-icons": "^5.2.1", + "react-json-schema": "^1.2.2", + "react-jsonschema-form": "^1.8.1", + "react-router-dom": "^6.4.3", + "react-scripts": "^5.0.1", + "react-table": "^7.7.0", + "recharts": "^3.2.1", + "serve": "^14.2.1", + "typescript": "^4.9.3", + "web-vitals": "^1.0.1" + }, + "devDependencies": { + "@babel/plugin-proposal-private-property-in-object": "^7.21.11", + "@types/crypto-js": "^4.2.2", + "@types/humps": "^2.0.0", + "@types/node": "^22.15.29", + "@types/react-router-dom": "^5.1.7", + "@types/react-test-renderer": "^17.0.1", + "@typescript-eslint/eslint-plugin": "^5.44.0", + "@typescript-eslint/parser": "^5.44.0", + "eslint": "^8.28.0", + "eslint-config-airbnb-typescript": "^12.3.1", + "eslint-config-prettier": "^8.1.0", + "eslint-plugin-import": "^2.22.1", + "eslint-plugin-jsx-a11y": "^6.4.1", + "eslint-plugin-prettier": "^3.3.1", + "eslint-plugin-react": "^7.22.0", + "eslint-plugin-react-hooks": "^4.2.0", + "prettier": "^2.2.1", + "react-test-renderer": "^17.0.2" + } + }, + "node_modules/@aashutoshrathi/word-wrap": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", + "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@adobe/css-tools": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.3.3.tgz", + "integrity": "sha512-rE0Pygv0sEZ4vBWHlAgJLGDU7Pm8xoO6p3wsEceb7GYAjScrOHpEo8KK/eVkAcnSM+slAEtXjA2JpdjLp4fJQQ==", + "license": "MIT" + }, + "node_modules/@alloc/quick-lru": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", + "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", + "license": "Apache-2.0", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@apideck/better-ajv-errors": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@apideck/better-ajv-errors/-/better-ajv-errors-0.3.6.tgz", + "integrity": "sha512-P+ZygBLZtkp0qqOAJJVX4oX/sFo5JR3eBWwwuqHHhK0GIgQOKWrAfiAaWX0aArHkRWHMuggFEgAZNxVPwPZYaA==", + "license": "MIT", + "dependencies": { + "json-schema": "^0.4.0", + "jsonpointer": "^5.0.0", + "leven": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "ajv": ">=8" + } + }, + "node_modules/@apideck/better-ajv-errors/node_modules/jsonpointer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.1.tgz", + "integrity": "sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@apollo/client": { + "version": "3.9.5", + "resolved": "https://registry.npmjs.org/@apollo/client/-/client-3.9.5.tgz", + "integrity": "sha512-7y+c8MTPU+hhTwvcGVtMMGIgWduzrvG1mz5yJMRyqYbheBkkky3Lki6ADWVSBXG1lZoOtPYvB2zDgVfKb2HSsw==", + "license": "MIT", + "dependencies": { + "@graphql-typed-document-node/core": "^3.1.1", + "@wry/caches": "^1.0.0", + "@wry/equality": "^0.5.6", + "@wry/trie": "^0.5.0", + "graphql-tag": "^2.12.6", + "hoist-non-react-statics": "^3.3.2", + "optimism": "^0.18.0", + "prop-types": "^15.7.2", + "rehackt": "0.0.5", + "response-iterator": "^0.2.6", + "symbol-observable": "^4.0.0", + "ts-invariant": "^0.10.3", + "tslib": "^2.3.0", + "zen-observable-ts": "^1.2.5" + }, + "peerDependencies": { + "graphql": "^15.0.0 || ^16.0.0", + "graphql-ws": "^5.5.5", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0", + "subscriptions-transport-ws": "^0.9.0 || ^0.11.0" + }, + "peerDependenciesMeta": { + "graphql-ws": { + "optional": true + }, + "react": { + "optional": true + }, + "react-dom": { + "optional": true + }, + "subscriptions-transport-ws": { + "optional": true + } + } + }, + "node_modules/@babel/code-frame": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.27.1", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.5.tgz", + "integrity": "sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.9.tgz", + "integrity": "sha512-5q0175NOjddqpvvzU+kDiSOAk4PfdO6FvwCWoQ6RO7rTzEe8vlo+4HVfcnAREhD4npMs0e9uZypjTwzZPCf/cw==", + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@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/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.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "license": "MIT" + }, + "node_modules/@babel/eslint-parser": { + "version": "7.23.10", + "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.23.10.tgz", + "integrity": "sha512-3wSYDPZVnhseRnxRJH6ZVTNknBz76AEnyC+AYYhasjP3Yy23qz0ERR7Fcd2SHmYuSFJ2kY9gaaDd3vyqU09eSw==", + "license": "MIT", + "dependencies": { + "@nicolo-ribaudo/eslint-scope-5-internals": "5.1.1-v1", + "eslint-visitor-keys": "^2.1.0", + "semver": "^6.3.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || >=14.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.11.0", + "eslint": "^7.5.0 || ^8.0.0" + } + }, + "node_modules/@babel/eslint-parser/node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "license": "Apache-2.0", + "engines": { + "node": ">=10" + } + }, + "node_modules/@babel/generator": { + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.3.tgz", + "integrity": "sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.28.3", + "@babel/types": "^7.28.2", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.27.3", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz", + "integrity": "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.27.3" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz", + "integrity": "sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz", + "integrity": "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==", + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.23.5", + "@babel/helper-validator-option": "^7.23.5", + "browserslist": "^4.22.2", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.28.3.tgz", + "integrity": "sha512-V9f6ZFIYSLNEbuGA/92uOvYsGCJNsuA8ESZ4ldc09bWk/j8H8TKiPw8Mk1eG6olpnO0ALHJmYfZvF4MEE4gajg==", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.3", + "@babel/helper-member-expression-to-functions": "^7.27.1", + "@babel/helper-optimise-call-expression": "^7.27.1", + "@babel/helper-replace-supers": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", + "@babel/traverse": "^7.28.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz", + "integrity": "sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "regexpu-core": "^5.3.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.5.0.tgz", + "integrity": "sha512-NovQquuQLAQ5HuyjCz7WQP9MjRj7dx++yspwiyUiGl9ZyadHRSql1HZh5ogRd8W8w6YM6EQ/NTB8rgjLt5W65Q==", + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-plugin-utils": "^7.22.5", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", + "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", + "license": "MIT", + "dependencies": { + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-globals": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", + "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.27.1.tgz", + "integrity": "sha512-E5chM8eWjTp/aNoVpcbfM7mLxu9XGLWYise2eBKGQomAk/Mb4XoxyqXTZbuTohbsl8EKqdlMhnDI2CCLfcs9wA==", + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", + "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz", + "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==", + "license": "MIT", + "dependencies": { + "@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" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.27.1.tgz", + "integrity": "sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", + "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz", + "integrity": "sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-wrap-function": "^7.22.20" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.27.1.tgz", + "integrity": "sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA==", + "license": "MIT", + "dependencies": { + "@babel/helper-member-expression-to-functions": "^7.27.1", + "@babel/helper-optimise-call-expression": "^7.27.1", + "@babel/traverse": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", + "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.27.1.tgz", + "integrity": "sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==", + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", + "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz", + "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.20.tgz", + "integrity": "sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==", + "license": "MIT", + "dependencies": { + "@babel/helper-function-name": "^7.22.5", + "@babel/template": "^7.22.15", + "@babel/types": "^7.22.19" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.9.tgz", + "integrity": "sha512-87ICKgU5t5SzOT7sBMfCOZQ2rHjRU+Pcb9BoILMYz600W6DkVRLFBPwQ18gwUVvggqXivaUakpnxWQGbpywbBQ==", + "license": "MIT", + "dependencies": { + "@babel/template": "^7.23.9", + "@babel/traverse": "^7.23.9", + "@babel/types": "^7.23.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.4.tgz", + "integrity": "sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.4" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.23.3.tgz", + "integrity": "sha512-iRkKcCqb7iGnq9+3G6rZ+Ciz5VywC4XNRHe57lKM+jOeYAoR0lVqdeeDRfh0tQcTfw/+vBhHn926FmQhLtlFLQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.23.3.tgz", + "integrity": "sha512-WwlxbfMNdVEpQjZmK5mhm7oSwD3dS6eU+Iwsi4Knl9wAletWem7kaRsGOG+8UEbRyqxY4SS5zvtfXwX+jMxUwQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/plugin-transform-optional-chaining": "^7.23.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { + "version": "7.23.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.23.7.tgz", + "integrity": "sha512-LlRT7HgaifEpQA1ZgLVOIJZZFVPWN5iReq/7/JixwBtwcoeVGDBD53ZV28rrsLYOZs1Y/EHhA8N/Z6aazHR8cw==", + "license": "MIT", + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-proposal-class-properties": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", + "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-decorators": { + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.23.9.tgz", + "integrity": "sha512-hJhBCb0+NnTWybvWq2WpbCYDOcflSbx0t+BYP65e5R9GVnukiDTi+on5bFkk4p7QGuv190H6KfNiV9Knf/3cZA==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.23.9", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-decorators": "^7.23.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", + "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-numeric-separator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz", + "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-optional-chaining": { + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz", + "integrity": "sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-private-methods": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz", + "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.11.tgz", + "integrity": "sha512-0QZ8qP/3RLDVBwBFoWAwCtgcDZJVwA5LUJRZU8x2YFfKNuFq161wK3cuGrALu5yiPu+vzwTAg/sMWVNeWeNyaw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-create-class-features-plugin": "^7.21.0", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-decorators": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.23.3.tgz", + "integrity": "sha512-cf7Niq4/+/juY67E0PbgH0TDhLQ5J7zS8C/Q5FFx+DWyrRa9sUQdTXkjqKu8zGvuqr7vw1muKiukseihU+PJDA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-flow": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.23.3.tgz", + "integrity": "sha512-YZiAIpkJAwQXBJLIQbRFayR5c+gJ35Vcz3bg954k7cd73zqjvhacJuL9RbrzPz8qPmZdgqP6EUKwy0PCNhaaPA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-assertions": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.23.3.tgz", + "integrity": "sha512-lPgDSU+SJLK3xmFDTV2ZRQAiM7UuUjGidwBywFavObCiZc1BeAAcMtHJKUya92hPHO+at63JJPLygilZard8jw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.23.3.tgz", + "integrity": "sha512-pawnE0P9g10xgoP7yKr6CK63K2FMsTE+FZidZO/1PwRdzmAPVs+HS1mAURUsgaoxammTJvULUdIkEK0gOcU2tA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.23.3.tgz", + "integrity": "sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.23.3.tgz", + "integrity": "sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-unicode-sets-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", + "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.23.3.tgz", + "integrity": "sha512-NzQcQrzaQPkaEwoTm4Mhyl8jI1huEL/WWIEvudjTCMJ9aBZNpsJbMASx7EQECtQQPS/DcnFpo0FIh3LvEO9cxQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-generator-functions": { + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.9.tgz", + "integrity": "sha512-8Q3veQEDGe14dTYuwagbRtwxQDnytyg1JFu4/HwEMETeofocrB0U0ejBJIXoeG/t2oXZ8kzCyI0ZZfbT80VFNQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.20", + "@babel/plugin-syntax-async-generators": "^7.8.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.23.3.tgz", + "integrity": "sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.20" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.23.3.tgz", + "integrity": "sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.4.tgz", + "integrity": "sha512-0QqbP6B6HOh7/8iNR4CQU2Th/bbRtBp4KS9vcaZd1fZ0wSh5Fyssg0UCIHwxh+ka+pNDREbVLQnHCMHKZfPwfw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-properties": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.23.3.tgz", + "integrity": "sha512-uM+AN8yCIjDPccsKGlw271xjJtGii+xQIF/uMPS8H15L12jZTsLfF4o5vNO7d/oUguOyfdikHGc/yi9ge4SGIg==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-static-block": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.23.4.tgz", + "integrity": "sha512-nsWu/1M+ggti1SOALj3hfx5FXzAY06fwPJsUZD4/A5e1bWi46VUIWtD+kOX6/IdhXGsXBWllLFDSnqSCdUNydQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.23.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.23.8.tgz", + "integrity": "sha512-yAYslGsY1bX6Knmg46RjiCiNSwJKv2IUC8qOdYKqMMr0491SXFhcHqOdRDeCRohOOIzwN/90C6mQ9qAKgrP7dg==", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-compilation-targets": "^7.23.6", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.20", + "@babel/helper-split-export-declaration": "^7.22.6", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-classes/node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.23.3.tgz", + "integrity": "sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/template": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.23.3.tgz", + "integrity": "sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.23.3.tgz", + "integrity": "sha512-vgnFYDHAKzFaTVp+mneDsIEbnJ2Np/9ng9iviHw3P/KVcgONxpNULEW/51Z/BaFojG2GI2GwwXck5uV1+1NOYQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.23.3.tgz", + "integrity": "sha512-RrqQ+BQmU3Oyav3J+7/myfvRCq7Tbz+kKLLshUmMwNlDHExbGL7ARhajvoBJEvc+fCguPPu887N+3RRXBVKZUA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dynamic-import": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.23.4.tgz", + "integrity": "sha512-V6jIbLhdJK86MaLh4Jpghi8ho5fGzt3imHOBu/x0jlBaPYqDoWz4RDXjmMOfnh+JWNaQleEAByZLV0QzBT4YQQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.23.3.tgz", + "integrity": "sha512-5fhCsl1odX96u7ILKHBj4/Y8vipoqwsJMh4csSA8qFfxrZDEA4Ssku2DyNvMJSmZNOEBT750LfFPbtrnTP90BQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-export-namespace-from": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.23.4.tgz", + "integrity": "sha512-GzuSBcKkx62dGzZI1WVgTWvkkz84FZO5TC5T8dl/Tht/rAla6Dg/Mz9Yhypg+ezVACf/rgDuQt3kbWEv7LdUDQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-flow-strip-types": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.23.3.tgz", + "integrity": "sha512-26/pQTf9nQSNVJCrLB1IkHUKyPxR+lMrH2QDPG89+Znu9rAMbtrybdbWeE9bb7gzjmE5iXHEY+e0HUwM6Co93Q==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-flow": "^7.23.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.23.6.tgz", + "integrity": "sha512-aYH4ytZ0qSuBbpfhuofbg/e96oQ7U2w1Aw/UQmKT+1l39uEhUPoFS3fHevDc1G0OvewyDudfMKY1OulczHzWIw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.23.3.tgz", + "integrity": "sha512-I1QXp1LxIvt8yLaib49dRW5Okt7Q4oaxao6tFVKS/anCdEOMtYwWVKoiOA1p34GOWIZjUK0E+zCp7+l1pfQyiw==", + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-json-strings": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.23.4.tgz", + "integrity": "sha512-81nTOqM1dMwZ/aRXQ59zVubN9wHGqk6UtqRK+/q+ciXmRy8fSolhGVvG09HHRGo4l6fr/c4ZhXUQH0uFW7PZbg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-json-strings": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-literals": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.23.3.tgz", + "integrity": "sha512-wZ0PIXRxnwZvl9AYpqNUxpZ5BiTGrYt7kueGQ+N5FiQ7RCOD4cm8iShd6S6ggfVIWaJf2EMk8eRzAh52RfP4rQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-logical-assignment-operators": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.23.4.tgz", + "integrity": "sha512-Mc/ALf1rmZTP4JKKEhUwiORU+vcfarFVLfcFiolKUo6sewoxSEgl36ak5t+4WamRsNr6nzjZXQjM35WsU+9vbg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.23.3.tgz", + "integrity": "sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.23.3.tgz", + "integrity": "sha512-vJYQGxeKM4t8hYCKVBlZX/gtIY2I7mRGFNcm85sgXGMTBcoV3QdVtdpbcWEbzbfUIUZKwvgFT82mRvaQIebZzw==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.3.tgz", + "integrity": "sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-simple-access": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.9.tgz", + "integrity": "sha512-KDlPRM6sLo4o1FkiSlXoAa8edLXFsKKIda779fbLrvmeuc3itnjCtaO6RrtoaANsIJANj+Vk1zqbZIMhkCAHVw==", + "license": "MIT", + "dependencies": { + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.20" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.23.3.tgz", + "integrity": "sha512-zHsy9iXX2nIsCBFPud3jKn1IRPWg3Ing1qOZgeKV39m1ZgIdpJqvlWVeiHBZC6ITRG0MfskhYe9cLgntfSFPIg==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz", + "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.23.3.tgz", + "integrity": "sha512-YJ3xKqtJMAT5/TIZnpAR3I+K+WaDowYbN3xyxI8zxx/Gsypwf9B9h0VB+1Nh6ACAAPRS5NSRje0uVv5i79HYGQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.23.4.tgz", + "integrity": "sha512-jHE9EVVqHKAQx+VePv5LLGHjmHSJR76vawFPTdlxR/LVJPfOEGxREQwQfjuZEOPTwG92X3LINSh3M40Rv4zpVA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-numeric-separator": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.23.4.tgz", + "integrity": "sha512-mps6auzgwjRrwKEZA05cOwuDc9FAzoyFS4ZsG/8F43bTLf/TgkJg7QXOrPO1JO599iA3qgK9MXdMGOEC8O1h6Q==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-rest-spread": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.23.4.tgz", + "integrity": "sha512-9x9K1YyeQVw0iOXJlIzwm8ltobIIv7j2iLyP2jIhEbqPRQ7ScNgwQufU2I0Gq11VjyG4gI4yMXt2VFags+1N3g==", + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.23.3", + "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.23.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.23.3.tgz", + "integrity": "sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.20" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-catch-binding": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.23.4.tgz", + "integrity": "sha512-XIq8t0rJPHf6Wvmbn9nFxU6ao4c7WhghTR5WyV8SrJfUFzyxhCm4nhC+iAp3HFhbAKLfYpgzhJ6t4XCtVwqO5A==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-chaining": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.4.tgz", + "integrity": "sha512-ZU8y5zWOfjM5vZ+asjgAPwDaBjJzgufjES89Rs4Lpq63O300R/kOz30WCLo6BxxX6QVEilwSlpClnG5cZaikTA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.23.3.tgz", + "integrity": "sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-methods": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.23.3.tgz", + "integrity": "sha512-UzqRcRtWsDMTLrRWFvUBDwmw06tCQH9Rl1uAjfh6ijMSmGYQ+fpdB+cnqRC8EMh5tuuxSv0/TejGL+7vyj+50g==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-property-in-object": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.23.4.tgz", + "integrity": "sha512-9G3K1YqTq3F4Vt88Djx1UZ79PDyj+yKRnUy7cZGSMe+a7jkwD259uKKuUzQlPkGam7R+8RJwh5z4xO27fA1o2A==", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.23.3.tgz", + "integrity": "sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-constant-elements": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.23.3.tgz", + "integrity": "sha512-zP0QKq/p6O42OL94udMgSfKXyse4RyJ0JqbQ34zDAONWjyrEsghYEyTSK5FIpmXmCpB55SHokL1cRRKHv8L2Qw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-display-name": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.23.3.tgz", + "integrity": "sha512-GnvhtVfA2OAtzdX58FJxU19rhoGeQzyVndw3GgtdECQvQFXPEZIOVULHVZGAYmOgmqjXpVpfocAbSjh99V/Fqw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.23.4.tgz", + "integrity": "sha512-5xOpoPguCZCRbo/JeHlloSkTA8Bld1J/E1/kLfD1nsuiW1m8tduTA1ERCgIZokDflX/IBzKcqR3l7VlRgiIfHA==", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-jsx": "^7.23.3", + "@babel/types": "^7.23.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-development": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.22.5.tgz", + "integrity": "sha512-bDhuzwWMuInwCYeDeMzyi7TaBgRQei6DqxhbyniL7/VG4RSS7HtSL2QbY4eESy1KJqlWt8g3xeEBGPuo+XqC8A==", + "license": "MIT", + "dependencies": { + "@babel/plugin-transform-react-jsx": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-pure-annotations": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.23.3.tgz", + "integrity": "sha512-qMFdSS+TUhB7Q/3HVPnEdYJDQIk57jkntAwSuz9xfSE4n+3I+vHYCli3HoHawN1Z3RfCz/y1zXA/JXjG6cVImQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.23.3.tgz", + "integrity": "sha512-KP+75h0KghBMcVpuKisx3XTu9Ncut8Q8TuvGO4IhY+9D5DFEckQefOuIsB/gQ2tG71lCke4NMrtIPS8pOj18BQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "regenerator-transform": "^0.15.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.23.3.tgz", + "integrity": "sha512-QnNTazY54YqgGxwIexMZva9gqbPa15t/x9VS+0fsEFWplwVpXYZivtgl43Z1vMpc1bdPP2PP8siFeVcnFvA3Cg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime": { + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.23.9.tgz", + "integrity": "sha512-A7clW3a0aSjm3ONU9o2HAILSegJCYlEZmOhmBRReVtIpY/Z/p7yIZ+wR41Z+UipwdGuqwtID/V/dOdZXjwi9gQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "babel-plugin-polyfill-corejs2": "^0.4.8", + "babel-plugin-polyfill-corejs3": "^0.9.0", + "babel-plugin-polyfill-regenerator": "^0.5.5", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.23.3.tgz", + "integrity": "sha512-ED2fgqZLmexWiN+YNFX26fx4gh5qHDhn1O2gvEhreLW2iI63Sqm4llRLCXALKrCnbN4Jy0VcMQZl/SAzqug/jg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.23.3.tgz", + "integrity": "sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.23.3.tgz", + "integrity": "sha512-HZOyN9g+rtvnOU3Yh7kSxXrKbzgrm5X4GncPY1QOquu7epga5MxKHVpYu2hvQnry/H+JjckSYRb93iNfsioAGg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.23.3.tgz", + "integrity": "sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.23.3.tgz", + "integrity": "sha512-4t15ViVnaFdrPC74be1gXBSMzXk3B4Us9lP7uLRQHTFpV5Dvt33pn+2MyyNxmN3VTTm3oTrZVMUmuw3oBnQ2oQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typescript": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.23.6.tgz", + "integrity": "sha512-6cBG5mBvUu4VUD04OHKnYzbuHNP8huDsD3EDqqpIpsswTDoqHCjLoHb6+QgsV1WsT2nipRqCPgxD3LXnEO7XfA==", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.23.6", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-typescript": "^7.23.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.23.3.tgz", + "integrity": "sha512-OMCUx/bU6ChE3r4+ZdylEqAjaQgHAgipgW8nsCfu5pGqDcFytVd91AwRvUJSBZDz0exPGgnjoqhgRYLRjFZc9Q==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-property-regex": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.23.3.tgz", + "integrity": "sha512-KcLIm+pDZkWZQAFJ9pdfmh89EwVfmNovFBcXko8szpBeF8z68kWIPeKlmSOkT9BXJxs2C0uk+5LxoxIv62MROA==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.23.3.tgz", + "integrity": "sha512-wMHpNA4x2cIA32b/ci3AfwNgheiva2W0WUKWTK7vBHBhDKfPsc5cFGNWm69WBqpwd86u1qwZ9PWevKqm1A3yAw==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-sets-regex": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.23.3.tgz", + "integrity": "sha512-W7lliA/v9bNR83Qc3q1ip9CQMZ09CcHDbHfbLRDNuAhn1Mvkr1ZNF7hPmztMQvtTGVLJ9m8IZqWsTkXOml8dbw==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.23.9.tgz", + "integrity": "sha512-3kBGTNBBk9DQiPoXYS0g0BYlwTQYUTifqgKTjxUwEUkduRT2QOa0FPGBJ+NROQhGyYO5BuTJwGvBnqKDykac6A==", + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.23.5", + "@babel/helper-compilation-targets": "^7.23.6", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-option": "^7.23.5", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.23.3", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.23.3", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.23.7", + "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-import-assertions": "^7.23.3", + "@babel/plugin-syntax-import-attributes": "^7.23.3", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.23.3", + "@babel/plugin-transform-async-generator-functions": "^7.23.9", + "@babel/plugin-transform-async-to-generator": "^7.23.3", + "@babel/plugin-transform-block-scoped-functions": "^7.23.3", + "@babel/plugin-transform-block-scoping": "^7.23.4", + "@babel/plugin-transform-class-properties": "^7.23.3", + "@babel/plugin-transform-class-static-block": "^7.23.4", + "@babel/plugin-transform-classes": "^7.23.8", + "@babel/plugin-transform-computed-properties": "^7.23.3", + "@babel/plugin-transform-destructuring": "^7.23.3", + "@babel/plugin-transform-dotall-regex": "^7.23.3", + "@babel/plugin-transform-duplicate-keys": "^7.23.3", + "@babel/plugin-transform-dynamic-import": "^7.23.4", + "@babel/plugin-transform-exponentiation-operator": "^7.23.3", + "@babel/plugin-transform-export-namespace-from": "^7.23.4", + "@babel/plugin-transform-for-of": "^7.23.6", + "@babel/plugin-transform-function-name": "^7.23.3", + "@babel/plugin-transform-json-strings": "^7.23.4", + "@babel/plugin-transform-literals": "^7.23.3", + "@babel/plugin-transform-logical-assignment-operators": "^7.23.4", + "@babel/plugin-transform-member-expression-literals": "^7.23.3", + "@babel/plugin-transform-modules-amd": "^7.23.3", + "@babel/plugin-transform-modules-commonjs": "^7.23.3", + "@babel/plugin-transform-modules-systemjs": "^7.23.9", + "@babel/plugin-transform-modules-umd": "^7.23.3", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", + "@babel/plugin-transform-new-target": "^7.23.3", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.23.4", + "@babel/plugin-transform-numeric-separator": "^7.23.4", + "@babel/plugin-transform-object-rest-spread": "^7.23.4", + "@babel/plugin-transform-object-super": "^7.23.3", + "@babel/plugin-transform-optional-catch-binding": "^7.23.4", + "@babel/plugin-transform-optional-chaining": "^7.23.4", + "@babel/plugin-transform-parameters": "^7.23.3", + "@babel/plugin-transform-private-methods": "^7.23.3", + "@babel/plugin-transform-private-property-in-object": "^7.23.4", + "@babel/plugin-transform-property-literals": "^7.23.3", + "@babel/plugin-transform-regenerator": "^7.23.3", + "@babel/plugin-transform-reserved-words": "^7.23.3", + "@babel/plugin-transform-shorthand-properties": "^7.23.3", + "@babel/plugin-transform-spread": "^7.23.3", + "@babel/plugin-transform-sticky-regex": "^7.23.3", + "@babel/plugin-transform-template-literals": "^7.23.3", + "@babel/plugin-transform-typeof-symbol": "^7.23.3", + "@babel/plugin-transform-unicode-escapes": "^7.23.3", + "@babel/plugin-transform-unicode-property-regex": "^7.23.3", + "@babel/plugin-transform-unicode-regex": "^7.23.3", + "@babel/plugin-transform-unicode-sets-regex": "^7.23.3", + "@babel/preset-modules": "0.1.6-no-external-plugins", + "babel-plugin-polyfill-corejs2": "^0.4.8", + "babel-plugin-polyfill-corejs3": "^0.9.0", + "babel-plugin-polyfill-regenerator": "^0.5.5", + "core-js-compat": "^3.31.0", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-env/node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.0-placeholder-for-preset-env.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-modules": { + "version": "0.1.6-no-external-plugins", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", + "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/preset-react": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.23.3.tgz", + "integrity": "sha512-tbkHOS9axH6Ysf2OUEqoSZ6T3Fa2SrNH6WTWSPBboxKzdxNc9qOICeLXkNG0ZEwbQ1HY8liwOce4aN/Ceyuq6w==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-option": "^7.22.15", + "@babel/plugin-transform-react-display-name": "^7.23.3", + "@babel/plugin-transform-react-jsx": "^7.22.15", + "@babel/plugin-transform-react-jsx-development": "^7.22.5", + "@babel/plugin-transform-react-pure-annotations": "^7.23.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-typescript": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.23.3.tgz", + "integrity": "sha512-17oIGVlqz6CchO9RFYn5U6ZpWRZIngayYCtrPRSgANSwC2V1Jb+iP74nVxzzXJte8b8BYxrL1yY96xfhTBrNNQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-option": "^7.22.15", + "@babel/plugin-syntax-jsx": "^7.23.3", + "@babel/plugin-transform-modules-commonjs": "^7.23.3", + "@babel/plugin-transform-typescript": "^7.23.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", + "license": "MIT" + }, + "node_modules/@babel/runtime": { + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.9.tgz", + "integrity": "sha512-0CX6F+BI2s9dkUqr08KFrAIZgNFj75rdBU/DjCyYLIaV/quFjkk6T+EJ2LkZHyZTbEV4L5p97mNkUsHl2wLFAw==", + "license": "MIT", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/runtime-corejs2": { + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs2/-/runtime-corejs2-7.23.9.tgz", + "integrity": "sha512-lwwDy5QfMkO2rmSz9AvLj6j2kWt5a4ulMi1t21vWQEO0kNCFslHoszat8reU/uigIQSUDF31zraZG/qMkcqAlw==", + "license": "MIT", + "dependencies": { + "core-js": "^2.6.12", + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/runtime-corejs3": { + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.23.9.tgz", + "integrity": "sha512-oeOFTrYWdWXCvXGB5orvMTJ6gCZ9I6FBjR+M38iKNXCsPxr4xT0RTdg5uz1H7QP8pp74IzPtwritEr+JscqHXQ==", + "license": "MIT", + "dependencies": { + "core-js-pure": "^3.30.2", + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", + "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/parser": "^7.27.2", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.4.tgz", + "integrity": "sha512-YEzuboP2qvQavAcjgQNVgsvHIDv6ZpwXvcvjmyySP2DIMuByS/6ioU5G9pYrWHM6T2YDfc7xga9iNzYOs12CFQ==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.3", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.28.4", + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.4", + "debug": "^4.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.4.tgz", + "integrity": "sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q==", + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "license": "MIT" + }, + "node_modules/@chakra-ui/accordion": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@chakra-ui/accordion/-/accordion-2.3.1.tgz", + "integrity": "sha512-FSXRm8iClFyU+gVaXisOSEw0/4Q+qZbFRiuhIAkVU6Boj0FxAMrlo9a8AV5TuF77rgaHytCdHk0Ng+cyUijrag==", + "license": "MIT", + "dependencies": { + "@chakra-ui/descendant": "3.1.0", + "@chakra-ui/icon": "3.2.0", + "@chakra-ui/react-context": "2.1.0", + "@chakra-ui/react-use-controllable-state": "2.1.0", + "@chakra-ui/react-use-merge-refs": "2.1.0", + "@chakra-ui/shared-utils": "2.0.5", + "@chakra-ui/transition": "2.1.0" + }, + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "framer-motion": ">=4.0.0", + "react": ">=18" + } + }, + "node_modules/@chakra-ui/alert": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@chakra-ui/alert/-/alert-2.2.2.tgz", + "integrity": "sha512-jHg4LYMRNOJH830ViLuicjb3F+v6iriE/2G5T+Sd0Hna04nukNJ1MxUmBPE+vI22me2dIflfelu2v9wdB6Pojw==", + "license": "MIT", + "dependencies": { + "@chakra-ui/icon": "3.2.0", + "@chakra-ui/react-context": "2.1.0", + "@chakra-ui/shared-utils": "2.0.5", + "@chakra-ui/spinner": "2.1.0" + }, + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "react": ">=18" + } + }, + "node_modules/@chakra-ui/anatomy": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/@chakra-ui/anatomy/-/anatomy-2.3.4.tgz", + "integrity": "sha512-fFIYN7L276gw0Q7/ikMMlZxP7mvnjRaWJ7f3Jsf9VtDOi6eAYIBRrhQe6+SZ0PGmoOkRaBc7gSE5oeIbgFFyrw==", + "license": "MIT" + }, + "node_modules/@chakra-ui/avatar": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/avatar/-/avatar-2.3.0.tgz", + "integrity": "sha512-8gKSyLfygnaotbJbDMHDiJoF38OHXUYVme4gGxZ1fLnQEdPVEaIWfH+NndIjOM0z8S+YEFnT9KyGMUtvPrBk3g==", + "license": "MIT", + "dependencies": { + "@chakra-ui/image": "2.1.0", + "@chakra-ui/react-children-utils": "2.0.6", + "@chakra-ui/react-context": "2.1.0", + "@chakra-ui/shared-utils": "2.0.5" + }, + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "react": ">=18" + } + }, + "node_modules/@chakra-ui/breadcrumb": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/breadcrumb/-/breadcrumb-2.2.0.tgz", + "integrity": "sha512-4cWCG24flYBxjruRi4RJREWTGF74L/KzI2CognAW/d/zWR0CjiScuJhf37Am3LFbCySP6WSoyBOtTIoTA4yLEA==", + "license": "MIT", + "dependencies": { + "@chakra-ui/react-children-utils": "2.0.6", + "@chakra-ui/react-context": "2.1.0", + "@chakra-ui/shared-utils": "2.0.5" + }, + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "react": ">=18" + } + }, + "node_modules/@chakra-ui/breakpoint-utils": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@chakra-ui/breakpoint-utils/-/breakpoint-utils-2.0.8.tgz", + "integrity": "sha512-Pq32MlEX9fwb5j5xx8s18zJMARNHlQZH2VH1RZgfgRDpp7DcEgtRW5AInfN5CfqdHLO1dGxA7I3MqEuL5JnIsA==", + "license": "MIT", + "dependencies": { + "@chakra-ui/shared-utils": "2.0.5" + } + }, + "node_modules/@chakra-ui/button": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/button/-/button-2.1.0.tgz", + "integrity": "sha512-95CplwlRKmmUXkdEp/21VkEWgnwcx2TOBG6NfYlsuLBDHSLlo5FKIiE2oSi4zXc4TLcopGcWPNcm/NDaSC5pvA==", + "license": "MIT", + "dependencies": { + "@chakra-ui/react-context": "2.1.0", + "@chakra-ui/react-use-merge-refs": "2.1.0", + "@chakra-ui/shared-utils": "2.0.5", + "@chakra-ui/spinner": "2.1.0" + }, + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "react": ">=18" + } + }, + "node_modules/@chakra-ui/card": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/card/-/card-2.2.0.tgz", + "integrity": "sha512-xUB/k5MURj4CtPAhdSoXZidUbm8j3hci9vnc+eZJVDqhDOShNlD6QeniQNRPRys4lWAQLCbFcrwL29C8naDi6g==", + "license": "MIT", + "dependencies": { + "@chakra-ui/shared-utils": "2.0.5" + }, + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "react": ">=18" + } + }, + "node_modules/@chakra-ui/checkbox": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@chakra-ui/checkbox/-/checkbox-2.3.2.tgz", + "integrity": "sha512-85g38JIXMEv6M+AcyIGLh7igNtfpAN6KGQFYxY9tBj0eWvWk4NKQxvqqyVta0bSAyIl1rixNIIezNpNWk2iO4g==", + "license": "MIT", + "dependencies": { + "@chakra-ui/form-control": "2.2.0", + "@chakra-ui/react-context": "2.1.0", + "@chakra-ui/react-types": "2.0.7", + "@chakra-ui/react-use-callback-ref": "2.1.0", + "@chakra-ui/react-use-controllable-state": "2.1.0", + "@chakra-ui/react-use-merge-refs": "2.1.0", + "@chakra-ui/react-use-safe-layout-effect": "2.1.0", + "@chakra-ui/react-use-update-effect": "2.1.0", + "@chakra-ui/shared-utils": "2.0.5", + "@chakra-ui/visually-hidden": "2.2.0", + "@zag-js/focus-visible": "0.16.0" + }, + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "react": ">=18" + } + }, + "node_modules/@chakra-ui/clickable": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/clickable/-/clickable-2.1.0.tgz", + "integrity": "sha512-flRA/ClPUGPYabu+/GLREZVZr9j2uyyazCAUHAdrTUEdDYCr31SVGhgh7dgKdtq23bOvAQJpIJjw/0Bs0WvbXw==", + "license": "MIT", + "dependencies": { + "@chakra-ui/react-use-merge-refs": "2.1.0", + "@chakra-ui/shared-utils": "2.0.5" + }, + "peerDependencies": { + "react": ">=18" + } + }, + "node_modules/@chakra-ui/close-button": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@chakra-ui/close-button/-/close-button-2.1.1.tgz", + "integrity": "sha512-gnpENKOanKexswSVpVz7ojZEALl2x5qjLYNqSQGbxz+aP9sOXPfUS56ebyBrre7T7exuWGiFeRwnM0oVeGPaiw==", + "license": "MIT", + "dependencies": { + "@chakra-ui/icon": "3.2.0" + }, + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "react": ">=18" + } + }, + "node_modules/@chakra-ui/color-mode": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/color-mode/-/color-mode-2.2.0.tgz", + "integrity": "sha512-niTEA8PALtMWRI9wJ4LL0CSBDo8NBfLNp4GD6/0hstcm3IlbBHTVKxN6HwSaoNYfphDQLxCjT4yG+0BJA5tFpg==", + "license": "MIT", + "dependencies": { + "@chakra-ui/react-use-safe-layout-effect": "2.1.0" + }, + "peerDependencies": { + "react": ">=18" + } + }, + "node_modules/@chakra-ui/control-box": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/control-box/-/control-box-2.1.0.tgz", + "integrity": "sha512-gVrRDyXFdMd8E7rulL0SKeoljkLQiPITFnsyMO8EFHNZ+AHt5wK4LIguYVEq88APqAGZGfHFWXr79RYrNiE3Mg==", + "license": "MIT", + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "react": ">=18" + } + }, + "node_modules/@chakra-ui/counter": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/counter/-/counter-2.1.0.tgz", + "integrity": "sha512-s6hZAEcWT5zzjNz2JIWUBzRubo9la/oof1W7EKZVVfPYHERnl5e16FmBC79Yfq8p09LQ+aqFKm/etYoJMMgghw==", + "license": "MIT", + "dependencies": { + "@chakra-ui/number-utils": "2.0.7", + "@chakra-ui/react-use-callback-ref": "2.1.0", + "@chakra-ui/shared-utils": "2.0.5" + }, + "peerDependencies": { + "react": ">=18" + } + }, + "node_modules/@chakra-ui/css-reset": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/css-reset/-/css-reset-2.3.0.tgz", + "integrity": "sha512-cQwwBy5O0jzvl0K7PLTLgp8ijqLPKyuEMiDXwYzl95seD3AoeuoCLyzZcJtVqaUZ573PiBdAbY/IlZcwDOItWg==", + "license": "MIT", + "peerDependencies": { + "@emotion/react": ">=10.0.35", + "react": ">=18" + } + }, + "node_modules/@chakra-ui/descendant": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/descendant/-/descendant-3.1.0.tgz", + "integrity": "sha512-VxCIAir08g5w27klLyi7PVo8BxhW4tgU/lxQyujkmi4zx7hT9ZdrcQLAted/dAa+aSIZ14S1oV0Q9lGjsAdxUQ==", + "license": "MIT", + "dependencies": { + "@chakra-ui/react-context": "2.1.0", + "@chakra-ui/react-use-merge-refs": "2.1.0" + }, + "peerDependencies": { + "react": ">=18" + } + }, + "node_modules/@chakra-ui/dom-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/dom-utils/-/dom-utils-2.1.0.tgz", + "integrity": "sha512-ZmF2qRa1QZ0CMLU8M1zCfmw29DmPNtfjR9iTo74U5FPr3i1aoAh7fbJ4qAlZ197Xw9eAW28tvzQuoVWeL5C7fQ==", + "license": "MIT" + }, + "node_modules/@chakra-ui/editable": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/editable/-/editable-3.1.0.tgz", + "integrity": "sha512-j2JLrUL9wgg4YA6jLlbU88370eCRyor7DZQD9lzpY95tSOXpTljeg3uF9eOmDnCs6fxp3zDWIfkgMm/ExhcGTg==", + "license": "MIT", + "dependencies": { + "@chakra-ui/react-context": "2.1.0", + "@chakra-ui/react-types": "2.0.7", + "@chakra-ui/react-use-callback-ref": "2.1.0", + "@chakra-ui/react-use-controllable-state": "2.1.0", + "@chakra-ui/react-use-focus-on-pointer-down": "2.1.0", + "@chakra-ui/react-use-merge-refs": "2.1.0", + "@chakra-ui/react-use-safe-layout-effect": "2.1.0", + "@chakra-ui/react-use-update-effect": "2.1.0", + "@chakra-ui/shared-utils": "2.0.5" + }, + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "react": ">=18" + } + }, + "node_modules/@chakra-ui/event-utils": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@chakra-ui/event-utils/-/event-utils-2.0.8.tgz", + "integrity": "sha512-IGM/yGUHS+8TOQrZGpAKOJl/xGBrmRYJrmbHfUE7zrG3PpQyXvbLDP1M+RggkCFVgHlJi2wpYIf0QtQlU0XZfw==", + "license": "MIT" + }, + "node_modules/@chakra-ui/focus-lock": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/focus-lock/-/focus-lock-2.1.0.tgz", + "integrity": "sha512-EmGx4PhWGjm4dpjRqM4Aa+rCWBxP+Rq8Uc/nAVnD4YVqkEhBkrPTpui2lnjsuxqNaZ24fIAZ10cF1hlpemte/w==", + "license": "MIT", + "dependencies": { + "@chakra-ui/dom-utils": "2.1.0", + "react-focus-lock": "^2.9.4" + }, + "peerDependencies": { + "react": ">=18" + } + }, + "node_modules/@chakra-ui/form-control": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/form-control/-/form-control-2.2.0.tgz", + "integrity": "sha512-wehLC1t4fafCVJ2RvJQT2jyqsAwX7KymmiGqBu7nQoQz8ApTkGABWpo/QwDh3F/dBLrouHDoOvGmYTqft3Mirw==", + "license": "MIT", + "dependencies": { + "@chakra-ui/icon": "3.2.0", + "@chakra-ui/react-context": "2.1.0", + "@chakra-ui/react-types": "2.0.7", + "@chakra-ui/react-use-merge-refs": "2.1.0", + "@chakra-ui/shared-utils": "2.0.5" + }, + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "react": ">=18" + } + }, + "node_modules/@chakra-ui/hooks": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@chakra-ui/hooks/-/hooks-2.2.1.tgz", + "integrity": "sha512-RQbTnzl6b1tBjbDPf9zGRo9rf/pQMholsOudTxjy4i9GfTfz6kgp5ValGjQm2z7ng6Z31N1cnjZ1AlSzQ//ZfQ==", + "license": "MIT", + "dependencies": { + "@chakra-ui/react-utils": "2.0.12", + "@chakra-ui/utils": "2.0.15", + "compute-scroll-into-view": "3.0.3", + "copy-to-clipboard": "3.3.3" + }, + "peerDependencies": { + "react": ">=18" + } + }, + "node_modules/@chakra-ui/icon": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/icon/-/icon-3.2.0.tgz", + "integrity": "sha512-xxjGLvlX2Ys4H0iHrI16t74rG9EBcpFvJ3Y3B7KMQTrnW34Kf7Da/UC8J67Gtx85mTHW020ml85SVPKORWNNKQ==", + "license": "MIT", + "dependencies": { + "@chakra-ui/shared-utils": "2.0.5" + }, + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "react": ">=18" + } + }, + "node_modules/@chakra-ui/icons": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/@chakra-ui/icons/-/icons-2.2.4.tgz", + "integrity": "sha512-l5QdBgwrAg3Sc2BRqtNkJpfuLw/pWRDwwT58J6c4PqQT6wzXxyNa8Q0PForu1ltB5qEiFb1kxr/F/HO1EwNa6g==", + "license": "MIT", + "peerDependencies": { + "@chakra-ui/react": ">=2.0.0", + "react": ">=18" + } + }, + "node_modules/@chakra-ui/image": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/image/-/image-2.1.0.tgz", + "integrity": "sha512-bskumBYKLiLMySIWDGcz0+D9Th0jPvmX6xnRMs4o92tT3Od/bW26lahmV2a2Op2ItXeCmRMY+XxJH5Gy1i46VA==", + "license": "MIT", + "dependencies": { + "@chakra-ui/react-use-safe-layout-effect": "2.1.0", + "@chakra-ui/shared-utils": "2.0.5" + }, + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "react": ">=18" + } + }, + "node_modules/@chakra-ui/input": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@chakra-ui/input/-/input-2.1.2.tgz", + "integrity": "sha512-GiBbb3EqAA8Ph43yGa6Mc+kUPjh4Spmxp1Pkelr8qtudpc3p2PJOOebLpd90mcqw8UePPa+l6YhhPtp6o0irhw==", + "license": "MIT", + "dependencies": { + "@chakra-ui/form-control": "2.2.0", + "@chakra-ui/object-utils": "2.1.0", + "@chakra-ui/react-children-utils": "2.0.6", + "@chakra-ui/react-context": "2.1.0", + "@chakra-ui/shared-utils": "2.0.5" + }, + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "react": ">=18" + } + }, + "node_modules/@chakra-ui/layout": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@chakra-ui/layout/-/layout-2.3.1.tgz", + "integrity": "sha512-nXuZ6WRbq0WdgnRgLw+QuxWAHuhDtVX8ElWqcTK+cSMFg/52eVP47czYBE5F35YhnoW2XBwfNoNgZ7+e8Z01Rg==", + "license": "MIT", + "dependencies": { + "@chakra-ui/breakpoint-utils": "2.0.8", + "@chakra-ui/icon": "3.2.0", + "@chakra-ui/object-utils": "2.1.0", + "@chakra-ui/react-children-utils": "2.0.6", + "@chakra-ui/react-context": "2.1.0", + "@chakra-ui/shared-utils": "2.0.5" + }, + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "react": ">=18" + } + }, + "node_modules/@chakra-ui/lazy-utils": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@chakra-ui/lazy-utils/-/lazy-utils-2.0.5.tgz", + "integrity": "sha512-UULqw7FBvcckQk2n3iPO56TMJvDsNv0FKZI6PlUNJVaGsPbsYxK/8IQ60vZgaTVPtVcjY6BE+y6zg8u9HOqpyg==", + "license": "MIT" + }, + "node_modules/@chakra-ui/live-region": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/live-region/-/live-region-2.1.0.tgz", + "integrity": "sha512-ZOxFXwtaLIsXjqnszYYrVuswBhnIHHP+XIgK1vC6DePKtyK590Wg+0J0slDwThUAd4MSSIUa/nNX84x1GMphWw==", + "license": "MIT", + "peerDependencies": { + "react": ">=18" + } + }, + "node_modules/@chakra-ui/media-query": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/media-query/-/media-query-3.3.0.tgz", + "integrity": "sha512-IsTGgFLoICVoPRp9ykOgqmdMotJG0CnPsKvGQeSFOB/dZfIujdVb14TYxDU4+MURXry1MhJ7LzZhv+Ml7cr8/g==", + "license": "MIT", + "dependencies": { + "@chakra-ui/breakpoint-utils": "2.0.8", + "@chakra-ui/react-env": "3.1.0", + "@chakra-ui/shared-utils": "2.0.5" + }, + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "react": ">=18" + } + }, + "node_modules/@chakra-ui/menu": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@chakra-ui/menu/-/menu-2.2.1.tgz", + "integrity": "sha512-lJS7XEObzJxsOwWQh7yfG4H8FzFPRP5hVPN/CL+JzytEINCSBvsCDHrYPQGp7jzpCi8vnTqQQGQe0f8dwnXd2g==", + "license": "MIT", + "dependencies": { + "@chakra-ui/clickable": "2.1.0", + "@chakra-ui/descendant": "3.1.0", + "@chakra-ui/lazy-utils": "2.0.5", + "@chakra-ui/popper": "3.1.0", + "@chakra-ui/react-children-utils": "2.0.6", + "@chakra-ui/react-context": "2.1.0", + "@chakra-ui/react-use-animation-state": "2.1.0", + "@chakra-ui/react-use-controllable-state": "2.1.0", + "@chakra-ui/react-use-disclosure": "2.1.0", + "@chakra-ui/react-use-focus-effect": "2.1.0", + "@chakra-ui/react-use-merge-refs": "2.1.0", + "@chakra-ui/react-use-outside-click": "2.2.0", + "@chakra-ui/react-use-update-effect": "2.1.0", + "@chakra-ui/shared-utils": "2.0.5", + "@chakra-ui/transition": "2.1.0" + }, + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "framer-motion": ">=4.0.0", + "react": ">=18" + } + }, + "node_modules/@chakra-ui/modal": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@chakra-ui/modal/-/modal-2.3.1.tgz", + "integrity": "sha512-TQv1ZaiJMZN+rR9DK0snx/OPwmtaGH1HbZtlYt4W4s6CzyK541fxLRTjIXfEzIGpvNW+b6VFuFjbcR78p4DEoQ==", + "license": "MIT", + "dependencies": { + "@chakra-ui/close-button": "2.1.1", + "@chakra-ui/focus-lock": "2.1.0", + "@chakra-ui/portal": "2.1.0", + "@chakra-ui/react-context": "2.1.0", + "@chakra-ui/react-types": "2.0.7", + "@chakra-ui/react-use-merge-refs": "2.1.0", + "@chakra-ui/shared-utils": "2.0.5", + "@chakra-ui/transition": "2.1.0", + "aria-hidden": "^1.2.3", + "react-remove-scroll": "^2.5.6" + }, + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "framer-motion": ">=4.0.0", + "react": ">=18", + "react-dom": ">=18" + } + }, + "node_modules/@chakra-ui/number-input": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@chakra-ui/number-input/-/number-input-2.1.2.tgz", + "integrity": "sha512-pfOdX02sqUN0qC2ysuvgVDiws7xZ20XDIlcNhva55Jgm095xjm8eVdIBfNm3SFbSUNxyXvLTW/YQanX74tKmuA==", + "license": "MIT", + "dependencies": { + "@chakra-ui/counter": "2.1.0", + "@chakra-ui/form-control": "2.2.0", + "@chakra-ui/icon": "3.2.0", + "@chakra-ui/react-context": "2.1.0", + "@chakra-ui/react-types": "2.0.7", + "@chakra-ui/react-use-callback-ref": "2.1.0", + "@chakra-ui/react-use-event-listener": "2.1.0", + "@chakra-ui/react-use-interval": "2.1.0", + "@chakra-ui/react-use-merge-refs": "2.1.0", + "@chakra-ui/react-use-safe-layout-effect": "2.1.0", + "@chakra-ui/react-use-update-effect": "2.1.0", + "@chakra-ui/shared-utils": "2.0.5" + }, + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "react": ">=18" + } + }, + "node_modules/@chakra-ui/number-utils": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@chakra-ui/number-utils/-/number-utils-2.0.7.tgz", + "integrity": "sha512-yOGxBjXNvLTBvQyhMDqGU0Oj26s91mbAlqKHiuw737AXHt0aPllOthVUqQMeaYLwLCjGMg0jtI7JReRzyi94Dg==", + "license": "MIT" + }, + "node_modules/@chakra-ui/object-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/object-utils/-/object-utils-2.1.0.tgz", + "integrity": "sha512-tgIZOgLHaoti5PYGPTwK3t/cqtcycW0owaiOXoZOcpwwX/vlVb+H1jFsQyWiiwQVPt9RkoSLtxzXamx+aHH+bQ==", + "license": "MIT" + }, + "node_modules/@chakra-ui/pin-input": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/pin-input/-/pin-input-2.1.0.tgz", + "integrity": "sha512-x4vBqLStDxJFMt+jdAHHS8jbh294O53CPQJoL4g228P513rHylV/uPscYUHrVJXRxsHfRztQO9k45jjTYaPRMw==", + "license": "MIT", + "dependencies": { + "@chakra-ui/descendant": "3.1.0", + "@chakra-ui/react-children-utils": "2.0.6", + "@chakra-ui/react-context": "2.1.0", + "@chakra-ui/react-use-controllable-state": "2.1.0", + "@chakra-ui/react-use-merge-refs": "2.1.0", + "@chakra-ui/shared-utils": "2.0.5" + }, + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "react": ">=18" + } + }, + "node_modules/@chakra-ui/popover": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@chakra-ui/popover/-/popover-2.2.1.tgz", + "integrity": "sha512-K+2ai2dD0ljvJnlrzesCDT9mNzLifE3noGKZ3QwLqd/K34Ym1W/0aL1ERSynrcG78NKoXS54SdEzkhCZ4Gn/Zg==", + "license": "MIT", + "dependencies": { + "@chakra-ui/close-button": "2.1.1", + "@chakra-ui/lazy-utils": "2.0.5", + "@chakra-ui/popper": "3.1.0", + "@chakra-ui/react-context": "2.1.0", + "@chakra-ui/react-types": "2.0.7", + "@chakra-ui/react-use-animation-state": "2.1.0", + "@chakra-ui/react-use-disclosure": "2.1.0", + "@chakra-ui/react-use-focus-effect": "2.1.0", + "@chakra-ui/react-use-focus-on-pointer-down": "2.1.0", + "@chakra-ui/react-use-merge-refs": "2.1.0", + "@chakra-ui/shared-utils": "2.0.5" + }, + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "framer-motion": ">=4.0.0", + "react": ">=18" + } + }, + "node_modules/@chakra-ui/popper": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/popper/-/popper-3.1.0.tgz", + "integrity": "sha512-ciDdpdYbeFG7og6/6J8lkTFxsSvwTdMLFkpVylAF6VNC22jssiWfquj2eyD4rJnzkRFPvIWJq8hvbfhsm+AjSg==", + "license": "MIT", + "dependencies": { + "@chakra-ui/react-types": "2.0.7", + "@chakra-ui/react-use-merge-refs": "2.1.0", + "@popperjs/core": "^2.9.3" + }, + "peerDependencies": { + "react": ">=18" + } + }, + "node_modules/@chakra-ui/portal": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/portal/-/portal-2.1.0.tgz", + "integrity": "sha512-9q9KWf6SArEcIq1gGofNcFPSWEyl+MfJjEUg/un1SMlQjaROOh3zYr+6JAwvcORiX7tyHosnmWC3d3wI2aPSQg==", + "license": "MIT", + "dependencies": { + "@chakra-ui/react-context": "2.1.0", + "@chakra-ui/react-use-safe-layout-effect": "2.1.0" + }, + "peerDependencies": { + "react": ">=18", + "react-dom": ">=18" + } + }, + "node_modules/@chakra-ui/progress": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/progress/-/progress-2.2.0.tgz", + "integrity": "sha512-qUXuKbuhN60EzDD9mHR7B67D7p/ZqNS2Aze4Pbl1qGGZfulPW0PY8Rof32qDtttDQBkzQIzFGE8d9QpAemToIQ==", + "license": "MIT", + "dependencies": { + "@chakra-ui/react-context": "2.1.0" + }, + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "react": ">=18" + } + }, + "node_modules/@chakra-ui/provider": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@chakra-ui/provider/-/provider-2.4.2.tgz", + "integrity": "sha512-w0Tef5ZCJK1mlJorcSjItCSbyvVuqpvyWdxZiVQmE6fvSJR83wZof42ux0+sfWD+I7rHSfj+f9nzhNaEWClysw==", + "license": "MIT", + "dependencies": { + "@chakra-ui/css-reset": "2.3.0", + "@chakra-ui/portal": "2.1.0", + "@chakra-ui/react-env": "3.1.0", + "@chakra-ui/system": "2.6.2", + "@chakra-ui/utils": "2.0.15" + }, + "peerDependencies": { + "@emotion/react": "^11.0.0", + "@emotion/styled": "^11.0.0", + "react": ">=18", + "react-dom": ">=18" + } + }, + "node_modules/@chakra-ui/radio": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@chakra-ui/radio/-/radio-2.1.2.tgz", + "integrity": "sha512-n10M46wJrMGbonaghvSRnZ9ToTv/q76Szz284gv4QUWvyljQACcGrXIONUnQ3BIwbOfkRqSk7Xl/JgZtVfll+w==", + "license": "MIT", + "dependencies": { + "@chakra-ui/form-control": "2.2.0", + "@chakra-ui/react-context": "2.1.0", + "@chakra-ui/react-types": "2.0.7", + "@chakra-ui/react-use-merge-refs": "2.1.0", + "@chakra-ui/shared-utils": "2.0.5", + "@zag-js/focus-visible": "0.16.0" + }, + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "react": ">=18" + } + }, + "node_modules/@chakra-ui/react": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/@chakra-ui/react/-/react-2.8.2.tgz", + "integrity": "sha512-Hn0moyxxyCDKuR9ywYpqgX8dvjqwu9ArwpIb9wHNYjnODETjLwazgNIliCVBRcJvysGRiV51U2/JtJVrpeCjUQ==", + "license": "MIT", + "dependencies": { + "@chakra-ui/accordion": "2.3.1", + "@chakra-ui/alert": "2.2.2", + "@chakra-ui/avatar": "2.3.0", + "@chakra-ui/breadcrumb": "2.2.0", + "@chakra-ui/button": "2.1.0", + "@chakra-ui/card": "2.2.0", + "@chakra-ui/checkbox": "2.3.2", + "@chakra-ui/close-button": "2.1.1", + "@chakra-ui/control-box": "2.1.0", + "@chakra-ui/counter": "2.1.0", + "@chakra-ui/css-reset": "2.3.0", + "@chakra-ui/editable": "3.1.0", + "@chakra-ui/focus-lock": "2.1.0", + "@chakra-ui/form-control": "2.2.0", + "@chakra-ui/hooks": "2.2.1", + "@chakra-ui/icon": "3.2.0", + "@chakra-ui/image": "2.1.0", + "@chakra-ui/input": "2.1.2", + "@chakra-ui/layout": "2.3.1", + "@chakra-ui/live-region": "2.1.0", + "@chakra-ui/media-query": "3.3.0", + "@chakra-ui/menu": "2.2.1", + "@chakra-ui/modal": "2.3.1", + "@chakra-ui/number-input": "2.1.2", + "@chakra-ui/pin-input": "2.1.0", + "@chakra-ui/popover": "2.2.1", + "@chakra-ui/popper": "3.1.0", + "@chakra-ui/portal": "2.1.0", + "@chakra-ui/progress": "2.2.0", + "@chakra-ui/provider": "2.4.2", + "@chakra-ui/radio": "2.1.2", + "@chakra-ui/react-env": "3.1.0", + "@chakra-ui/select": "2.1.2", + "@chakra-ui/skeleton": "2.1.0", + "@chakra-ui/skip-nav": "2.1.0", + "@chakra-ui/slider": "2.1.0", + "@chakra-ui/spinner": "2.1.0", + "@chakra-ui/stat": "2.1.1", + "@chakra-ui/stepper": "2.3.1", + "@chakra-ui/styled-system": "2.9.2", + "@chakra-ui/switch": "2.1.2", + "@chakra-ui/system": "2.6.2", + "@chakra-ui/table": "2.1.0", + "@chakra-ui/tabs": "3.0.0", + "@chakra-ui/tag": "3.1.1", + "@chakra-ui/textarea": "2.1.2", + "@chakra-ui/theme": "3.3.1", + "@chakra-ui/theme-utils": "2.0.21", + "@chakra-ui/toast": "7.0.2", + "@chakra-ui/tooltip": "2.3.1", + "@chakra-ui/transition": "2.1.0", + "@chakra-ui/utils": "2.0.15", + "@chakra-ui/visually-hidden": "2.2.0" + }, + "peerDependencies": { + "@emotion/react": "^11.0.0", + "@emotion/styled": "^11.0.0", + "framer-motion": ">=4.0.0", + "react": ">=18", + "react-dom": ">=18" + } + }, + "node_modules/@chakra-ui/react-children-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@chakra-ui/react-children-utils/-/react-children-utils-2.0.6.tgz", + "integrity": "sha512-QVR2RC7QsOsbWwEnq9YduhpqSFnZGvjjGREV8ygKi8ADhXh93C8azLECCUVgRJF2Wc+So1fgxmjLcbZfY2VmBA==", + "license": "MIT", + "peerDependencies": { + "react": ">=18" + } + }, + "node_modules/@chakra-ui/react-context": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/react-context/-/react-context-2.1.0.tgz", + "integrity": "sha512-iahyStvzQ4AOwKwdPReLGfDesGG+vWJfEsn0X/NoGph/SkN+HXtv2sCfYFFR9k7bb+Kvc6YfpLlSuLvKMHi2+w==", + "license": "MIT", + "peerDependencies": { + "react": ">=18" + } + }, + "node_modules/@chakra-ui/react-env": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/react-env/-/react-env-3.1.0.tgz", + "integrity": "sha512-Vr96GV2LNBth3+IKzr/rq1IcnkXv+MLmwjQH6C8BRtn3sNskgDFD5vLkVXcEhagzZMCh8FR3V/bzZPojBOyNhw==", + "license": "MIT", + "dependencies": { + "@chakra-ui/react-use-safe-layout-effect": "2.1.0" + }, + "peerDependencies": { + "react": ">=18" + } + }, + "node_modules/@chakra-ui/react-types": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@chakra-ui/react-types/-/react-types-2.0.7.tgz", + "integrity": "sha512-12zv2qIZ8EHwiytggtGvo4iLT0APris7T0qaAWqzpUGS0cdUtR8W+V1BJ5Ocq+7tA6dzQ/7+w5hmXih61TuhWQ==", + "license": "MIT", + "peerDependencies": { + "react": ">=18" + } + }, + "node_modules/@chakra-ui/react-use-animation-state": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/react-use-animation-state/-/react-use-animation-state-2.1.0.tgz", + "integrity": "sha512-CFZkQU3gmDBwhqy0vC1ryf90BVHxVN8cTLpSyCpdmExUEtSEInSCGMydj2fvn7QXsz/za8JNdO2xxgJwxpLMtg==", + "license": "MIT", + "dependencies": { + "@chakra-ui/dom-utils": "2.1.0", + "@chakra-ui/react-use-event-listener": "2.1.0" + }, + "peerDependencies": { + "react": ">=18" + } + }, + "node_modules/@chakra-ui/react-use-callback-ref": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/react-use-callback-ref/-/react-use-callback-ref-2.1.0.tgz", + "integrity": "sha512-efnJrBtGDa4YaxDzDE90EnKD3Vkh5a1t3w7PhnRQmsphLy3g2UieasoKTlT2Hn118TwDjIv5ZjHJW6HbzXA9wQ==", + "license": "MIT", + "peerDependencies": { + "react": ">=18" + } + }, + "node_modules/@chakra-ui/react-use-controllable-state": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/react-use-controllable-state/-/react-use-controllable-state-2.1.0.tgz", + "integrity": "sha512-QR/8fKNokxZUs4PfxjXuwl0fj/d71WPrmLJvEpCTkHjnzu7LnYvzoe2wB867IdooQJL0G1zBxl0Dq+6W1P3jpg==", + "license": "MIT", + "dependencies": { + "@chakra-ui/react-use-callback-ref": "2.1.0" + }, + "peerDependencies": { + "react": ">=18" + } + }, + "node_modules/@chakra-ui/react-use-disclosure": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/react-use-disclosure/-/react-use-disclosure-2.1.0.tgz", + "integrity": "sha512-Ax4pmxA9LBGMyEZJhhUZobg9C0t3qFE4jVF1tGBsrLDcdBeLR9fwOogIPY9Hf0/wqSlAryAimICbr5hkpa5GSw==", + "license": "MIT", + "dependencies": { + "@chakra-ui/react-use-callback-ref": "2.1.0" + }, + "peerDependencies": { + "react": ">=18" + } + }, + "node_modules/@chakra-ui/react-use-event-listener": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/react-use-event-listener/-/react-use-event-listener-2.1.0.tgz", + "integrity": "sha512-U5greryDLS8ISP69DKDsYcsXRtAdnTQT+jjIlRYZ49K/XhUR/AqVZCK5BkR1spTDmO9H8SPhgeNKI70ODuDU/Q==", + "license": "MIT", + "dependencies": { + "@chakra-ui/react-use-callback-ref": "2.1.0" + }, + "peerDependencies": { + "react": ">=18" + } + }, + "node_modules/@chakra-ui/react-use-focus-effect": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/react-use-focus-effect/-/react-use-focus-effect-2.1.0.tgz", + "integrity": "sha512-xzVboNy7J64xveLcxTIJ3jv+lUJKDwRM7Szwn9tNzUIPD94O3qwjV7DDCUzN2490nSYDF4OBMt/wuDBtaR3kUQ==", + "license": "MIT", + "dependencies": { + "@chakra-ui/dom-utils": "2.1.0", + "@chakra-ui/react-use-event-listener": "2.1.0", + "@chakra-ui/react-use-safe-layout-effect": "2.1.0", + "@chakra-ui/react-use-update-effect": "2.1.0" + }, + "peerDependencies": { + "react": ">=18" + } + }, + "node_modules/@chakra-ui/react-use-focus-on-pointer-down": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/react-use-focus-on-pointer-down/-/react-use-focus-on-pointer-down-2.1.0.tgz", + "integrity": "sha512-2jzrUZ+aiCG/cfanrolsnSMDykCAbv9EK/4iUyZno6BYb3vziucmvgKuoXbMPAzWNtwUwtuMhkby8rc61Ue+Lg==", + "license": "MIT", + "dependencies": { + "@chakra-ui/react-use-event-listener": "2.1.0" + }, + "peerDependencies": { + "react": ">=18" + } + }, + "node_modules/@chakra-ui/react-use-interval": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/react-use-interval/-/react-use-interval-2.1.0.tgz", + "integrity": "sha512-8iWj+I/+A0J08pgEXP1J1flcvhLBHkk0ln7ZvGIyXiEyM6XagOTJpwNhiu+Bmk59t3HoV/VyvyJTa+44sEApuw==", + "license": "MIT", + "dependencies": { + "@chakra-ui/react-use-callback-ref": "2.1.0" + }, + "peerDependencies": { + "react": ">=18" + } + }, + "node_modules/@chakra-ui/react-use-latest-ref": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/react-use-latest-ref/-/react-use-latest-ref-2.1.0.tgz", + "integrity": "sha512-m0kxuIYqoYB0va9Z2aW4xP/5b7BzlDeWwyXCH6QpT2PpW3/281L3hLCm1G0eOUcdVlayqrQqOeD6Mglq+5/xoQ==", + "license": "MIT", + "peerDependencies": { + "react": ">=18" + } + }, + "node_modules/@chakra-ui/react-use-merge-refs": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/react-use-merge-refs/-/react-use-merge-refs-2.1.0.tgz", + "integrity": "sha512-lERa6AWF1cjEtWSGjxWTaSMvneccnAVH4V4ozh8SYiN9fSPZLlSG3kNxfNzdFvMEhM7dnP60vynF7WjGdTgQbQ==", + "license": "MIT", + "peerDependencies": { + "react": ">=18" + } + }, + "node_modules/@chakra-ui/react-use-outside-click": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/react-use-outside-click/-/react-use-outside-click-2.2.0.tgz", + "integrity": "sha512-PNX+s/JEaMneijbgAM4iFL+f3m1ga9+6QK0E5Yh4s8KZJQ/bLwZzdhMz8J/+mL+XEXQ5J0N8ivZN28B82N1kNw==", + "license": "MIT", + "dependencies": { + "@chakra-ui/react-use-callback-ref": "2.1.0" + }, + "peerDependencies": { + "react": ">=18" + } + }, + "node_modules/@chakra-ui/react-use-pan-event": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/react-use-pan-event/-/react-use-pan-event-2.1.0.tgz", + "integrity": "sha512-xmL2qOHiXqfcj0q7ZK5s9UjTh4Gz0/gL9jcWPA6GVf+A0Od5imEDa/Vz+533yQKWiNSm1QGrIj0eJAokc7O4fg==", + "license": "MIT", + "dependencies": { + "@chakra-ui/event-utils": "2.0.8", + "@chakra-ui/react-use-latest-ref": "2.1.0", + "framesync": "6.1.2" + }, + "peerDependencies": { + "react": ">=18" + } + }, + "node_modules/@chakra-ui/react-use-previous": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/react-use-previous/-/react-use-previous-2.1.0.tgz", + "integrity": "sha512-pjxGwue1hX8AFcmjZ2XfrQtIJgqbTF3Qs1Dy3d1krC77dEsiCUbQ9GzOBfDc8pfd60DrB5N2tg5JyHbypqh0Sg==", + "license": "MIT", + "peerDependencies": { + "react": ">=18" + } + }, + "node_modules/@chakra-ui/react-use-safe-layout-effect": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/react-use-safe-layout-effect/-/react-use-safe-layout-effect-2.1.0.tgz", + "integrity": "sha512-Knbrrx/bcPwVS1TorFdzrK/zWA8yuU/eaXDkNj24IrKoRlQrSBFarcgAEzlCHtzuhufP3OULPkELTzz91b0tCw==", + "license": "MIT", + "peerDependencies": { + "react": ">=18" + } + }, + "node_modules/@chakra-ui/react-use-size": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/react-use-size/-/react-use-size-2.1.0.tgz", + "integrity": "sha512-tbLqrQhbnqOjzTaMlYytp7wY8BW1JpL78iG7Ru1DlV4EWGiAmXFGvtnEt9HftU0NJ0aJyjgymkxfVGI55/1Z4A==", + "license": "MIT", + "dependencies": { + "@zag-js/element-size": "0.10.5" + }, + "peerDependencies": { + "react": ">=18" + } + }, + "node_modules/@chakra-ui/react-use-timeout": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/react-use-timeout/-/react-use-timeout-2.1.0.tgz", + "integrity": "sha512-cFN0sobKMM9hXUhyCofx3/Mjlzah6ADaEl/AXl5Y+GawB5rgedgAcu2ErAgarEkwvsKdP6c68CKjQ9dmTQlJxQ==", + "license": "MIT", + "dependencies": { + "@chakra-ui/react-use-callback-ref": "2.1.0" + }, + "peerDependencies": { + "react": ">=18" + } + }, + "node_modules/@chakra-ui/react-use-update-effect": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/react-use-update-effect/-/react-use-update-effect-2.1.0.tgz", + "integrity": "sha512-ND4Q23tETaR2Qd3zwCKYOOS1dfssojPLJMLvUtUbW5M9uW1ejYWgGUobeAiOVfSplownG8QYMmHTP86p/v0lbA==", + "license": "MIT", + "peerDependencies": { + "react": ">=18" + } + }, + "node_modules/@chakra-ui/react-utils": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/@chakra-ui/react-utils/-/react-utils-2.0.12.tgz", + "integrity": "sha512-GbSfVb283+YA3kA8w8xWmzbjNWk14uhNpntnipHCftBibl0lxtQ9YqMFQLwuFOO0U2gYVocszqqDWX+XNKq9hw==", + "license": "MIT", + "dependencies": { + "@chakra-ui/utils": "2.0.15" + }, + "peerDependencies": { + "react": ">=18" + } + }, + "node_modules/@chakra-ui/react/node_modules/@chakra-ui/styled-system": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/@chakra-ui/styled-system/-/styled-system-2.9.2.tgz", + "integrity": "sha512-To/Z92oHpIE+4nk11uVMWqo2GGRS86coeMmjxtpnErmWRdLcp1WVCVRAvn+ZwpLiNR+reWFr2FFqJRsREuZdAg==", + "license": "MIT", + "dependencies": { + "@chakra-ui/shared-utils": "2.0.5", + "csstype": "^3.1.2", + "lodash.mergewith": "4.6.2" + } + }, + "node_modules/@chakra-ui/select": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@chakra-ui/select/-/select-2.1.2.tgz", + "integrity": "sha512-ZwCb7LqKCVLJhru3DXvKXpZ7Pbu1TDZ7N0PdQ0Zj1oyVLJyrpef1u9HR5u0amOpqcH++Ugt0f5JSmirjNlctjA==", + "license": "MIT", + "dependencies": { + "@chakra-ui/form-control": "2.2.0", + "@chakra-ui/shared-utils": "2.0.5" + }, + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "react": ">=18" + } + }, + "node_modules/@chakra-ui/shared-utils": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@chakra-ui/shared-utils/-/shared-utils-2.0.5.tgz", + "integrity": "sha512-4/Wur0FqDov7Y0nCXl7HbHzCg4aq86h+SXdoUeuCMD3dSj7dpsVnStLYhng1vxvlbUnLpdF4oz5Myt3i/a7N3Q==", + "license": "MIT" + }, + "node_modules/@chakra-ui/skeleton": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/skeleton/-/skeleton-2.1.0.tgz", + "integrity": "sha512-JNRuMPpdZGd6zFVKjVQ0iusu3tXAdI29n4ZENYwAJEMf/fN0l12sVeirOxkJ7oEL0yOx2AgEYFSKdbcAgfUsAQ==", + "license": "MIT", + "dependencies": { + "@chakra-ui/media-query": "3.3.0", + "@chakra-ui/react-use-previous": "2.1.0", + "@chakra-ui/shared-utils": "2.0.5" + }, + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "react": ">=18" + } + }, + "node_modules/@chakra-ui/skip-nav": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/skip-nav/-/skip-nav-2.1.0.tgz", + "integrity": "sha512-Hk+FG+vadBSH0/7hwp9LJnLjkO0RPGnx7gBJWI4/SpoJf3e4tZlWYtwGj0toYY4aGKl93jVghuwGbDBEMoHDug==", + "license": "MIT", + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "react": ">=18" + } + }, + "node_modules/@chakra-ui/slider": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/slider/-/slider-2.1.0.tgz", + "integrity": "sha512-lUOBcLMCnFZiA/s2NONXhELJh6sY5WtbRykPtclGfynqqOo47lwWJx+VP7xaeuhDOPcWSSecWc9Y1BfPOCz9cQ==", + "license": "MIT", + "dependencies": { + "@chakra-ui/number-utils": "2.0.7", + "@chakra-ui/react-context": "2.1.0", + "@chakra-ui/react-types": "2.0.7", + "@chakra-ui/react-use-callback-ref": "2.1.0", + "@chakra-ui/react-use-controllable-state": "2.1.0", + "@chakra-ui/react-use-latest-ref": "2.1.0", + "@chakra-ui/react-use-merge-refs": "2.1.0", + "@chakra-ui/react-use-pan-event": "2.1.0", + "@chakra-ui/react-use-size": "2.1.0", + "@chakra-ui/react-use-update-effect": "2.1.0" + }, + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "react": ">=18" + } + }, + "node_modules/@chakra-ui/spinner": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/spinner/-/spinner-2.1.0.tgz", + "integrity": "sha512-hczbnoXt+MMv/d3gE+hjQhmkzLiKuoTo42YhUG7Bs9OSv2lg1fZHW1fGNRFP3wTi6OIbD044U1P9HK+AOgFH3g==", + "license": "MIT", + "dependencies": { + "@chakra-ui/shared-utils": "2.0.5" + }, + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "react": ">=18" + } + }, + "node_modules/@chakra-ui/stat": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@chakra-ui/stat/-/stat-2.1.1.tgz", + "integrity": "sha512-LDn0d/LXQNbAn2KaR3F1zivsZCewY4Jsy1qShmfBMKwn6rI8yVlbvu6SiA3OpHS0FhxbsZxQI6HefEoIgtqY6Q==", + "license": "MIT", + "dependencies": { + "@chakra-ui/icon": "3.2.0", + "@chakra-ui/react-context": "2.1.0", + "@chakra-ui/shared-utils": "2.0.5" + }, + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "react": ">=18" + } + }, + "node_modules/@chakra-ui/stepper": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@chakra-ui/stepper/-/stepper-2.3.1.tgz", + "integrity": "sha512-ky77lZbW60zYkSXhYz7kbItUpAQfEdycT0Q4bkHLxfqbuiGMf8OmgZOQkOB9uM4v0zPwy2HXhe0vq4Dd0xa55Q==", + "license": "MIT", + "dependencies": { + "@chakra-ui/icon": "3.2.0", + "@chakra-ui/react-context": "2.1.0", + "@chakra-ui/shared-utils": "2.0.5" + }, + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "react": ">=18" + } + }, + "node_modules/@chakra-ui/styled-system": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/styled-system/-/styled-system-2.12.0.tgz", + "integrity": "sha512-zoqLw1I2y4GlZ0LDoyw8o0JjoDOW6u0IwFPAoHuw0UMbP8glHUGvwEL1STug/i/GzBKw83yoF6ae41HIQvhMww==", + "license": "MIT", + "dependencies": { + "@chakra-ui/utils": "2.2.2", + "csstype": "^3.1.2" + } + }, + "node_modules/@chakra-ui/styled-system/node_modules/@chakra-ui/utils": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@chakra-ui/utils/-/utils-2.2.2.tgz", + "integrity": "sha512-jUPLT0JzRMWxpdzH6c+t0YMJYrvc5CLericgITV3zDSXblkfx3DsYXqU11DJTSGZI9dUKzM1Wd0Wswn4eJwvFQ==", + "license": "MIT", + "dependencies": { + "@types/lodash.mergewith": "4.6.9", + "lodash.mergewith": "4.6.2" + }, + "peerDependencies": { + "react": ">=16.8.0" + } + }, + "node_modules/@chakra-ui/styled-system/node_modules/@types/lodash.mergewith": { + "version": "4.6.9", + "resolved": "https://registry.npmjs.org/@types/lodash.mergewith/-/lodash.mergewith-4.6.9.tgz", + "integrity": "sha512-fgkoCAOF47K7sxrQ7Mlud2TH023itugZs2bUg8h/KzT+BnZNrR2jAOmaokbLunHNnobXVWOezAeNn/lZqwxkcw==", + "license": "MIT", + "dependencies": { + "@types/lodash": "*" + } + }, + "node_modules/@chakra-ui/switch": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@chakra-ui/switch/-/switch-2.1.2.tgz", + "integrity": "sha512-pgmi/CC+E1v31FcnQhsSGjJnOE2OcND4cKPyTE+0F+bmGm48Q/b5UmKD9Y+CmZsrt/7V3h8KNczowupfuBfIHA==", + "license": "MIT", + "dependencies": { + "@chakra-ui/checkbox": "2.3.2", + "@chakra-ui/shared-utils": "2.0.5" + }, + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "framer-motion": ">=4.0.0", + "react": ">=18" + } + }, + "node_modules/@chakra-ui/system": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/@chakra-ui/system/-/system-2.6.2.tgz", + "integrity": "sha512-EGtpoEjLrUu4W1fHD+a62XR+hzC5YfsWm+6lO0Kybcga3yYEij9beegO0jZgug27V+Rf7vns95VPVP6mFd/DEQ==", + "license": "MIT", + "dependencies": { + "@chakra-ui/color-mode": "2.2.0", + "@chakra-ui/object-utils": "2.1.0", + "@chakra-ui/react-utils": "2.0.12", + "@chakra-ui/styled-system": "2.9.2", + "@chakra-ui/theme-utils": "2.0.21", + "@chakra-ui/utils": "2.0.15", + "react-fast-compare": "3.2.2" + }, + "peerDependencies": { + "@emotion/react": "^11.0.0", + "@emotion/styled": "^11.0.0", + "react": ">=18" + } + }, + "node_modules/@chakra-ui/system/node_modules/@chakra-ui/styled-system": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/@chakra-ui/styled-system/-/styled-system-2.9.2.tgz", + "integrity": "sha512-To/Z92oHpIE+4nk11uVMWqo2GGRS86coeMmjxtpnErmWRdLcp1WVCVRAvn+ZwpLiNR+reWFr2FFqJRsREuZdAg==", + "license": "MIT", + "dependencies": { + "@chakra-ui/shared-utils": "2.0.5", + "csstype": "^3.1.2", + "lodash.mergewith": "4.6.2" + } + }, + "node_modules/@chakra-ui/table": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/table/-/table-2.1.0.tgz", + "integrity": "sha512-o5OrjoHCh5uCLdiUb0Oc0vq9rIAeHSIRScc2ExTC9Qg/uVZl2ygLrjToCaKfaaKl1oQexIeAcZDKvPG8tVkHyQ==", + "license": "MIT", + "dependencies": { + "@chakra-ui/react-context": "2.1.0", + "@chakra-ui/shared-utils": "2.0.5" + }, + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "react": ">=18" + } + }, + "node_modules/@chakra-ui/tabs": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/tabs/-/tabs-3.0.0.tgz", + "integrity": "sha512-6Mlclp8L9lqXmsGWF5q5gmemZXOiOYuh0SGT/7PgJVNPz3LXREXlXg2an4MBUD8W5oTkduCX+3KTMCwRrVrDYw==", + "license": "MIT", + "dependencies": { + "@chakra-ui/clickable": "2.1.0", + "@chakra-ui/descendant": "3.1.0", + "@chakra-ui/lazy-utils": "2.0.5", + "@chakra-ui/react-children-utils": "2.0.6", + "@chakra-ui/react-context": "2.1.0", + "@chakra-ui/react-use-controllable-state": "2.1.0", + "@chakra-ui/react-use-merge-refs": "2.1.0", + "@chakra-ui/react-use-safe-layout-effect": "2.1.0", + "@chakra-ui/shared-utils": "2.0.5" + }, + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "react": ">=18" + } + }, + "node_modules/@chakra-ui/tag": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@chakra-ui/tag/-/tag-3.1.1.tgz", + "integrity": "sha512-Bdel79Dv86Hnge2PKOU+t8H28nm/7Y3cKd4Kfk9k3lOpUh4+nkSGe58dhRzht59lEqa4N9waCgQiBdkydjvBXQ==", + "license": "MIT", + "dependencies": { + "@chakra-ui/icon": "3.2.0", + "@chakra-ui/react-context": "2.1.0" + }, + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "react": ">=18" + } + }, + "node_modules/@chakra-ui/textarea": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@chakra-ui/textarea/-/textarea-2.1.2.tgz", + "integrity": "sha512-ip7tvklVCZUb2fOHDb23qPy/Fr2mzDOGdkrpbNi50hDCiV4hFX02jdQJdi3ydHZUyVgZVBKPOJ+lT9i7sKA2wA==", + "license": "MIT", + "dependencies": { + "@chakra-ui/form-control": "2.2.0", + "@chakra-ui/shared-utils": "2.0.5" + }, + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "react": ">=18" + } + }, + "node_modules/@chakra-ui/theme": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@chakra-ui/theme/-/theme-3.3.1.tgz", + "integrity": "sha512-Hft/VaT8GYnItGCBbgWd75ICrIrIFrR7lVOhV/dQnqtfGqsVDlrztbSErvMkoPKt0UgAkd9/o44jmZ6X4U2nZQ==", + "license": "MIT", + "dependencies": { + "@chakra-ui/anatomy": "2.2.2", + "@chakra-ui/shared-utils": "2.0.5", + "@chakra-ui/theme-tools": "2.1.2" + }, + "peerDependencies": { + "@chakra-ui/styled-system": ">=2.8.0" + } + }, + "node_modules/@chakra-ui/theme-tools": { + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/@chakra-ui/theme-tools/-/theme-tools-2.2.6.tgz", + "integrity": "sha512-3UhKPyzKbV3l/bg1iQN9PBvffYp+EBOoYMUaeTUdieQRPFzo2jbYR0lNCxqv8h5aGM/k54nCHU2M/GStyi9F2A==", + "license": "MIT", + "dependencies": { + "@chakra-ui/anatomy": "2.3.4", + "@chakra-ui/utils": "2.2.2", + "color2k": "^2.0.2" + }, + "peerDependencies": { + "@chakra-ui/styled-system": ">=2.0.0" + } + }, + "node_modules/@chakra-ui/theme-tools/node_modules/@chakra-ui/utils": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@chakra-ui/utils/-/utils-2.2.2.tgz", + "integrity": "sha512-jUPLT0JzRMWxpdzH6c+t0YMJYrvc5CLericgITV3zDSXblkfx3DsYXqU11DJTSGZI9dUKzM1Wd0Wswn4eJwvFQ==", + "license": "MIT", + "dependencies": { + "@types/lodash.mergewith": "4.6.9", + "lodash.mergewith": "4.6.2" + }, + "peerDependencies": { + "react": ">=16.8.0" + } + }, + "node_modules/@chakra-ui/theme-tools/node_modules/@types/lodash.mergewith": { + "version": "4.6.9", + "resolved": "https://registry.npmjs.org/@types/lodash.mergewith/-/lodash.mergewith-4.6.9.tgz", + "integrity": "sha512-fgkoCAOF47K7sxrQ7Mlud2TH023itugZs2bUg8h/KzT+BnZNrR2jAOmaokbLunHNnobXVWOezAeNn/lZqwxkcw==", + "license": "MIT", + "dependencies": { + "@types/lodash": "*" + } + }, + "node_modules/@chakra-ui/theme-utils": { + "version": "2.0.21", + "resolved": "https://registry.npmjs.org/@chakra-ui/theme-utils/-/theme-utils-2.0.21.tgz", + "integrity": "sha512-FjH5LJbT794r0+VSCXB3lT4aubI24bLLRWB+CuRKHijRvsOg717bRdUN/N1fEmEpFnRVrbewttWh/OQs0EWpWw==", + "license": "MIT", + "dependencies": { + "@chakra-ui/shared-utils": "2.0.5", + "@chakra-ui/styled-system": "2.9.2", + "@chakra-ui/theme": "3.3.1", + "lodash.mergewith": "4.6.2" + } + }, + "node_modules/@chakra-ui/theme-utils/node_modules/@chakra-ui/styled-system": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/@chakra-ui/styled-system/-/styled-system-2.9.2.tgz", + "integrity": "sha512-To/Z92oHpIE+4nk11uVMWqo2GGRS86coeMmjxtpnErmWRdLcp1WVCVRAvn+ZwpLiNR+reWFr2FFqJRsREuZdAg==", + "license": "MIT", + "dependencies": { + "@chakra-ui/shared-utils": "2.0.5", + "csstype": "^3.1.2", + "lodash.mergewith": "4.6.2" + } + }, + "node_modules/@chakra-ui/theme/node_modules/@chakra-ui/anatomy": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@chakra-ui/anatomy/-/anatomy-2.2.2.tgz", + "integrity": "sha512-MV6D4VLRIHr4PkW4zMyqfrNS1mPlCTiCXwvYGtDFQYr+xHFfonhAuf9WjsSc0nyp2m0OdkSLnzmVKkZFLo25Tg==", + "license": "MIT" + }, + "node_modules/@chakra-ui/theme/node_modules/@chakra-ui/theme-tools": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@chakra-ui/theme-tools/-/theme-tools-2.1.2.tgz", + "integrity": "sha512-Qdj8ajF9kxY4gLrq7gA+Azp8CtFHGO9tWMN2wfF9aQNgG9AuMhPrUzMq9AMQ0MXiYcgNq/FD3eegB43nHVmXVA==", + "license": "MIT", + "dependencies": { + "@chakra-ui/anatomy": "2.2.2", + "@chakra-ui/shared-utils": "2.0.5", + "color2k": "^2.0.2" + }, + "peerDependencies": { + "@chakra-ui/styled-system": ">=2.0.0" + } + }, + "node_modules/@chakra-ui/toast": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@chakra-ui/toast/-/toast-7.0.2.tgz", + "integrity": "sha512-yvRP8jFKRs/YnkuE41BVTq9nB2v/KDRmje9u6dgDmE5+1bFt3bwjdf9gVbif4u5Ve7F7BGk5E093ARRVtvLvXA==", + "license": "MIT", + "dependencies": { + "@chakra-ui/alert": "2.2.2", + "@chakra-ui/close-button": "2.1.1", + "@chakra-ui/portal": "2.1.0", + "@chakra-ui/react-context": "2.1.0", + "@chakra-ui/react-use-timeout": "2.1.0", + "@chakra-ui/react-use-update-effect": "2.1.0", + "@chakra-ui/shared-utils": "2.0.5", + "@chakra-ui/styled-system": "2.9.2", + "@chakra-ui/theme": "3.3.1" + }, + "peerDependencies": { + "@chakra-ui/system": "2.6.2", + "framer-motion": ">=4.0.0", + "react": ">=18", + "react-dom": ">=18" + } + }, + "node_modules/@chakra-ui/toast/node_modules/@chakra-ui/styled-system": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/@chakra-ui/styled-system/-/styled-system-2.9.2.tgz", + "integrity": "sha512-To/Z92oHpIE+4nk11uVMWqo2GGRS86coeMmjxtpnErmWRdLcp1WVCVRAvn+ZwpLiNR+reWFr2FFqJRsREuZdAg==", + "license": "MIT", + "dependencies": { + "@chakra-ui/shared-utils": "2.0.5", + "csstype": "^3.1.2", + "lodash.mergewith": "4.6.2" + } + }, + "node_modules/@chakra-ui/tooltip": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@chakra-ui/tooltip/-/tooltip-2.3.1.tgz", + "integrity": "sha512-Rh39GBn/bL4kZpuEMPPRwYNnccRCL+w9OqamWHIB3Qboxs6h8cOyXfIdGxjo72lvhu1QI/a4KFqkM3St+WfC0A==", + "license": "MIT", + "dependencies": { + "@chakra-ui/dom-utils": "2.1.0", + "@chakra-ui/popper": "3.1.0", + "@chakra-ui/portal": "2.1.0", + "@chakra-ui/react-types": "2.0.7", + "@chakra-ui/react-use-disclosure": "2.1.0", + "@chakra-ui/react-use-event-listener": "2.1.0", + "@chakra-ui/react-use-merge-refs": "2.1.0", + "@chakra-ui/shared-utils": "2.0.5" + }, + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "framer-motion": ">=4.0.0", + "react": ">=18", + "react-dom": ">=18" + } + }, + "node_modules/@chakra-ui/transition": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/transition/-/transition-2.1.0.tgz", + "integrity": "sha512-orkT6T/Dt+/+kVwJNy7zwJ+U2xAZ3EU7M3XCs45RBvUnZDr/u9vdmaM/3D/rOpmQJWgQBwKPJleUXrYWUagEDQ==", + "license": "MIT", + "dependencies": { + "@chakra-ui/shared-utils": "2.0.5" + }, + "peerDependencies": { + "framer-motion": ">=4.0.0", + "react": ">=18" + } + }, + "node_modules/@chakra-ui/utils": { + "version": "2.0.15", + "resolved": "https://registry.npmjs.org/@chakra-ui/utils/-/utils-2.0.15.tgz", + "integrity": "sha512-El4+jL0WSaYYs+rJbuYFDbjmfCcfGDmRY95GO4xwzit6YAPZBLcR65rOEwLps+XWluZTy1xdMrusg/hW0c1aAA==", + "license": "MIT", + "dependencies": { + "@types/lodash.mergewith": "4.6.7", + "css-box-model": "1.2.1", + "framesync": "6.1.2", + "lodash.mergewith": "4.6.2" + } + }, + "node_modules/@chakra-ui/visually-hidden": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/visually-hidden/-/visually-hidden-2.2.0.tgz", + "integrity": "sha512-KmKDg01SrQ7VbTD3+cPWf/UfpF5MSwm3v7MWi0n5t8HnnadT13MF0MJCDSXbBWnzLv1ZKJ6zlyAOeARWX+DpjQ==", + "license": "MIT", + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "react": ">=18" + } + }, + "node_modules/@csstools/normalize.css": { + "version": "12.1.1", + "resolved": "https://registry.npmjs.org/@csstools/normalize.css/-/normalize.css-12.1.1.tgz", + "integrity": "sha512-YAYeJ+Xqh7fUou1d1j9XHl44BmsuThiTr4iNrgCQ3J27IbhXsxXDGZ1cXv8Qvs99d4rBbLiSKy3+WZiet32PcQ==", + "license": "CC0-1.0" + }, + "node_modules/@csstools/postcss-cascade-layers": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-1.1.1.tgz", + "integrity": "sha512-+KdYrpKC5TgomQr2DlZF4lDEpHcoxnj5IGddYYfBWJAKfj1JtuHUIqMa+E1pJJ+z3kvDViWMqyqPlG4Ja7amQA==", + "license": "CC0-1.0", + "dependencies": { + "@csstools/selector-specificity": "^2.0.2", + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-color-function": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-1.1.1.tgz", + "integrity": "sha512-Bc0f62WmHdtRDjf5f3e2STwRAl89N2CLb+9iAwzrv4L2hncrbDwnQD9PCq0gtAt7pOI2leIV08HIBUd4jxD8cw==", + "license": "CC0-1.0", + "dependencies": { + "@csstools/postcss-progressive-custom-properties": "^1.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-font-format-keywords": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-font-format-keywords/-/postcss-font-format-keywords-1.0.1.tgz", + "integrity": "sha512-ZgrlzuUAjXIOc2JueK0X5sZDjCtgimVp/O5CEqTcs5ShWBa6smhWYbS0x5cVc/+rycTDbjjzoP0KTDnUneZGOg==", + "license": "CC0-1.0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-hwb-function": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@csstools/postcss-hwb-function/-/postcss-hwb-function-1.0.2.tgz", + "integrity": "sha512-YHdEru4o3Rsbjmu6vHy4UKOXZD+Rn2zmkAmLRfPet6+Jz4Ojw8cbWxe1n42VaXQhD3CQUXXTooIy8OkVbUcL+w==", + "license": "CC0-1.0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-ic-unit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-ic-unit/-/postcss-ic-unit-1.0.1.tgz", + "integrity": "sha512-Ot1rcwRAaRHNKC9tAqoqNZhjdYBzKk1POgWfhN4uCOE47ebGcLRqXjKkApVDpjifL6u2/55ekkpnFcp+s/OZUw==", + "license": "CC0-1.0", + "dependencies": { + "@csstools/postcss-progressive-custom-properties": "^1.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-is-pseudo-class": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-2.0.7.tgz", + "integrity": "sha512-7JPeVVZHd+jxYdULl87lvjgvWldYu+Bc62s9vD/ED6/QTGjy0jy0US/f6BG53sVMTBJ1lzKZFpYmofBN9eaRiA==", + "license": "CC0-1.0", + "dependencies": { + "@csstools/selector-specificity": "^2.0.0", + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-nested-calc": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-nested-calc/-/postcss-nested-calc-1.0.0.tgz", + "integrity": "sha512-JCsQsw1wjYwv1bJmgjKSoZNvf7R6+wuHDAbi5f/7MbFhl2d/+v+TvBTU4BJH3G1X1H87dHl0mh6TfYogbT/dJQ==", + "license": "CC0-1.0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-normalize-display-values": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-normalize-display-values/-/postcss-normalize-display-values-1.0.1.tgz", + "integrity": "sha512-jcOanIbv55OFKQ3sYeFD/T0Ti7AMXc9nM1hZWu8m/2722gOTxFg7xYu4RDLJLeZmPUVQlGzo4jhzvTUq3x4ZUw==", + "license": "CC0-1.0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-oklab-function": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-oklab-function/-/postcss-oklab-function-1.1.1.tgz", + "integrity": "sha512-nJpJgsdA3dA9y5pgyb/UfEzE7W5Ka7u0CX0/HIMVBNWzWemdcTH3XwANECU6anWv/ao4vVNLTMxhiPNZsTK6iA==", + "license": "CC0-1.0", + "dependencies": { + "@csstools/postcss-progressive-custom-properties": "^1.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-progressive-custom-properties": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-1.3.0.tgz", + "integrity": "sha512-ASA9W1aIy5ygskZYuWams4BzafD12ULvSypmaLJT2jvQ8G0M3I8PRQhC0h7mG0Z3LI05+agZjqSR9+K9yaQQjA==", + "license": "CC0-1.0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.3" + } + }, + "node_modules/@csstools/postcss-stepped-value-functions": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-1.0.1.tgz", + "integrity": "sha512-dz0LNoo3ijpTOQqEJLY8nyaapl6umbmDcgj4AD0lgVQ572b2eqA1iGZYTTWhrcrHztWDDRAX2DGYyw2VBjvCvQ==", + "license": "CC0-1.0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-text-decoration-shorthand": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-1.0.0.tgz", + "integrity": "sha512-c1XwKJ2eMIWrzQenN0XbcfzckOLLJiczqy+YvfGmzoVXd7pT9FfObiSEfzs84bpE/VqfpEuAZ9tCRbZkZxxbdw==", + "license": "CC0-1.0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-trigonometric-functions": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-1.0.2.tgz", + "integrity": "sha512-woKaLO///4bb+zZC2s80l+7cm07M7268MsyG3M0ActXXEFi6SuhvriQYcb58iiKGbjwwIU7n45iRLEHypB47Og==", + "license": "CC0-1.0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-unset-value": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@csstools/postcss-unset-value/-/postcss-unset-value-1.0.2.tgz", + "integrity": "sha512-c8J4roPBILnelAsdLr4XOAR/GsTm0GJi4XpcfvoWk3U6KiTCqiFYc63KhRMQQX35jYMp4Ao8Ij9+IZRgMfJp1g==", + "license": "CC0-1.0", + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/selector-specificity": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-2.2.0.tgz", + "integrity": "sha512-+OJ9konv95ClSTOJCmMZqpd5+YGsB2S+x6w3E1oaM8UuR5j8nTNHYSz8c9BEPGDOCMQYIEEGlVPj/VY64iTbGw==", + "license": "CC0-1.0", + "engines": { + "node": "^14 || ^16 || >=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss-selector-parser": "^6.0.10" + } + }, + "node_modules/@emotion/babel-plugin": { + "version": "11.13.5", + "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.13.5.tgz", + "integrity": "sha512-pxHCpT2ex+0q+HH91/zsdHkw/lXd468DIN2zvfvLtPKLLMo6gQj7oLObq8PhkrxOZb/gGCq03S3Z7PDhS8pduQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.16.7", + "@babel/runtime": "^7.18.3", + "@emotion/hash": "^0.9.2", + "@emotion/memoize": "^0.9.0", + "@emotion/serialize": "^1.3.3", + "babel-plugin-macros": "^3.1.0", + "convert-source-map": "^1.5.0", + "escape-string-regexp": "^4.0.0", + "find-root": "^1.1.0", + "source-map": "^0.5.7", + "stylis": "4.2.0" + } + }, + "node_modules/@emotion/cache": { + "version": "11.14.0", + "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.14.0.tgz", + "integrity": "sha512-L/B1lc/TViYk4DcpGxtAVbx0ZyiKM5ktoIyafGkH6zg/tj+mA+NE//aPYKG0k8kCHSHVJrpLpcAlOBEXQ3SavA==", + "license": "MIT", + "dependencies": { + "@emotion/memoize": "^0.9.0", + "@emotion/sheet": "^1.4.0", + "@emotion/utils": "^1.4.2", + "@emotion/weak-memoize": "^0.4.0", + "stylis": "4.2.0" + } + }, + "node_modules/@emotion/hash": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.2.tgz", + "integrity": "sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==", + "license": "MIT" + }, + "node_modules/@emotion/is-prop-valid": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.3.1.tgz", + "integrity": "sha512-/ACwoqx7XQi9knQs/G0qKvv5teDMhD7bXYns9N/wM8ah8iNb8jZ2uNO0YOgiq2o2poIvVtJS2YALasQuMSQ7Kw==", + "license": "MIT", + "dependencies": { + "@emotion/memoize": "^0.9.0" + } + }, + "node_modules/@emotion/memoize": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.9.0.tgz", + "integrity": "sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==", + "license": "MIT" + }, + "node_modules/@emotion/react": { + "version": "11.14.0", + "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.14.0.tgz", + "integrity": "sha512-O000MLDBDdk/EohJPFUqvnp4qnHeYkVP5B0xEG0D/L7cOKP9kefu2DXn8dj74cQfsEzUqh+sr1RzFqiL1o+PpA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@emotion/babel-plugin": "^11.13.5", + "@emotion/cache": "^11.14.0", + "@emotion/serialize": "^1.3.3", + "@emotion/use-insertion-effect-with-fallbacks": "^1.2.0", + "@emotion/utils": "^1.4.2", + "@emotion/weak-memoize": "^0.4.0", + "hoist-non-react-statics": "^3.3.1" + }, + "peerDependencies": { + "react": ">=16.8.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@emotion/serialize": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.3.3.tgz", + "integrity": "sha512-EISGqt7sSNWHGI76hC7x1CksiXPahbxEOrC5RjmFRJTqLyEK9/9hZvBbiYn70dw4wuwMKiEMCUlR6ZXTSWQqxA==", + "license": "MIT", + "dependencies": { + "@emotion/hash": "^0.9.2", + "@emotion/memoize": "^0.9.0", + "@emotion/unitless": "^0.10.0", + "@emotion/utils": "^1.4.2", + "csstype": "^3.0.2" + } + }, + "node_modules/@emotion/sheet": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.4.0.tgz", + "integrity": "sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg==", + "license": "MIT" + }, + "node_modules/@emotion/styled": { + "version": "11.14.0", + "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.14.0.tgz", + "integrity": "sha512-XxfOnXFffatap2IyCeJyNov3kiDQWoR08gPUQxvbL7fxKryGBKUZUkG6Hz48DZwVrJSVh9sJboyV1Ds4OW6SgA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@emotion/babel-plugin": "^11.13.5", + "@emotion/is-prop-valid": "^1.3.0", + "@emotion/serialize": "^1.3.3", + "@emotion/use-insertion-effect-with-fallbacks": "^1.2.0", + "@emotion/utils": "^1.4.2" + }, + "peerDependencies": { + "@emotion/react": "^11.0.0-rc.0", + "react": ">=16.8.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@emotion/unitless": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.10.0.tgz", + "integrity": "sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg==", + "license": "MIT" + }, + "node_modules/@emotion/use-insertion-effect-with-fallbacks": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.2.0.tgz", + "integrity": "sha512-yJMtVdH59sxi/aVJBpk9FQq+OR8ll5GT8oWd57UpeaKEVGab41JWaCFA7FRLoMLloOZF/c/wsPoe+bfGmRKgDg==", + "license": "MIT", + "peerDependencies": { + "react": ">=16.8.0" + } + }, + "node_modules/@emotion/utils": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.4.2.tgz", + "integrity": "sha512-3vLclRofFziIa3J2wDh9jjbkUz9qk5Vi3IZ/FSTKViB0k+ef0fPV7dYrUIugbgupYDx7v9ud/SjrtEP8Y4xLoA==", + "license": "MIT" + }, + "node_modules/@emotion/weak-memoize": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.4.0.tgz", + "integrity": "sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==", + "license": "MIT" + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", + "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/js": { + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.56.0.tgz", + "integrity": "sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==", + "license": "MIT", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@floating-ui/core": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.0.tgz", + "integrity": "sha512-PcF++MykgmTj3CIyOQbKA/hDzOAiqI3mhuoN44WRCopIs1sgoDoU4oty4Jtqaj/y3oDU6fnVSm4QG0a3t5i0+g==", + "license": "MIT", + "dependencies": { + "@floating-ui/utils": "^0.2.1" + } + }, + "node_modules/@floating-ui/dom": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.3.tgz", + "integrity": "sha512-RnDthu3mzPlQ31Ss/BTwQ1zjzIhr3lk1gZB1OC56h/1vEtaXkESrOqL5fQVMfXpwGtRwX+YsZBdyHtJMQnkArw==", + "license": "MIT", + "dependencies": { + "@floating-ui/core": "^1.0.0", + "@floating-ui/utils": "^0.2.0" + } + }, + "node_modules/@floating-ui/react-dom": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.0.8.tgz", + "integrity": "sha512-HOdqOt3R3OGeTKidaLvJKcgg75S6tibQ3Tif4eyd91QnIJWr0NLvoXFpJA/j8HqkFSL68GDca9AuyWEHlhyClw==", + "license": "MIT", + "dependencies": { + "@floating-ui/dom": "^1.6.1" + }, + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, + "node_modules/@floating-ui/utils": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.1.tgz", + "integrity": "sha512-9TANp6GPoMtYzQdt54kfAyMmz1+osLlXdg2ENroU7zzrtflTLrrC/lgrIfaSe+Wu0b89GKccT7vxXA0MoAIO+Q==", + "license": "MIT" + }, + "node_modules/@fullcalendar/core": { + "version": "6.1.15", + "resolved": "https://registry.npmjs.org/@fullcalendar/core/-/core-6.1.15.tgz", + "integrity": "sha512-BuX7o6ALpLb84cMw1FCB9/cSgF4JbVO894cjJZ6kP74jzbUZNjtwffwRdA+Id8rrLjT30d/7TrkW90k4zbXB5Q==", + "license": "MIT", + "dependencies": { + "preact": "~10.12.1" + } + }, + "node_modules/@fullcalendar/daygrid": { + "version": "6.1.15", + "resolved": "https://registry.npmjs.org/@fullcalendar/daygrid/-/daygrid-6.1.15.tgz", + "integrity": "sha512-j8tL0HhfiVsdtOCLfzK2J0RtSkiad3BYYemwQKq512cx6btz6ZZ2RNc/hVnIxluuWFyvx5sXZwoeTJsFSFTEFA==", + "license": "MIT", + "peerDependencies": { + "@fullcalendar/core": "~6.1.15" + } + }, + "node_modules/@fullcalendar/react": { + "version": "6.1.15", + "resolved": "https://registry.npmjs.org/@fullcalendar/react/-/react-6.1.15.tgz", + "integrity": "sha512-L0b9hybS2J4e7lq6G2CD4nqriyLEqOH1tE8iI6JQjAMTVh5JicOo5Mqw+fhU5bJ7hLfMw2K3fksxX3Ul1ssw5w==", + "license": "MIT", + "peerDependencies": { + "@fullcalendar/core": "~6.1.15", + "react": "^16.7.0 || ^17 || ^18 || ^19", + "react-dom": "^16.7.0 || ^17 || ^18 || ^19" + } + }, + "node_modules/@fullcalendar/timegrid": { + "version": "6.1.15", + "resolved": "https://registry.npmjs.org/@fullcalendar/timegrid/-/timegrid-6.1.15.tgz", + "integrity": "sha512-61ORr3A148RtxQ2FNG7JKvacyA/TEVZ7z6I+3E9Oeu3dqTf6M928bFcpehRTIK6zIA6Yifs7BeWHgOE9dFnpbw==", + "license": "MIT", + "dependencies": { + "@fullcalendar/daygrid": "~6.1.15" + }, + "peerDependencies": { + "@fullcalendar/core": "~6.1.15" + } + }, + "node_modules/@graphql-typed-document-node/core": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@graphql-typed-document-node/core/-/core-3.2.0.tgz", + "integrity": "sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ==", + "license": "MIT", + "peerDependencies": { + "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.14", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", + "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", + "license": "Apache-2.0", + "dependencies": { + "@humanwhocodes/object-schema": "^2.0.2", + "debug": "^4.3.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz", + "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==", + "license": "BSD-3-Clause" + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "license": "ISC", + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/console": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.5.1.tgz", + "integrity": "sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==", + "license": "MIT", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^27.5.1", + "jest-util": "^27.5.1", + "slash": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/console/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/console/node_modules/@types/yargs": { + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", + "license": "MIT", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@jest/console/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/core": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.5.1.tgz", + "integrity": "sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==", + "license": "MIT", + "dependencies": { + "@jest/console": "^27.5.1", + "@jest/reporters": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.8.1", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^27.5.1", + "jest-config": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-resolve-dependencies": "^27.5.1", + "jest-runner": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "jest-watcher": "^27.5.1", + "micromatch": "^4.0.4", + "rimraf": "^3.0.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/core/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/core/node_modules/@types/yargs": { + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", + "license": "MIT", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@jest/core/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/environment": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.5.1.tgz", + "integrity": "sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==", + "license": "MIT", + "dependencies": { + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/environment/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/environment/node_modules/@types/yargs": { + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", + "license": "MIT", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@jest/environment/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/fake-timers": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.5.1.tgz", + "integrity": "sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==", + "license": "MIT", + "dependencies": { + "@jest/types": "^27.5.1", + "@sinonjs/fake-timers": "^8.0.1", + "@types/node": "*", + "jest-message-util": "^27.5.1", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/fake-timers/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/fake-timers/node_modules/@types/yargs": { + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", + "license": "MIT", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@jest/fake-timers/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/globals": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.5.1.tgz", + "integrity": "sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==", + "license": "MIT", + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/types": "^27.5.1", + "expect": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/globals/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/globals/node_modules/@types/yargs": { + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", + "license": "MIT", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@jest/globals/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/reporters": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.5.1.tgz", + "integrity": "sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw==", + "license": "MIT", + "dependencies": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.2", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^5.1.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-haste-map": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "slash": "^3.0.0", + "source-map": "^0.6.0", + "string-length": "^4.0.1", + "terminal-link": "^2.0.0", + "v8-to-istanbul": "^8.1.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/reporters/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/reporters/node_modules/@types/yargs": { + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", + "license": "MIT", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@jest/reporters/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/reporters/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@jest/schemas": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz", + "integrity": "sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==", + "license": "MIT", + "dependencies": { + "@sinclair/typebox": "^0.24.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/source-map": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.5.1.tgz", + "integrity": "sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==", + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9", + "source-map": "^0.6.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/source-map/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@jest/test-result": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.5.1.tgz", + "integrity": "sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==", + "license": "MIT", + "dependencies": { + "@jest/console": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/test-result/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/test-result/node_modules/@types/yargs": { + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", + "license": "MIT", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@jest/test-result/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/test-sequencer": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz", + "integrity": "sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ==", + "license": "MIT", + "dependencies": { + "@jest/test-result": "^27.5.1", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-runtime": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/transform": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.5.1.tgz", + "integrity": "sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==", + "license": "MIT", + "dependencies": { + "@babel/core": "^7.1.0", + "@jest/types": "^27.5.1", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-util": "^27.5.1", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "source-map": "^0.6.1", + "write-file-atomic": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/transform/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/transform/node_modules/@types/yargs": { + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", + "license": "MIT", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@jest/transform/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/transform/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@jest/types": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", + "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^15.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/@jest/types/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", + "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@leichtgewicht/ip-codec": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", + "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==", + "license": "MIT" + }, + "node_modules/@motionone/animation": { + "version": "10.18.0", + "resolved": "https://registry.npmjs.org/@motionone/animation/-/animation-10.18.0.tgz", + "integrity": "sha512-9z2p5GFGCm0gBsZbi8rVMOAJCtw1WqBTIPw3ozk06gDvZInBPIsQcHgYogEJ4yuHJ+akuW8g1SEIOpTOvYs8hw==", + "license": "MIT", + "dependencies": { + "@motionone/easing": "^10.18.0", + "@motionone/types": "^10.17.1", + "@motionone/utils": "^10.18.0", + "tslib": "^2.3.1" + } + }, + "node_modules/@motionone/dom": { + "version": "10.12.0", + "resolved": "https://registry.npmjs.org/@motionone/dom/-/dom-10.12.0.tgz", + "integrity": "sha512-UdPTtLMAktHiqV0atOczNYyDd/d8Cf5fFsd1tua03PqTwwCe/6lwhLSQ8a7TbnQ5SN0gm44N1slBfj+ORIhrqw==", + "license": "MIT", + "dependencies": { + "@motionone/animation": "^10.12.0", + "@motionone/generators": "^10.12.0", + "@motionone/types": "^10.12.0", + "@motionone/utils": "^10.12.0", + "hey-listen": "^1.0.8", + "tslib": "^2.3.1" + } + }, + "node_modules/@motionone/easing": { + "version": "10.18.0", + "resolved": "https://registry.npmjs.org/@motionone/easing/-/easing-10.18.0.tgz", + "integrity": "sha512-VcjByo7XpdLS4o9T8t99JtgxkdMcNWD3yHU/n6CLEz3bkmKDRZyYQ/wmSf6daum8ZXqfUAgFeCZSpJZIMxaCzg==", + "license": "MIT", + "dependencies": { + "@motionone/utils": "^10.18.0", + "tslib": "^2.3.1" + } + }, + "node_modules/@motionone/generators": { + "version": "10.18.0", + "resolved": "https://registry.npmjs.org/@motionone/generators/-/generators-10.18.0.tgz", + "integrity": "sha512-+qfkC2DtkDj4tHPu+AFKVfR/C30O1vYdvsGYaR13W/1cczPrrcjdvYCj0VLFuRMN+lP1xvpNZHCRNM4fBzn1jg==", + "license": "MIT", + "dependencies": { + "@motionone/types": "^10.17.1", + "@motionone/utils": "^10.18.0", + "tslib": "^2.3.1" + } + }, + "node_modules/@motionone/types": { + "version": "10.17.1", + "resolved": "https://registry.npmjs.org/@motionone/types/-/types-10.17.1.tgz", + "integrity": "sha512-KaC4kgiODDz8hswCrS0btrVrzyU2CSQKO7Ps90ibBVSQmjkrt2teqta6/sOG59v7+dPnKMAg13jyqtMKV2yJ7A==", + "license": "MIT" + }, + "node_modules/@motionone/utils": { + "version": "10.18.0", + "resolved": "https://registry.npmjs.org/@motionone/utils/-/utils-10.18.0.tgz", + "integrity": "sha512-3XVF7sgyTSI2KWvTf6uLlBJ5iAgRgmvp3bpuOiQJvInd4nZ19ET8lX5unn30SlmRH7hXbBbH+Gxd0m0klJ3Xtw==", + "license": "MIT", + "dependencies": { + "@motionone/types": "^10.17.1", + "hey-listen": "^1.0.8", + "tslib": "^2.3.1" + } + }, + "node_modules/@mui/base": { + "version": "5.0.0-beta.40", + "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-beta.40.tgz", + "integrity": "sha512-I/lGHztkCzvwlXpjD2+SNmvNQvB4227xBXhISPjEaJUXGImOQ9f3D2Yj/T3KasSI/h0MLWy74X0J6clhPmsRbQ==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.23.9", + "@floating-ui/react-dom": "^2.0.8", + "@mui/types": "^7.2.14", + "@mui/utils": "^5.15.14", + "@popperjs/core": "^2.11.8", + "clsx": "^2.1.0", + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@types/react": "^17.0.0 || ^18.0.0", + "react": "^17.0.0 || ^18.0.0", + "react-dom": "^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/core-downloads-tracker": { + "version": "5.15.14", + "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.15.14.tgz", + "integrity": "sha512-on75VMd0XqZfaQW+9pGjSNiqW+ghc5E2ZSLRBXwcXl/C4YzjfyjrLPhrEpKnR9Uym9KXBvxrhoHfPcczYHweyA==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + } + }, + "node_modules/@mui/icons-material": { + "version": "5.15.14", + "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-5.15.14.tgz", + "integrity": "sha512-vj/51k7MdFmt+XVw94sl30SCvGx6+wJLsNYjZRgxhS6y3UtnWnypMOsm3Kmg8TN+P0dqwsjy4/fX7B1HufJIhw==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.23.9" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@mui/material": "^5.0.0", + "@types/react": "^17.0.0 || ^18.0.0", + "react": "^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/material": { + "version": "5.15.14", + "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.15.14.tgz", + "integrity": "sha512-kEbRw6fASdQ1SQ7LVdWR5OlWV3y7Y54ZxkLzd6LV5tmz+NpO3MJKZXSfgR0LHMP7meKsPiMm4AuzV0pXDpk/BQ==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.23.9", + "@mui/base": "5.0.0-beta.40", + "@mui/core-downloads-tracker": "^5.15.14", + "@mui/system": "^5.15.14", + "@mui/types": "^7.2.14", + "@mui/utils": "^5.15.14", + "@types/react-transition-group": "^4.4.10", + "clsx": "^2.1.0", + "csstype": "^3.1.3", + "prop-types": "^15.8.1", + "react-is": "^18.2.0", + "react-transition-group": "^4.4.5" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@emotion/react": "^11.5.0", + "@emotion/styled": "^11.3.0", + "@types/react": "^17.0.0 || ^18.0.0", + "react": "^17.0.0 || ^18.0.0", + "react-dom": "^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@emotion/react": { + "optional": true + }, + "@emotion/styled": { + "optional": true + }, + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/private-theming": { + "version": "5.15.14", + "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.15.14.tgz", + "integrity": "sha512-UH0EiZckOWcxiXLX3Jbb0K7rC8mxTr9L9l6QhOZxYc4r8FHUkefltV9VDGLrzCaWh30SQiJvAEd7djX3XXY6Xw==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.23.9", + "@mui/utils": "^5.15.14", + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@types/react": "^17.0.0 || ^18.0.0", + "react": "^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/styled-engine": { + "version": "5.15.14", + "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.15.14.tgz", + "integrity": "sha512-RILkuVD8gY6PvjZjqnWhz8fu68dVkqhM5+jYWfB5yhlSQKg+2rHkmEwm75XIeAqI3qwOndK6zELK5H6Zxn4NHw==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.23.9", + "@emotion/cache": "^11.11.0", + "csstype": "^3.1.3", + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@emotion/react": "^11.4.1", + "@emotion/styled": "^11.3.0", + "react": "^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@emotion/react": { + "optional": true + }, + "@emotion/styled": { + "optional": true + } + } + }, + "node_modules/@mui/system": { + "version": "5.15.14", + "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.15.14.tgz", + "integrity": "sha512-auXLXzUaCSSOLqJXmsAaq7P96VPRXg2Rrz6OHNV7lr+kB8lobUF+/N84Vd9C4G/wvCXYPs5TYuuGBRhcGbiBGg==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.23.9", + "@mui/private-theming": "^5.15.14", + "@mui/styled-engine": "^5.15.14", + "@mui/types": "^7.2.14", + "@mui/utils": "^5.15.14", + "clsx": "^2.1.0", + "csstype": "^3.1.3", + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@emotion/react": "^11.5.0", + "@emotion/styled": "^11.3.0", + "@types/react": "^17.0.0 || ^18.0.0", + "react": "^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@emotion/react": { + "optional": true + }, + "@emotion/styled": { + "optional": true + }, + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/types": { + "version": "7.2.14", + "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.14.tgz", + "integrity": "sha512-MZsBZ4q4HfzBsywtXgM1Ksj6HDThtiwmOKUXH1pKYISI9gAVXCNHNpo7TlGoGrBaYWZTdNoirIN7JsQcQUjmQQ==", + "license": "MIT", + "peerDependencies": { + "@types/react": "^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/utils": { + "version": "5.15.14", + "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.15.14.tgz", + "integrity": "sha512-0lF/7Hh/ezDv5X7Pry6enMsbYyGKjADzvHyo3Qrc/SSlTsQ1VkbDMbH0m2t3OR5iIVLwMoxwM7yGd+6FCMtTFA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.23.9", + "@types/prop-types": "^15.7.11", + "prop-types": "^15.8.1", + "react-is": "^18.2.0" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@types/react": "^17.0.0 || ^18.0.0", + "react": "^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@nicolo-ribaudo/eslint-scope-5-internals": { + "version": "5.1.1-v1", + "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz", + "integrity": "sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==", + "license": "MIT", + "dependencies": { + "eslint-scope": "5.1.1" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@pmmmwh/react-refresh-webpack-plugin": { + "version": "0.5.11", + "resolved": "https://registry.npmjs.org/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.11.tgz", + "integrity": "sha512-7j/6vdTym0+qZ6u4XbSAxrWBGYSdCfTzySkj7WAFgDLmSyWlOrWvpyzxlFh5jtw9dn0oL/jtW+06XfFiisN3JQ==", + "license": "MIT", + "dependencies": { + "ansi-html-community": "^0.0.8", + "common-path-prefix": "^3.0.0", + "core-js-pure": "^3.23.3", + "error-stack-parser": "^2.0.6", + "find-up": "^5.0.0", + "html-entities": "^2.1.0", + "loader-utils": "^2.0.4", + "schema-utils": "^3.0.0", + "source-map": "^0.7.3" + }, + "engines": { + "node": ">= 10.13" + }, + "peerDependencies": { + "@types/webpack": "4.x || 5.x", + "react-refresh": ">=0.10.0 <1.0.0", + "sockjs-client": "^1.4.0", + "type-fest": ">=0.17.0 <5.0.0", + "webpack": ">=4.43.0 <6.0.0", + "webpack-dev-server": "3.x || 4.x", + "webpack-hot-middleware": "2.x", + "webpack-plugin-serve": "0.x || 1.x" + }, + "peerDependenciesMeta": { + "@types/webpack": { + "optional": true + }, + "sockjs-client": { + "optional": true + }, + "type-fest": { + "optional": true + }, + "webpack-dev-server": { + "optional": true + }, + "webpack-hot-middleware": { + "optional": true + }, + "webpack-plugin-serve": { + "optional": true + } + } + }, + "node_modules/@pmmmwh/react-refresh-webpack-plugin/node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@popperjs/core": { + "version": "2.11.8", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", + "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, + "node_modules/@reduxjs/toolkit": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-2.9.0.tgz", + "integrity": "sha512-fSfQlSRu9Z5yBkvsNhYF2rPS8cGXn/TZVrlwN1948QyZ8xMZ0JvP50S2acZNaf+o63u6aEeMjipFyksjIcWrog==", + "license": "MIT", + "dependencies": { + "@standard-schema/spec": "^1.0.0", + "@standard-schema/utils": "^0.3.0", + "immer": "^10.0.3", + "redux": "^5.0.1", + "redux-thunk": "^3.1.0", + "reselect": "^5.1.0" + }, + "peerDependencies": { + "react": "^16.9.0 || ^17.0.0 || ^18 || ^19", + "react-redux": "^7.2.1 || ^8.1.3 || ^9.0.0" + }, + "peerDependenciesMeta": { + "react": { + "optional": true + }, + "react-redux": { + "optional": true + } + } + }, + "node_modules/@reduxjs/toolkit/node_modules/immer": { + "version": "10.1.3", + "resolved": "https://registry.npmjs.org/immer/-/immer-10.1.3.tgz", + "integrity": "sha512-tmjF/k8QDKydUlm3mZU+tjM6zeq9/fFpPqH9SzWmBnVVKsPBg/V66qsMwb3/Bo90cgUN+ghdVBess+hPsxUyRw==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/immer" + } + }, + "node_modules/@remix-run/router": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.15.0.tgz", + "integrity": "sha512-HOil5aFtme37dVQTB6M34G95kPM3MMuqSmIRVCC52eKV+Y/tGSqw9P3rWhlAx6A+mz+MoX+XxsGsNJbaI5qCgQ==", + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@restart/context": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@restart/context/-/context-2.1.4.tgz", + "integrity": "sha512-INJYZQJP7g+IoDUh/475NlGiTeMfwTXUEr3tmRneckHIxNolGOW9CTq83S8cxq0CgJwwcMzMJFchxvlwe7Rk8Q==", + "license": "MIT", + "peerDependencies": { + "react": ">=16.3.2" + } + }, + "node_modules/@restart/hooks": { + "version": "0.4.16", + "resolved": "https://registry.npmjs.org/@restart/hooks/-/hooks-0.4.16.tgz", + "integrity": "sha512-f7aCv7c+nU/3mF7NWLtVVr0Ra80RqsO89hO72r+Y/nvQr5+q0UFGkocElTH6MJApvReVh6JHUFYn2cw1WdHF3w==", + "license": "MIT", + "dependencies": { + "dequal": "^2.0.3" + }, + "peerDependencies": { + "react": ">=16.8.0" + } + }, + "node_modules/@rjsf/bootstrap-4": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@rjsf/bootstrap-4/-/bootstrap-4-2.5.1.tgz", + "integrity": "sha512-USijizR4MkYtMOdbZWt3HDDc9vWmMvmiskqXwV2jEUBMPSu1UG0bZS2HKzqfnMJcJRT1P7Tj4O3sGwgE+7FCpw==", + "license": "MIT", + "dependencies": { + "react-icons": "^3.10.0" + }, + "peerDependencies": { + "@rjsf/core": "^2.0.0-alpha.6", + "react": ">=16", + "react-bootstrap": "^1.0.1" + } + }, + "node_modules/@rjsf/bootstrap-4/node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/@rjsf/bootstrap-4/node_modules/react-icons": { + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-3.11.0.tgz", + "integrity": "sha512-JRgiI/vdF6uyBgyZhVyYJUZAop95Sy4XDe/jmT3R/bKliFWpO/uZBwvSjWEdxwzec7SYbEPNPck0Kff2tUGM2Q==", + "license": "MIT", + "dependencies": { + "camelcase": "^5.0.0" + }, + "peerDependencies": { + "react": "*" + } + }, + "node_modules/@rjsf/core": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@rjsf/core/-/core-2.5.1.tgz", + "integrity": "sha512-km8NYScXNONaL5BiSLS6wyDj49pOLZtn0iXg7Zxlm921uuf3o2AAX5SuZS5kB4Zj2zlrVMrXESexfX6bxdDYHw==", + "license": "Apache-2.0", + "dependencies": { + "@babel/runtime-corejs2": "^7.8.7", + "@types/json-schema": "^7.0.4", + "ajv": "^6.7.0", + "core-js": "^2.5.7", + "json-schema-merge-allof": "^0.6.0", + "jsonpointer": "^4.0.1", + "lodash": "^4.17.15", + "prop-types": "^15.7.2", + "react-app-polyfill": "^1.0.4", + "react-is": "^16.9.0", + "shortid": "^2.2.14" + }, + "engines": { + "node": ">=6", + "npm": ">=2.14.7" + }, + "peerDependencies": { + "react": ">=16" + } + }, + "node_modules/@rjsf/core/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "license": "MIT" + }, + "node_modules/@rollup/plugin-babel": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz", + "integrity": "sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.10.4", + "@rollup/pluginutils": "^3.1.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0", + "@types/babel__core": "^7.1.9", + "rollup": "^1.20.0||^2.0.0" + }, + "peerDependenciesMeta": { + "@types/babel__core": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-node-resolve": { + "version": "11.2.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.1.tgz", + "integrity": "sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==", + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^3.1.0", + "@types/resolve": "1.17.1", + "builtin-modules": "^3.1.0", + "deepmerge": "^4.2.2", + "is-module": "^1.0.0", + "resolve": "^1.19.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0" + } + }, + "node_modules/@rollup/plugin-replace": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz", + "integrity": "sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==", + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^3.1.0", + "magic-string": "^0.25.7" + }, + "peerDependencies": { + "rollup": "^1.20.0 || ^2.0.0" + } + }, + "node_modules/@rollup/pluginutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", + "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", + "license": "MIT", + "dependencies": { + "@types/estree": "0.0.39", + "estree-walker": "^1.0.1", + "picomatch": "^2.2.2" + }, + "engines": { + "node": ">= 8.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0" + } + }, + "node_modules/@rollup/pluginutils/node_modules/@types/estree": { + "version": "0.0.39", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", + "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", + "license": "MIT" + }, + "node_modules/@rushstack/eslint-patch": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.7.2.tgz", + "integrity": "sha512-RbhOOTCNoCrbfkRyoXODZp75MlpiHMgbE5MEBZAnnnLyQNgrigEj4p0lzsMDyc1zVsJDLrivB58tgg3emX0eEA==", + "license": "MIT" + }, + "node_modules/@sinclair/typebox": { + "version": "0.24.51", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.51.tgz", + "integrity": "sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==", + "license": "MIT" + }, + "node_modules/@sinonjs/commons": { + "version": "1.8.6", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.6.tgz", + "integrity": "sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==", + "license": "BSD-3-Clause", + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/@sinonjs/fake-timers": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz", + "integrity": "sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==", + "license": "BSD-3-Clause", + "dependencies": { + "@sinonjs/commons": "^1.7.0" + } + }, + "node_modules/@standard-schema/spec": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.0.0.tgz", + "integrity": "sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==", + "license": "MIT" + }, + "node_modules/@standard-schema/utils": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@standard-schema/utils/-/utils-0.3.0.tgz", + "integrity": "sha512-e7Mew686owMaPJVNNLs55PUvgz371nKgwsc4vxE49zsODpJEnxgxRo2y/OKrqueavXgZNMDVj3DdHFlaSAeU8g==", + "license": "MIT" + }, + "node_modules/@surma/rollup-plugin-off-main-thread": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-2.2.3.tgz", + "integrity": "sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ==", + "license": "Apache-2.0", + "dependencies": { + "ejs": "^3.1.6", + "json5": "^2.2.0", + "magic-string": "^0.25.0", + "string.prototype.matchall": "^4.0.6" + } + }, + "node_modules/@svgr/babel-plugin-add-jsx-attribute": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-5.4.0.tgz", + "integrity": "sha512-ZFf2gs/8/6B8PnSofI0inYXr2SDNTDScPXhN7k5EqD4aZ3gi6u+rbmZHVB8IM3wDyx8ntKACZbtXSm7oZGRqVg==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/babel-plugin-remove-jsx-attribute": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-5.4.0.tgz", + "integrity": "sha512-yaS4o2PgUtwLFGTKbsiAy6D0o3ugcUhWK0Z45umJ66EPWunAz9fuFw2gJuje6wqQvQWOTJvIahUwndOXb7QCPg==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/babel-plugin-remove-jsx-empty-expression": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-5.0.1.tgz", + "integrity": "sha512-LA72+88A11ND/yFIMzyuLRSMJ+tRKeYKeQ+mR3DcAZ5I4h5CPWN9AHyUzJbWSYp/u2u0xhmgOe0+E41+GjEueA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/babel-plugin-replace-jsx-attribute-value": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-5.0.1.tgz", + "integrity": "sha512-PoiE6ZD2Eiy5mK+fjHqwGOS+IXX0wq/YDtNyIgOrc6ejFnxN4b13pRpiIPbtPwHEc+NT2KCjteAcq33/F1Y9KQ==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/babel-plugin-svg-dynamic-title": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-5.4.0.tgz", + "integrity": "sha512-zSOZH8PdZOpuG1ZVx/cLVePB2ibo3WPpqo7gFIjLV9a0QsuQAzJiwwqmuEdTaW2pegyBE17Uu15mOgOcgabQZg==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/babel-plugin-svg-em-dimensions": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-5.4.0.tgz", + "integrity": "sha512-cPzDbDA5oT/sPXDCUYoVXEmm3VIoAWAPT6mSPTJNbQaBNUuEKVKyGH93oDY4e42PYHRW67N5alJx/eEol20abw==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/babel-plugin-transform-react-native-svg": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-5.4.0.tgz", + "integrity": "sha512-3eYP/SaopZ41GHwXma7Rmxcv9uRslRDTY1estspeB1w1ueZWd/tPlMfEOoccYpEMZU3jD4OU7YitnXcF5hLW2Q==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/babel-plugin-transform-svg-component": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-5.5.0.tgz", + "integrity": "sha512-q4jSH1UUvbrsOtlo/tKcgSeiCHRSBdXoIoqX1pgcKK/aU3JD27wmMKwGtpB8qRYUYoyXvfGxUVKchLuR5pB3rQ==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/babel-preset": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-5.5.0.tgz", + "integrity": "sha512-4FiXBjvQ+z2j7yASeGPEi8VD/5rrGQk4Xrq3EdJmoZgz/tpqChpo5hgXDvmEauwtvOc52q8ghhZK4Oy7qph4ig==", + "license": "MIT", + "dependencies": { + "@svgr/babel-plugin-add-jsx-attribute": "^5.4.0", + "@svgr/babel-plugin-remove-jsx-attribute": "^5.4.0", + "@svgr/babel-plugin-remove-jsx-empty-expression": "^5.0.1", + "@svgr/babel-plugin-replace-jsx-attribute-value": "^5.0.1", + "@svgr/babel-plugin-svg-dynamic-title": "^5.4.0", + "@svgr/babel-plugin-svg-em-dimensions": "^5.4.0", + "@svgr/babel-plugin-transform-react-native-svg": "^5.4.0", + "@svgr/babel-plugin-transform-svg-component": "^5.5.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/core": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/core/-/core-5.5.0.tgz", + "integrity": "sha512-q52VOcsJPvV3jO1wkPtzTuKlvX7Y3xIcWRpCMtBF3MrteZJtBfQw/+u0B1BHy5ColpQc1/YVTrPEtSYIMNZlrQ==", + "license": "MIT", + "dependencies": { + "@svgr/plugin-jsx": "^5.5.0", + "camelcase": "^6.2.0", + "cosmiconfig": "^7.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/hast-util-to-babel-ast": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-5.5.0.tgz", + "integrity": "sha512-cAaR/CAiZRB8GP32N+1jocovUtvlj0+e65TB50/6Lcime+EA49m/8l+P2ko+XPJ4dw3xaPS3jOL4F2X4KWxoeQ==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.12.6" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/plugin-jsx": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-5.5.0.tgz", + "integrity": "sha512-V/wVh33j12hGh05IDg8GpIUXbjAPnTdPTKuP4VNLggnwaHMPNQNae2pRnyTAILWCQdz5GyMqtO488g7CKM8CBA==", + "license": "MIT", + "dependencies": { + "@babel/core": "^7.12.3", + "@svgr/babel-preset": "^5.5.0", + "@svgr/hast-util-to-babel-ast": "^5.5.0", + "svg-parser": "^2.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/plugin-svgo": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-5.5.0.tgz", + "integrity": "sha512-r5swKk46GuQl4RrVejVwpeeJaydoxkdwkM1mBKOgJLBUJPGaLci6ylg/IjhrRsREKDkr4kbMWdgOtbXEh0fyLQ==", + "license": "MIT", + "dependencies": { + "cosmiconfig": "^7.0.0", + "deepmerge": "^4.2.2", + "svgo": "^1.2.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/webpack": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-5.5.0.tgz", + "integrity": "sha512-DOBOK255wfQxguUta2INKkzPj6AIS6iafZYiYmHn6W3pHlycSRRlvWKCfLDG10fXfLWqE3DJHgRUOyJYmARa7g==", + "license": "MIT", + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/plugin-transform-react-constant-elements": "^7.12.1", + "@babel/preset-env": "^7.12.1", + "@babel/preset-react": "^7.12.5", + "@svgr/core": "^5.5.0", + "@svgr/plugin-jsx": "^5.5.0", + "@svgr/plugin-svgo": "^5.5.0", + "loader-utils": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@testing-library/dom": { + "version": "7.31.2", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-7.31.2.tgz", + "integrity": "sha512-3UqjCpey6HiTZT92vODYLPxTBWlM8ZOOjr3LX5F37/VRipW2M1kX6I/Cm4VXzteZqfGfagg8yXywpcOgQBlNsQ==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/runtime": "^7.12.5", + "@types/aria-query": "^4.2.0", + "aria-query": "^4.2.2", + "chalk": "^4.1.0", + "dom-accessibility-api": "^0.5.6", + "lz-string": "^1.4.4", + "pretty-format": "^26.6.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@testing-library/dom/node_modules/aria-query": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-4.2.2.tgz", + "integrity": "sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==", + "license": "Apache-2.0", + "dependencies": { + "@babel/runtime": "^7.10.2", + "@babel/runtime-corejs3": "^7.10.2" + }, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/@testing-library/dom/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@testing-library/jest-dom": { + "version": "5.17.0", + "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-5.17.0.tgz", + "integrity": "sha512-ynmNeT7asXyH3aSVv4vvX4Rb+0qjOhdNHnO/3vuZNqPmhDpV/+rCSGwQ7bLcmU2cJ4dvoheIO85LQj0IbJHEtg==", + "license": "MIT", + "dependencies": { + "@adobe/css-tools": "^4.0.1", + "@babel/runtime": "^7.9.2", + "@types/testing-library__jest-dom": "^5.9.1", + "aria-query": "^5.0.0", + "chalk": "^3.0.0", + "css.escape": "^1.5.1", + "dom-accessibility-api": "^0.5.6", + "lodash": "^4.17.15", + "redent": "^3.0.0" + }, + "engines": { + "node": ">=8", + "npm": ">=6", + "yarn": ">=1" + } + }, + "node_modules/@testing-library/react": { + "version": "11.2.7", + "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-11.2.7.tgz", + "integrity": "sha512-tzRNp7pzd5QmbtXNG/mhdcl7Awfu/Iz1RaVHY75zTdOkmHCuzMhRL83gWHSgOAcjS3CCbyfwUHMZgRJb4kAfpA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.12.5", + "@testing-library/dom": "^7.28.1" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "react": "*", + "react-dom": "*" + } + }, + "node_modules/@testing-library/user-event": { + "version": "12.8.3", + "resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-12.8.3.tgz", + "integrity": "sha512-IR0iWbFkgd56Bu5ZI/ej8yQwrkCv8Qydx6RzwbKz9faXazR/+5tvYKsZQgyXJiwgpcva127YO6JcWy7YlCfofQ==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.12.5" + }, + "engines": { + "node": ">=10", + "npm": ">=6" + }, + "peerDependencies": { + "@testing-library/dom": ">=7.21.4" + } + }, + "node_modules/@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/@trysound/sax": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", + "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", + "license": "ISC", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/@types/apollo-upload-client": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/@types/apollo-upload-client/-/apollo-upload-client-14.1.0.tgz", + "integrity": "sha512-ZLvcEqu+l9qKGdrIpASt/A2WY1ghAC9L3qaoegkiBOccjxvQmWN9liZzVFiuHTuWseWpVbMklqbs/z+KEjll9Q==", + "license": "MIT", + "dependencies": { + "@apollo/client": "^3.1.3", + "@types/extract-files": "*", + "graphql": "^15.3.0" + } + }, + "node_modules/@types/aria-query": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-4.2.2.tgz", + "integrity": "sha512-HnYpAE1Y6kRyKM/XkEuiRQhTHvkzMBurTHnpFLYLBGPIylZNPs9jJcuOOYWxPLJCSEtmZT0Y8rHDokKN7rRTig==", + "license": "MIT" + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.6.8", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", + "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.5.tgz", + "integrity": "sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.20.7" + } + }, + "node_modules/@types/body-parser": { + "version": "1.19.5", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", + "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", + "license": "MIT", + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/bonjour": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.13.tgz", + "integrity": "sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect": { + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect-history-api-fallback": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz", + "integrity": "sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==", + "license": "MIT", + "dependencies": { + "@types/express-serve-static-core": "*", + "@types/node": "*" + } + }, + "node_modules/@types/crypto-js": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@types/crypto-js/-/crypto-js-4.2.2.tgz", + "integrity": "sha512-sDOLlVbHhXpAUAL0YHDUUwDZf3iN4Bwi4W6a0W0b+QcAezUbRtH4FVb+9J4h+XFPW7l/gQ9F8qC7P+Ec4k8QVQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/d3-array": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/@types/d3-array/-/d3-array-3.2.2.tgz", + "integrity": "sha512-hOLWVbm7uRza0BYXpIIW5pxfrKe0W+D5lrFiAEYR+pb6w3N2SwSMaJbXdUfSEv+dT4MfHBLtn5js0LAWaO6otw==", + "license": "MIT" + }, + "node_modules/@types/d3-color": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@types/d3-color/-/d3-color-3.1.3.tgz", + "integrity": "sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==", + "license": "MIT" + }, + "node_modules/@types/d3-ease": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/d3-ease/-/d3-ease-3.0.2.tgz", + "integrity": "sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA==", + "license": "MIT" + }, + "node_modules/@types/d3-interpolate": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-3.0.4.tgz", + "integrity": "sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==", + "license": "MIT", + "dependencies": { + "@types/d3-color": "*" + } + }, + "node_modules/@types/d3-path": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@types/d3-path/-/d3-path-3.1.1.tgz", + "integrity": "sha512-VMZBYyQvbGmWyWVea0EHs/BwLgxc+MKi1zLDCONksozI4YJMcTt8ZEuIR4Sb1MMTE8MMW49v0IwI5+b7RmfWlg==", + "license": "MIT" + }, + "node_modules/@types/d3-scale": { + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.9.tgz", + "integrity": "sha512-dLmtwB8zkAeO/juAMfnV+sItKjlsw2lKdZVVy6LRr0cBmegxSABiLEpGVmSJJ8O08i4+sGR6qQtb6WtuwJdvVw==", + "license": "MIT", + "dependencies": { + "@types/d3-time": "*" + } + }, + "node_modules/@types/d3-shape": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-3.1.7.tgz", + "integrity": "sha512-VLvUQ33C+3J+8p+Daf+nYSOsjB4GXp19/S/aGo60m9h1v6XaxjiT82lKVWJCfzhtuZ3yD7i/TPeC/fuKLLOSmg==", + "license": "MIT", + "dependencies": { + "@types/d3-path": "*" + } + }, + "node_modules/@types/d3-time": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.4.tgz", + "integrity": "sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g==", + "license": "MIT" + }, + "node_modules/@types/d3-timer": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/d3-timer/-/d3-timer-3.0.2.tgz", + "integrity": "sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==", + "license": "MIT" + }, + "node_modules/@types/date-arithmetic": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@types/date-arithmetic/-/date-arithmetic-4.1.4.tgz", + "integrity": "sha512-p9eZ2X9B80iKiTW4ukVj8B4K6q9/+xFtQ5MGYA5HWToY9nL4EkhV9+6ftT2VHpVMEZb5Tv00Iel516bVdO+yRw==", + "license": "MIT" + }, + "node_modules/@types/eslint": { + "version": "8.56.2", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.2.tgz", + "integrity": "sha512-uQDwm1wFHmbBbCZCqAlq6Do9LYwByNZHWzXppSnay9SuwJ+VRbjkbLABer54kcPnMSlG6Fdiy2yaFXm/z9Z5gw==", + "license": "MIT", + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", + "license": "MIT", + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", + "license": "MIT" + }, + "node_modules/@types/express": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", + "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", + "license": "MIT", + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.33", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "4.17.43", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.43.tgz", + "integrity": "sha512-oaYtiBirUOPQGSWNGPWnzyAFJ0BP3cwvN4oWZQY+zUBwpVIGsKUkpBpSztp74drYcjavs7SKFZ4DX1V2QeN8rg==", + "license": "MIT", + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "node_modules/@types/extract-files": { + "version": "13.0.1", + "resolved": "https://registry.npmjs.org/@types/extract-files/-/extract-files-13.0.1.tgz", + "integrity": "sha512-/fRbzc2lAd7jDJSSnxWiUyXWjdUZZ4HbISLJzVgt1AvrdOa7U49YRPcvuCUywkmURZ7uwJOheDjx19itbQ5KvA==", + "license": "MIT" + }, + "node_modules/@types/graceful-fs": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", + "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/history": { + "version": "4.7.11", + "resolved": "https://registry.npmjs.org/@types/history/-/history-4.7.11.tgz", + "integrity": "sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==", + "license": "MIT" + }, + "node_modules/@types/http-errors": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", + "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==", + "license": "MIT" + }, + "node_modules/@types/http-proxy": { + "version": "1.17.14", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.14.tgz", + "integrity": "sha512-SSrD0c1OQzlFX7pGu1eXxSEjemej64aaNPRhhVYUGqXh0BtldAAx37MG8btcumvpgKyZp1F5Gn3JkktdxiFv6w==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/humps": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/humps/-/humps-2.0.6.tgz", + "integrity": "sha512-Fagm1/a/1J9gDKzGdtlPmmTN5eSw/aaTzHtj740oSfo+MODsSY2WglxMmhTdOglC8nxqUhGGQ+5HfVtBvxo3Kg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/invariant": { + "version": "2.2.37", + "resolved": "https://registry.npmjs.org/@types/invariant/-/invariant-2.2.37.tgz", + "integrity": "sha512-IwpIMieE55oGWiXkQPSBY1nw1nFs6bsKXTFskNY8sdS17K24vyEBRQZEwlRS7ZmXCWnJcQtbxWzly+cODWGs2A==", + "license": "MIT" + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", + "license": "MIT" + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", + "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", + "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/jest": { + "version": "26.0.24", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-26.0.24.tgz", + "integrity": "sha512-E/X5Vib8BWqZNRlDxj9vYXhsDwPYbPINqKF9BsnSoon4RQ0D9moEuLD8txgyypFLH7J4+Lho9Nr/c8H0Fi+17w==", + "license": "MIT", + "dependencies": { + "jest-diff": "^26.0.0", + "pretty-format": "^26.0.0" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "license": "MIT" + }, + "node_modules/@types/json2csv": { + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/@types/json2csv/-/json2csv-5.0.7.tgz", + "integrity": "sha512-Ma25zw9G9GEBnX8b12R4EYvnFT6dBh8L3jwsN5EUFXa+fl2dqmbLDbNWN0XuQU3rSXdsbBeCYjI9uHU2PUBxhA==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "license": "MIT" + }, + "node_modules/@types/lodash": { + "version": "4.17.17", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.17.tgz", + "integrity": "sha512-RRVJ+J3J+WmyOTqnz3PiBLA501eKwXl2noseKOrNo/6+XEHjTAxO4xHvxQB6QuNm+s4WRbn6rSiap8+EA+ykFQ==", + "license": "MIT" + }, + "node_modules/@types/lodash.mergewith": { + "version": "4.6.7", + "resolved": "https://registry.npmjs.org/@types/lodash.mergewith/-/lodash.mergewith-4.6.7.tgz", + "integrity": "sha512-3m+lkO5CLRRYU0fhGRp7zbsGi6+BZj0uTVSwvcKU+nSlhjA9/QRNfuSGnD2mX6hQA7ZbmcCkzk5h4ZYGOtk14A==", + "license": "MIT", + "dependencies": { + "@types/lodash": "*" + } + }, + "node_modules/@types/mime": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "22.15.29", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.15.29.tgz", + "integrity": "sha512-LNdjOkUDlU1RZb8e1kOIUpN1qQUlzGkEtbVNo53vbrwDg5om6oduhm4SiUaPW5ASTXhAiP0jInWG8Qx9fVlOeQ==", + "license": "MIT", + "dependencies": { + "undici-types": "~6.21.0" + } + }, + "node_modules/@types/node-forge": { + "version": "1.3.11", + "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.11.tgz", + "integrity": "sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/parse-json": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz", + "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==", + "license": "MIT" + }, + "node_modules/@types/prettier": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.3.tgz", + "integrity": "sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==", + "license": "MIT" + }, + "node_modules/@types/prop-types": { + "version": "15.7.12", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.12.tgz", + "integrity": "sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==", + "license": "MIT" + }, + "node_modules/@types/q": { + "version": "1.5.8", + "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.8.tgz", + "integrity": "sha512-hroOstUScF6zhIi+5+x0dzqrHA1EJi+Irri6b1fxolMTqqHIV/Cg77EtnQcZqZCu8hR3mX2BzIxN4/GzI68Kfw==", + "license": "MIT" + }, + "node_modules/@types/qs": { + "version": "6.9.11", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.11.tgz", + "integrity": "sha512-oGk0gmhnEJK4Yyk+oI7EfXsLayXatCWPHary1MtcmbAifkobT9cM9yutG/hZKIseOU0MqbIwQ/u2nn/Gb+ltuQ==", + "license": "MIT" + }, + "node_modules/@types/range-parser": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", + "license": "MIT" + }, + "node_modules/@types/react": { + "version": "18.2.55", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.55.tgz", + "integrity": "sha512-Y2Tz5P4yz23brwm2d7jNon39qoAtMMmalOQv6+fEFt1mT+FcM3D841wDpoUvFXhaYenuROCy3FZYqdTjM7qVyA==", + "license": "MIT", + "dependencies": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-big-calendar": { + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/@types/react-big-calendar/-/react-big-calendar-1.16.2.tgz", + "integrity": "sha512-vydU/ZyZsT17sppfiH1vXXlXeruxrzX0Hld4QJ44LgkN4DA09yDlnxsWhyKBXRxXRJ69fl/7qdF2o3DESEU7vg==", + "license": "MIT", + "dependencies": { + "@types/date-arithmetic": "*", + "@types/prop-types": "*", + "@types/react": "*" + } + }, + "node_modules/@types/react-dom": { + "version": "18.2.19", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.19.tgz", + "integrity": "sha512-aZvQL6uUbIJpjZk4U8JZGbau9KDeAwMfmhyWorxgBkqDIEf6ROjRozcmPIicqsUwPUjbkDfHKgGee1Lq65APcA==", + "license": "MIT", + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/react-jsonschema-form": { + "version": "1.7.13", + "resolved": "https://registry.npmjs.org/@types/react-jsonschema-form/-/react-jsonschema-form-1.7.13.tgz", + "integrity": "sha512-C2jgO7/ow76oCSfUK++jKKox17R0A7ryMYNE5hJ2dR1Ske9jhuvjIlurvzMePh+Xjk8wey0nzB2C7HFKe2pRdg==", + "license": "MIT", + "dependencies": { + "@types/json-schema": "*", + "@types/react": "*" + } + }, + "node_modules/@types/react-router": { + "version": "5.1.20", + "resolved": "https://registry.npmjs.org/@types/react-router/-/react-router-5.1.20.tgz", + "integrity": "sha512-jGjmu/ZqS7FjSH6owMcD5qpq19+1RS9DeVRqfl1FeBMxTDQAGwlMWOcs52NDoXaNKyG3d1cYQFMs9rCrb88o9Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/history": "^4.7.11", + "@types/react": "*" + } + }, + "node_modules/@types/react-router-dom": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/@types/react-router-dom/-/react-router-dom-5.3.3.tgz", + "integrity": "sha512-kpqnYK4wcdm5UaWI3fLcELopqLrHgLqNsdpHauzlQktfkHL3npOSwtj1Uz9oKBAzs7lFtVkV8j83voAz2D8fhw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/history": "^4.7.11", + "@types/react": "*", + "@types/react-router": "*" + } + }, + "node_modules/@types/react-table": { + "version": "7.7.19", + "resolved": "https://registry.npmjs.org/@types/react-table/-/react-table-7.7.19.tgz", + "integrity": "sha512-47jMa1Pai7ily6BXJCW33IL5ghqmCWs2VM9s+h1D4mCaK5P4uNkZOW3RMMg8MCXBvAJ0v9+sPqKjhid0PaJPQA==", + "license": "MIT", + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/react-test-renderer": { + "version": "17.0.9", + "resolved": "https://registry.npmjs.org/@types/react-test-renderer/-/react-test-renderer-17.0.9.tgz", + "integrity": "sha512-bOfxcu5oZ+KxvACScbkTwZ4eGCtZFTz4VZCOVAIfGbThxqiXSIGipKVG8ubaYBXquUSQROzNIUzviWdSnnAlzg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/react": "^17" + } + }, + "node_modules/@types/react-test-renderer/node_modules/@types/react": { + "version": "17.0.75", + "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.75.tgz", + "integrity": "sha512-MSA+NzEzXnQKrqpO63CYqNstFjsESgvJAdAyyJ1n6ZQq/GLgf6nOfIKwk+Twuz0L1N6xPe+qz5xRCJrbhMaLsw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-transition-group": { + "version": "4.4.10", + "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.10.tgz", + "integrity": "sha512-hT/+s0VQs2ojCX823m60m5f0sL5idt9SO6Tj6Dg+rdphGPIeJbJ6CxvBYkgkGKrYeDjvIpKTR38UzmtHJOGW3Q==", + "license": "MIT", + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/resolve": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", + "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", + "license": "MIT" + }, + "node_modules/@types/scheduler": { + "version": "0.16.8", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.8.tgz", + "integrity": "sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==", + "license": "MIT" + }, + "node_modules/@types/semver": { + "version": "7.5.7", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.7.tgz", + "integrity": "sha512-/wdoPq1QqkSj9/QOeKkFquEuPzQbHTWAMPH/PaUMB+JuR31lXhlWXRZ52IpfDYVlDOUBvX09uBrPwxGT1hjNBg==", + "license": "MIT" + }, + "node_modules/@types/send": { + "version": "0.17.4", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", + "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", + "license": "MIT", + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "node_modules/@types/serve-index": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.4.tgz", + "integrity": "sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==", + "license": "MIT", + "dependencies": { + "@types/express": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "1.15.5", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.5.tgz", + "integrity": "sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ==", + "license": "MIT", + "dependencies": { + "@types/http-errors": "*", + "@types/mime": "*", + "@types/node": "*" + } + }, + "node_modules/@types/sockjs": { + "version": "0.3.36", + "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.36.tgz", + "integrity": "sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/stack-utils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", + "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", + "license": "MIT" + }, + "node_modules/@types/testing-library__jest-dom": { + "version": "5.14.9", + "resolved": "https://registry.npmjs.org/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.14.9.tgz", + "integrity": "sha512-FSYhIjFlfOpGSRyVoMBMuS3ws5ehFQODymf3vlI7U1K8c7PHwWwFY7VREfmsuzHSOnoKs/9/Y983ayOs7eRzqw==", + "license": "MIT", + "dependencies": { + "@types/jest": "*" + } + }, + "node_modules/@types/trusted-types": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", + "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==", + "license": "MIT" + }, + "node_modules/@types/use-sync-external-store": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/@types/use-sync-external-store/-/use-sync-external-store-0.0.6.tgz", + "integrity": "sha512-zFDAD+tlpf2r4asuHEj0XH6pY6i0g5NeAHPn+15wk3BV6JA69eERFXC1gyGThDkVa1zCyKr5jox1+2LbV/AMLg==", + "license": "MIT" + }, + "node_modules/@types/warning": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/warning/-/warning-3.0.3.tgz", + "integrity": "sha512-D1XC7WK8K+zZEveUPY+cf4+kgauk8N4eHr/XIHXGlGYkHLud6hK9lYfZk1ry1TNh798cZUCgb6MqGEG8DkJt6Q==", + "license": "MIT" + }, + "node_modules/@types/ws": { + "version": "8.5.10", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.10.tgz", + "integrity": "sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/yargs": { + "version": "15.0.19", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.19.tgz", + "integrity": "sha512-2XUaGVmyQjgyAZldf0D0c14vvo/yv0MhQBSTJcejMMaitsn3nxCB6TmH4G0ZQf+uxROOa9mpanoSm8h6SG/1ZA==", + "license": "MIT", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", + "license": "MIT" + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz", + "integrity": "sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==", + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.4.0", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/type-utils": "5.62.0", + "@typescript-eslint/utils": "5.62.0", + "debug": "^4.3.4", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "natural-compare-lite": "^1.4.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^5.0.0", + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "license": "ISC" + }, + "node_modules/@typescript-eslint/experimental-utils": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.62.0.tgz", + "integrity": "sha512-RTXpeB3eMkpoclG3ZHft6vG/Z30azNHuqY6wKPBHlVMZFuEvrtlEDe8gMqDb+SO+9hjC/pLekeSCryf9vMZlCw==", + "license": "MIT", + "dependencies": { + "@typescript-eslint/utils": "5.62.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz", + "integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==", + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", + "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz", + "integrity": "sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==", + "license": "MIT", + "dependencies": { + "@typescript-eslint/typescript-estree": "5.62.0", + "@typescript-eslint/utils": "5.62.0", + "debug": "^4.3.4", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", + "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", + "license": "MIT", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", + "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "license": "ISC" + }, + "node_modules/@typescript-eslint/utils": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", + "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", + "eslint-scope": "^5.1.1", + "semver": "^7.3.7" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/semver": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "license": "ISC" + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", + "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "license": "ISC" + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz", + "integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==", + "license": "MIT", + "dependencies": { + "@webassemblyjs/helper-numbers": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", + "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", + "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz", + "integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==", + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", + "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", + "license": "MIT", + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", + "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz", + "integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==", + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", + "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", + "license": "MIT", + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", + "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", + "license": "Apache-2.0", + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", + "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", + "license": "MIT" + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz", + "integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==", + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/helper-wasm-section": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-opt": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6", + "@webassemblyjs/wast-printer": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz", + "integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==", + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz", + "integrity": "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==", + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz", + "integrity": "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==", + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz", + "integrity": "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==", + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@wry/caches": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@wry/caches/-/caches-1.0.1.tgz", + "integrity": "sha512-bXuaUNLVVkD20wcGBWRyo7j9N3TxePEWFZj2Y+r9OoUzfqmavM84+mFykRicNsBqatba5JLay1t48wxaXaWnlA==", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@wry/context": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/@wry/context/-/context-0.7.4.tgz", + "integrity": "sha512-jmT7Sb4ZQWI5iyu3lobQxICu2nC/vbUhP0vIdd6tHC9PTfenmRmuIFqktc6GH9cgi+ZHnsLWPvfSvc4DrYmKiQ==", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@wry/equality": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/@wry/equality/-/equality-0.5.7.tgz", + "integrity": "sha512-BRFORjsTuQv5gxcXsuDXx6oGRhuVsEGwZy6LOzRRfgu+eSfxbhUQ9L9YtSEIuIjY/o7g3iWFjrc5eSY1GXP2Dw==", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@wry/trie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@wry/trie/-/trie-0.5.0.tgz", + "integrity": "sha512-FNoYzHawTMk/6KMQoEG5O4PuioX19UbwdQKF44yw0nLfOypfQdjtfZzo/UIJWAJ23sNIFbD1Ug9lbaDGMwbqQA==", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "license": "BSD-3-Clause" + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "license": "Apache-2.0" + }, + "node_modules/@zag-js/dom-query": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/@zag-js/dom-query/-/dom-query-0.16.0.tgz", + "integrity": "sha512-Oqhd6+biWyKnhKwFFuZrrf6lxBz2tX2pRQe6grUnYwO6HJ8BcbqZomy2lpOdr+3itlaUqx+Ywj5E5ZZDr/LBfQ==", + "license": "MIT" + }, + "node_modules/@zag-js/element-size": { + "version": "0.10.5", + "resolved": "https://registry.npmjs.org/@zag-js/element-size/-/element-size-0.10.5.tgz", + "integrity": "sha512-uQre5IidULANvVkNOBQ1tfgwTQcGl4hliPSe69Fct1VfYb2Fd0jdAcGzqQgPhfrXFpR62MxLPB7erxJ/ngtL8w==", + "license": "MIT" + }, + "node_modules/@zag-js/focus-visible": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/@zag-js/focus-visible/-/focus-visible-0.16.0.tgz", + "integrity": "sha512-a7U/HSopvQbrDU4GLerpqiMcHKEkQkNPeDZJWz38cw/6Upunh41GjHetq5TB84hxyCaDzJ6q2nEdNoBQfC0FKA==", + "license": "MIT", + "dependencies": { + "@zag-js/dom-query": "0.16.0" + } + }, + "node_modules/@zeit/schemas": { + "version": "2.36.0", + "resolved": "https://registry.npmjs.org/@zeit/schemas/-/schemas-2.36.0.tgz", + "integrity": "sha512-7kjMwcChYEzMKjeex9ZFXkt1AyNov9R5HZtjBKVsmVpw7pa7ZtlCGvCBC2vnnXctaYN+aRI61HjIqeetZW5ROg==", + "license": "MIT" + }, + "node_modules/abab": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", + "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", + "license": "BSD-3-Clause" + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "license": "MIT", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-globals": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", + "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", + "license": "MIT", + "dependencies": { + "acorn": "^7.1.1", + "acorn-walk": "^7.1.1" + } + }, + "node_modules/acorn-globals/node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-import-assertions": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", + "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", + "license": "MIT", + "peerDependencies": { + "acorn": "^8" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/address": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/address/-/address-1.2.2.tgz", + "integrity": "sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==", + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/adjust-sourcemap-loader": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz", + "integrity": "sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==", + "license": "MIT", + "dependencies": { + "loader-utils": "^2.0.0", + "regex-parser": "^2.2.11" + }, + "engines": { + "node": ">=8.9" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "license": "MIT", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "license": "MIT", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ajv-formats/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "license": "MIT" + }, + "node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "license": "MIT", + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/ansi-align": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", + "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", + "license": "ISC", + "dependencies": { + "string-width": "^4.1.0" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "license": "MIT", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-escapes/node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-html-community": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", + "engines": [ + "node >= 0.8.0" + ], + "license": "Apache-2.0", + "bin": { + "ansi-html": "bin/ansi-html" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "license": "MIT" + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/apollo-upload-client": { + "version": "16.0.0", + "resolved": "https://registry.npmjs.org/apollo-upload-client/-/apollo-upload-client-16.0.0.tgz", + "integrity": "sha512-aLhYucyA0T8aBEQ5g+p13qnR9RUyL8xqb8FSZ7e/Kw2KUOsotLUlFluLobqaE7JSUFwc6sKfXIcwB7y4yEjbZg==", + "license": "MIT", + "dependencies": { + "extract-files": "^11.0.0" + }, + "engines": { + "node": "^12.20 || >= 14.13" + }, + "funding": { + "url": "https://github.com/sponsors/jaydenseric" + }, + "peerDependencies": { + "@apollo/client": "^3.0.0", + "graphql": "14 - 15" + } + }, + "node_modules/arch": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz", + "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "license": "MIT" + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "license": "Python-2.0" + }, + "node_modules/aria-hidden": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.6.tgz", + "integrity": "sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==", + "license": "MIT", + "dependencies": { + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/aria-query": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", + "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", + "license": "Apache-2.0", + "dependencies": { + "dequal": "^2.0.3" + } + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", + "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.5", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "license": "MIT" + }, + "node_modules/array-includes": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz", + "integrity": "sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/array.prototype.filter": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array.prototype.filter/-/array.prototype.filter-1.0.3.tgz", + "integrity": "sha512-VizNcj/RGJiUyQBgzwxzE5oHdeuXY5hSbbmKMlphj1cy1Vl7Pn2asCGbSrru6hSQjmCzqTBPVWAF/whmEOVHbw==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-array-method-boxes-properly": "^1.0.0", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.findlastindex": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.4.tgz", + "integrity": "sha512-hzvSHUshSpCflDR1QMUBLHGHP1VIEBegT4pix9H/Z92Xw3ySoy6c2qh7lJWTJnRJ8JCZ9bJNCgTyYaJGcJu6xQ==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.3.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", + "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", + "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.reduce": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/array.prototype.reduce/-/array.prototype.reduce-1.0.6.tgz", + "integrity": "sha512-UW+Mz8LG/sPSU8jRDCjVr6J/ZKAGpHfwrZ6kWTG5qCxIEiXdVshqGnu5vEZA8S1y6X4aCSbQZ0/EEsfvEvBiSg==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-array-method-boxes-properly": "^1.0.0", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.tosorted": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.3.tgz", + "integrity": "sha512-/DdH4TiTmOKzyQbp/eadcCVexiCb36xJg7HshYOYJnNZFDj33GEv0P7GxsynpShhq4OLYJzbGcBDkLsDt7MnNg==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.1.0", + "es-shim-unscopables": "^1.0.2" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", + "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.2.1", + "get-intrinsic": "^1.2.3", + "is-array-buffer": "^3.0.4", + "is-shared-array-buffer": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", + "license": "MIT" + }, + "node_modules/ast-types-flow": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz", + "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==", + "license": "MIT" + }, + "node_modules/async": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz", + "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==", + "license": "MIT" + }, + "node_modules/asynciterator.prototype": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/asynciterator.prototype/-/asynciterator.prototype-1.0.0.tgz", + "integrity": "sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==", + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "license": "MIT" + }, + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "license": "ISC", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/autoprefixer": { + "version": "10.4.17", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.17.tgz", + "integrity": "sha512-/cpVNRLSfhOtcGflT13P2794gVSgmPgTR+erw5ifnMLZb0UnSlkK4tquLmkd3BhA+nLo5tX8Cu0upUsGKvKbmg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "browserslist": "^4.22.2", + "caniuse-lite": "^1.0.30001578", + "fraction.js": "^4.3.7", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.6.tgz", + "integrity": "sha512-j1QzY8iPNPG4o4xmO3ptzpRxTciqD3MgEHtifP/YnJpIo58Xu+ne4BejlbkuaLfXn/nz6HFiw29bLpj2PNMdGg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/axe-core": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.7.0.tgz", + "integrity": "sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ==", + "license": "MPL-2.0", + "engines": { + "node": ">=4" + } + }, + "node_modules/axios": { + "version": "1.6.7", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.7.tgz", + "integrity": "sha512-/hDJGff6/c7u0hDkvkGxR/oy6CbCs8ziCsC7SqmhjfozqiJGc8Z11wrv9z9lYfY4K8l+H9TpjcMDX0xOZmx+RA==", + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.15.4", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/axobject-query": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.2.1.tgz", + "integrity": "sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==", + "license": "Apache-2.0", + "dependencies": { + "dequal": "^2.0.3" + } + }, + "node_modules/babel-jest": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.5.1.tgz", + "integrity": "sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg==", + "license": "MIT", + "dependencies": { + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^27.5.1", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.8.0" + } + }, + "node_modules/babel-jest/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/babel-jest/node_modules/@types/yargs": { + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", + "license": "MIT", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/babel-jest/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/babel-loader": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.3.0.tgz", + "integrity": "sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==", + "license": "MIT", + "dependencies": { + "find-cache-dir": "^3.3.1", + "loader-utils": "^2.0.0", + "make-dir": "^3.1.0", + "schema-utils": "^2.6.5" + }, + "engines": { + "node": ">= 8.9" + }, + "peerDependencies": { + "@babel/core": "^7.0.0", + "webpack": ">=2" + } + }, + "node_modules/babel-loader/node_modules/schema-utils": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 8.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "license": "BSD-3-Clause", + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-jest-hoist": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.5.1.tgz", + "integrity": "sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ==", + "license": "MIT", + "dependencies": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.0.0", + "@types/babel__traverse": "^7.0.6" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/babel-plugin-macros": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", + "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.12.5", + "cosmiconfig": "^7.0.0", + "resolve": "^1.19.0" + }, + "engines": { + "node": ">=10", + "npm": ">=6" + } + }, + "node_modules/babel-plugin-named-asset-import": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/babel-plugin-named-asset-import/-/babel-plugin-named-asset-import-0.3.8.tgz", + "integrity": "sha512-WXiAc++qo7XcJ1ZnTYGtLxmBCVbddAml3CEXgWaBzNzLNoxtQ8AiGEFDMOhot9XjTCQbvP5E77Fj9Gk924f00Q==", + "license": "MIT", + "peerDependencies": { + "@babel/core": "^7.1.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.4.8", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.8.tgz", + "integrity": "sha512-OtIuQfafSzpo/LhnJaykc0R/MMnuLSSVjVYy9mHArIZ9qTCSZ6TpWCuEKZYVoN//t8HqBNScHrOtCrIK5IaGLg==", + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.22.6", + "@babel/helper-define-polyfill-provider": "^0.5.0", + "semver": "^6.3.1" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.9.0.tgz", + "integrity": "sha512-7nZPG1uzK2Ymhy/NbaOWTg3uibM2BmGASS4vHS4szRZAIR8R6GwA/xAujpdrXU5iyklrimWnLWU+BLF9suPTqg==", + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.5.0", + "core-js-compat": "^3.34.0" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.5.tgz", + "integrity": "sha512-OJGYZlhLqBh2DDHeqAxWB1XIvr49CxiJ2gIt61/PU55CQK4Z58OzMqjDe1zwQdQk+rBYsRc+1rJmdajM3gimHg==", + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.5.0" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-transform-react-remove-prop-types": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.24.tgz", + "integrity": "sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA==", + "license": "MIT" + }, + "node_modules/babel-preset-current-node-syntax": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", + "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", + "license": "MIT", + "dependencies": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.8.3", + "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-top-level-await": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/babel-preset-jest": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.5.1.tgz", + "integrity": "sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag==", + "license": "MIT", + "dependencies": { + "babel-plugin-jest-hoist": "^27.5.1", + "babel-preset-current-node-syntax": "^1.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/babel-preset-react-app": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-react-app/-/babel-preset-react-app-10.0.1.tgz", + "integrity": "sha512-b0D9IZ1WhhCWkrTXyFuIIgqGzSkRIH5D5AmB0bXbzYAB1OBAwHcUeyWW2LorutLWF5btNo/N7r/cIdmvvKJlYg==", + "license": "MIT", + "dependencies": { + "@babel/core": "^7.16.0", + "@babel/plugin-proposal-class-properties": "^7.16.0", + "@babel/plugin-proposal-decorators": "^7.16.4", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.16.0", + "@babel/plugin-proposal-numeric-separator": "^7.16.0", + "@babel/plugin-proposal-optional-chaining": "^7.16.0", + "@babel/plugin-proposal-private-methods": "^7.16.0", + "@babel/plugin-transform-flow-strip-types": "^7.16.0", + "@babel/plugin-transform-react-display-name": "^7.16.0", + "@babel/plugin-transform-runtime": "^7.16.4", + "@babel/preset-env": "^7.16.4", + "@babel/preset-react": "^7.16.0", + "@babel/preset-typescript": "^7.16.0", + "@babel/runtime": "^7.16.3", + "babel-plugin-macros": "^3.1.0", + "babel-plugin-transform-react-remove-prop-types": "^0.4.24" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "license": "MIT" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", + "license": "MIT" + }, + "node_modules/bfj": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/bfj/-/bfj-7.1.0.tgz", + "integrity": "sha512-I6MMLkn+anzNdCUp9hMRyui1HaNEUCco50lxbvNS4+EyXg8lN3nJ48PjPWtbH8UVS9CuMoaKE9U2V3l29DaRQw==", + "license": "MIT", + "dependencies": { + "bluebird": "^3.7.2", + "check-types": "^11.2.3", + "hoopy": "^0.1.4", + "jsonpath": "^1.1.1", + "tryer": "^1.0.1" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "license": "MIT" + }, + "node_modules/body-parser": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", + "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/bonjour-service": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.2.1.tgz", + "integrity": "sha512-oSzCS2zV14bh2kji6vNe7vrpJYCHGvcZnlffFQ1MEoX/WOeQ/teD8SYWKR942OI3INjq8OMNJlbPK5LLLUxFDw==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "multicast-dns": "^7.2.5" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "license": "ISC" + }, + "node_modules/bootstrap": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-4.6.2.tgz", + "integrity": "sha512-51Bbp/Uxr9aTuy6ca/8FbFloBUJZLHwnhTcnjIeRn2suQWsWzcuJhGjKDB5eppVte/8oCdOL3VuwxvZDUggwGQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/twbs" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/bootstrap" + } + ], + "license": "MIT", + "peerDependencies": { + "jquery": "1.9.1 - 3", + "popper.js": "^1.16.1" + } + }, + "node_modules/boxen": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-7.0.0.tgz", + "integrity": "sha512-j//dBVuyacJbvW+tvZ9HuH03fZ46QcaKvvhZickZqtB271DxJ7SNRSNxrV/dZX0085m7hISRZWbzWlJvx/rHSg==", + "license": "MIT", + "dependencies": { + "ansi-align": "^3.0.1", + "camelcase": "^7.0.0", + "chalk": "^5.0.1", + "cli-boxes": "^3.0.0", + "string-width": "^5.1.2", + "type-fest": "^2.13.0", + "widest-line": "^4.0.1", + "wrap-ansi": "^8.0.1" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/boxen/node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/boxen/node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/boxen/node_modules/camelcase": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-7.0.1.tgz", + "integrity": "sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==", + "license": "MIT", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/boxen/node_modules/chalk": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", + "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/boxen/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/boxen/node_modules/strip-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/boxen/node_modules/type-fest": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", + "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/boxen/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "license": "MIT", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browser-process-hrtime": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", + "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", + "license": "BSD-2-Clause" + }, + "node_modules/browserslist": { + "version": "4.23.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz", + "integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "caniuse-lite": "^1.0.30001587", + "electron-to-chromium": "^1.4.668", + "node-releases": "^2.0.14", + "update-browserslist-db": "^1.0.13" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "license": "Apache-2.0", + "dependencies": { + "node-int64": "^0.4.0" + } + }, + "node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "license": "MIT" + }, + "node_modules/builtin-modules": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", + "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/camel-case": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", + "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", + "license": "MIT", + "dependencies": { + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" + } + }, + "node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/caniuse-api": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", + "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001743", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001743.tgz", + "integrity": "sha512-e6Ojr7RV14Un7dz6ASD0aZDmQPT/A+eZU+nuTNfjqmRrmkmQlnTNWH0SKmqagx9PeW87UVqapSurtAXifmtdmw==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/case-sensitive-paths-webpack-plugin": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz", + "integrity": "sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/chalk-template": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/chalk-template/-/chalk-template-0.4.0.tgz", + "integrity": "sha512-/ghrgmhfY8RaSdeo43hNXxpoHAtxdbskUHjPpfqUWGttFgycUhYPGx3YZBCnUCvOa7Doivn1IZec3DEGFoMgLg==", + "license": "MIT", + "dependencies": { + "chalk": "^4.1.2" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/chalk-template?sponsor=1" + } + }, + "node_modules/chalk-template/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/check-types": { + "version": "11.2.3", + "resolved": "https://registry.npmjs.org/check-types/-/check-types-11.2.3.tgz", + "integrity": "sha512-+67P1GkJRaxQD6PKK0Et9DhwQB+vGg3PM5+aavopCpZT1lj9jeqfvpgTLAWErNj8qApkkmXlu/Ug74kmhagkXg==", + "license": "MIT" + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "license": "MIT", + "engines": { + "node": ">=6.0" + } + }, + "node_modules/ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cjs-module-lexer": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz", + "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==", + "license": "MIT" + }, + "node_modules/classnames": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.5.1.tgz", + "integrity": "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==", + "license": "MIT" + }, + "node_modules/clean-css": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.3.tgz", + "integrity": "sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==", + "license": "MIT", + "dependencies": { + "source-map": "~0.6.0" + }, + "engines": { + "node": ">= 10.0" + } + }, + "node_modules/clean-css/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cli-boxes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz", + "integrity": "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/clipboardy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/clipboardy/-/clipboardy-3.0.0.tgz", + "integrity": "sha512-Su+uU5sr1jkUy1sGRpLKjKrvEOVXgSgiSInwa/qeID6aJ07yh+5NWc3h2QfjHjBnfX4LhtFcuAWKUsJ3r+fjbg==", + "license": "MIT", + "dependencies": { + "arch": "^2.2.0", + "execa": "^5.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/clsx": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "license": "MIT", + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/coa": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", + "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", + "license": "MIT", + "dependencies": { + "@types/q": "^1.5.1", + "chalk": "^2.4.1", + "q": "^1.1.2" + }, + "engines": { + "node": ">= 4.0" + } + }, + "node_modules/coa/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/coa/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/coa/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/coa/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "license": "MIT" + }, + "node_modules/coa/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/coa/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/coa/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/collect-v8-coverage": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", + "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", + "license": "MIT" + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" + }, + "node_modules/color2k": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/color2k/-/color2k-2.0.3.tgz", + "integrity": "sha512-zW190nQTIoXcGCaU08DvVNFTmQhUpnJfVuAKfWqUQkflXKpaDdpaYoM0iluLS9lgJNHyBF58KKA2FBEwkD7wog==", + "license": "MIT" + }, + "node_modules/colord": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", + "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", + "license": "MIT" + }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "license": "MIT" + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", + "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/common-path-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz", + "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==", + "license": "ISC" + }, + "node_modules/common-tags": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", + "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==", + "license": "MIT", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", + "license": "MIT" + }, + "node_modules/compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "license": "MIT", + "dependencies": { + "mime-db": ">= 1.43.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/compression": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.8.1.tgz", + "integrity": "sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w==", + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "compressible": "~2.0.18", + "debug": "2.6.9", + "negotiator": "~0.6.4", + "on-headers": "~1.1.0", + "safe-buffer": "5.2.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/compression/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/compression/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/compression/node_modules/negotiator": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", + "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/compute-gcd": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/compute-gcd/-/compute-gcd-1.2.1.tgz", + "integrity": "sha512-TwMbxBNz0l71+8Sc4czv13h4kEqnchV9igQZBi6QUaz09dnz13juGnnaWWJTRsP3brxOoxeB4SA2WELLw1hCtg==", + "dependencies": { + "validate.io-array": "^1.0.3", + "validate.io-function": "^1.0.2", + "validate.io-integer-array": "^1.0.0" + } + }, + "node_modules/compute-lcm": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/compute-lcm/-/compute-lcm-1.1.2.tgz", + "integrity": "sha512-OFNPdQAXnQhDSKioX8/XYT6sdUlXwpeMjfd6ApxMJfyZ4GxmLR1xvMERctlYhlHwIiz6CSpBc2+qYKjHGZw4TQ==", + "dependencies": { + "compute-gcd": "^1.2.1", + "validate.io-array": "^1.0.3", + "validate.io-function": "^1.0.2", + "validate.io-integer-array": "^1.0.0" + } + }, + "node_modules/compute-scroll-into-view": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/compute-scroll-into-view/-/compute-scroll-into-view-3.0.3.tgz", + "integrity": "sha512-nadqwNxghAGTamwIqQSG433W6OADZx2vCo3UXHNrzTRHK/htu+7+L0zhjEoaeaQVNAi3YgqWDv8+tzf0hRfR+A==", + "license": "MIT" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "license": "MIT" + }, + "node_modules/confusing-browser-globals": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz", + "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==", + "license": "MIT" + }, + "node_modules/connect-history-api-fallback": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", + "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "license": "MIT", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "license": "MIT" + }, + "node_modules/cookie": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "license": "MIT" + }, + "node_modules/copy-to-clipboard": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/copy-to-clipboard/-/copy-to-clipboard-3.3.3.tgz", + "integrity": "sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==", + "license": "MIT", + "dependencies": { + "toggle-selection": "^1.0.6" + } + }, + "node_modules/core-js": { + "version": "2.6.12", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", + "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==", + "hasInstallScript": true, + "license": "MIT" + }, + "node_modules/core-js-compat": { + "version": "3.36.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.36.0.tgz", + "integrity": "sha512-iV9Pd/PsgjNWBXeq8XRtWVSgz2tKAfhfvBs7qxYty+RlRd+OCksaWmOnc4JKrTc1cToXL1N0s3l/vwlxPtdElw==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.22.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-js-pure": { + "version": "3.36.0", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.36.0.tgz", + "integrity": "sha512-cN28qmhRNgbMZZMc/RFu5w8pK9VJzpb2rJVR/lHuZJKwmXnoWOpXmMkxqBB514igkp1Hu8WGROsiOAzUcKdHOQ==", + "hasInstallScript": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "license": "MIT" + }, + "node_modules/cosmiconfig": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", + "license": "MIT", + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/crypto-js": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.2.0.tgz", + "integrity": "sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==", + "license": "MIT" + }, + "node_modules/crypto-random-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/css-blank-pseudo": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-3.0.3.tgz", + "integrity": "sha512-VS90XWtsHGqoM0t4KpH053c4ehxZ2E6HtGI7x68YFV0pTo/QmkV/YFA+NnlvK8guxZVNWGQhVNJGC39Q8XF4OQ==", + "license": "CC0-1.0", + "dependencies": { + "postcss-selector-parser": "^6.0.9" + }, + "bin": { + "css-blank-pseudo": "dist/cli.cjs" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/css-box-model": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/css-box-model/-/css-box-model-1.2.1.tgz", + "integrity": "sha512-a7Vr4Q/kd/aw96bnJG332W9V9LkJO69JRcaCYDUqjp6/z0w6VcZjgAcTbgFxEPfBgdnAwlh3iwu+hLopa+flJw==", + "license": "MIT", + "dependencies": { + "tiny-invariant": "^1.0.6" + } + }, + "node_modules/css-declaration-sorter": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.4.1.tgz", + "integrity": "sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g==", + "license": "ISC", + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.0.9" + } + }, + "node_modules/css-has-pseudo": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-3.0.4.tgz", + "integrity": "sha512-Vse0xpR1K9MNlp2j5w1pgWIJtm1a8qS0JwS9goFYcImjlHEmywP9VUF05aGBXzGpDJF86QXk4L0ypBmwPhGArw==", + "license": "CC0-1.0", + "dependencies": { + "postcss-selector-parser": "^6.0.9" + }, + "bin": { + "css-has-pseudo": "dist/cli.cjs" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/css-loader": { + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.10.0.tgz", + "integrity": "sha512-LTSA/jWbwdMlk+rhmElbDR2vbtQoTBPr7fkJE+mxrHj+7ru0hUmHafDRzWIjIHTwpitWVaqY2/UWGRca3yUgRw==", + "license": "MIT", + "dependencies": { + "icss-utils": "^5.1.0", + "postcss": "^8.4.33", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.4", + "postcss-modules-scope": "^3.1.1", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.2.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "@rspack/core": "0.x || 1.x", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "webpack": { + "optional": true + } + } + }, + "node_modules/css-loader/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/css-loader/node_modules/semver": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/css-loader/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "license": "ISC" + }, + "node_modules/css-minimizer-webpack-plugin": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-3.4.1.tgz", + "integrity": "sha512-1u6D71zeIfgngN2XNRJefc/hY7Ybsxd74Jm4qngIXyUEk7fss3VUzuHxLAq/R8NAba4QU9OUSaMZlbpRc7bM4Q==", + "license": "MIT", + "dependencies": { + "cssnano": "^5.0.6", + "jest-worker": "^27.0.2", + "postcss": "^8.3.5", + "schema-utils": "^4.0.0", + "serialize-javascript": "^6.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "@parcel/css": { + "optional": true + }, + "clean-css": { + "optional": true + }, + "csso": { + "optional": true + }, + "esbuild": { + "optional": true + } + } + }, + "node_modules/css-minimizer-webpack-plugin/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/css-minimizer-webpack-plugin/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/css-minimizer-webpack-plugin/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "license": "MIT" + }, + "node_modules/css-minimizer-webpack-plugin/node_modules/schema-utils": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/css-minimizer-webpack-plugin/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/css-prefers-color-scheme": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-6.0.3.tgz", + "integrity": "sha512-4BqMbZksRkJQx2zAjrokiGMd07RqOa2IxIrrN10lyBe9xhn9DEvjUK79J6jkeiv9D9hQFXKb6g1jwU62jziJZA==", + "license": "CC0-1.0", + "bin": { + "css-prefers-color-scheme": "dist/cli.cjs" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/css-select": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-select-base-adapter": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", + "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==", + "license": "MIT" + }, + "node_modules/css-tree": { + "version": "1.0.0-alpha.37", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", + "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", + "license": "MIT", + "dependencies": { + "mdn-data": "2.0.4", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/css-tree/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css.escape": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz", + "integrity": "sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==", + "license": "MIT" + }, + "node_modules/cssdb": { + "version": "7.10.0", + "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-7.10.0.tgz", + "integrity": "sha512-yGZ5tmA57gWh/uvdQBHs45wwFY0IBh3ypABk5sEubPBPSzXzkNgsWReqx7gdx6uhC+QoFBe+V8JwBB9/hQ6cIA==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + } + ], + "license": "CC0-1.0" + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cssnano": { + "version": "5.1.15", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.1.15.tgz", + "integrity": "sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw==", + "license": "MIT", + "dependencies": { + "cssnano-preset-default": "^5.2.14", + "lilconfig": "^2.0.3", + "yaml": "^1.10.2" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/cssnano" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/cssnano-preset-default": { + "version": "5.2.14", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.14.tgz", + "integrity": "sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==", + "license": "MIT", + "dependencies": { + "css-declaration-sorter": "^6.3.1", + "cssnano-utils": "^3.1.0", + "postcss-calc": "^8.2.3", + "postcss-colormin": "^5.3.1", + "postcss-convert-values": "^5.1.3", + "postcss-discard-comments": "^5.1.2", + "postcss-discard-duplicates": "^5.1.0", + "postcss-discard-empty": "^5.1.1", + "postcss-discard-overridden": "^5.1.0", + "postcss-merge-longhand": "^5.1.7", + "postcss-merge-rules": "^5.1.4", + "postcss-minify-font-values": "^5.1.0", + "postcss-minify-gradients": "^5.1.1", + "postcss-minify-params": "^5.1.4", + "postcss-minify-selectors": "^5.2.1", + "postcss-normalize-charset": "^5.1.0", + "postcss-normalize-display-values": "^5.1.0", + "postcss-normalize-positions": "^5.1.1", + "postcss-normalize-repeat-style": "^5.1.1", + "postcss-normalize-string": "^5.1.0", + "postcss-normalize-timing-functions": "^5.1.0", + "postcss-normalize-unicode": "^5.1.1", + "postcss-normalize-url": "^5.1.0", + "postcss-normalize-whitespace": "^5.1.1", + "postcss-ordered-values": "^5.1.3", + "postcss-reduce-initial": "^5.1.2", + "postcss-reduce-transforms": "^5.1.0", + "postcss-svgo": "^5.1.0", + "postcss-unique-selectors": "^5.1.1" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/cssnano-utils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.1.0.tgz", + "integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==", + "license": "MIT", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/csso": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", + "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", + "license": "MIT", + "dependencies": { + "css-tree": "^1.1.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/csso/node_modules/css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "license": "MIT", + "dependencies": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/csso/node_modules/mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", + "license": "CC0-1.0" + }, + "node_modules/csso/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cssom": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", + "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", + "license": "MIT" + }, + "node_modules/cssstyle": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", + "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "license": "MIT", + "dependencies": { + "cssom": "~0.3.6" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cssstyle/node_modules/cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", + "license": "MIT" + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "license": "MIT" + }, + "node_modules/d3-array": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz", + "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==", + "license": "ISC", + "dependencies": { + "internmap": "1 - 2" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-color": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", + "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-ease": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz", + "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-format": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz", + "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-interpolate": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", + "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", + "license": "ISC", + "dependencies": { + "d3-color": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-path": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz", + "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-scale": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz", + "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==", + "license": "ISC", + "dependencies": { + "d3-array": "2.10.0 - 3", + "d3-format": "1 - 3", + "d3-interpolate": "1.2.0 - 3", + "d3-time": "2.1.1 - 3", + "d3-time-format": "2 - 4" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-shape": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz", + "integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==", + "license": "ISC", + "dependencies": { + "d3-path": "^3.1.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-time": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz", + "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==", + "license": "ISC", + "dependencies": { + "d3-array": "2 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-time-format": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz", + "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==", + "license": "ISC", + "dependencies": { + "d3-time": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-timer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", + "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/damerau-levenshtein": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", + "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", + "license": "BSD-2-Clause" + }, + "node_modules/data-urls": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", + "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", + "license": "MIT", + "dependencies": { + "abab": "^2.0.3", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/date-arithmetic": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/date-arithmetic/-/date-arithmetic-4.1.0.tgz", + "integrity": "sha512-QWxYLR5P/6GStZcdem+V1xoto6DMadYWpMXU82ES3/RfR3Wdwr3D0+be7mgOJ+Ov0G9D5Dmb9T17sNLQYj9XOg==", + "license": "MIT" + }, + "node_modules/date-fns": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-4.1.0.tgz", + "integrity": "sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/kossnocorp" + } + }, + "node_modules/dayjs": { + "version": "1.11.13", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.13.tgz", + "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==", + "license": "MIT" + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decimal.js": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", + "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==", + "license": "MIT" + }, + "node_modules/decimal.js-light": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/decimal.js-light/-/decimal.js-light-2.5.1.tgz", + "integrity": "sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg==", + "license": "MIT" + }, + "node_modules/dedent": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", + "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", + "license": "MIT" + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "license": "MIT", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "license": "MIT" + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/default-gateway": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", + "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", + "license": "BSD-2-Clause", + "dependencies": { + "execa": "^5.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "license": "MIT", + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "license": "MIT", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "license": "MIT" + }, + "node_modules/detect-node-es": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz", + "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==", + "license": "MIT" + }, + "node_modules/detect-port-alt": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/detect-port-alt/-/detect-port-alt-1.1.6.tgz", + "integrity": "sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==", + "license": "MIT", + "dependencies": { + "address": "^1.0.1", + "debug": "^2.6.0" + }, + "bin": { + "detect": "bin/detect-port", + "detect-port": "bin/detect-port" + }, + "engines": { + "node": ">= 4.2.1" + } + }, + "node_modules/detect-port-alt/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/detect-port-alt/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", + "license": "Apache-2.0" + }, + "node_modules/diff-sequences": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-26.6.2.tgz", + "integrity": "sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q==", + "license": "MIT", + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "license": "MIT", + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "license": "MIT" + }, + "node_modules/dns-packet": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", + "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", + "license": "MIT", + "dependencies": { + "@leichtgewicht/ip-codec": "^2.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/dom-accessibility-api": { + "version": "0.5.16", + "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", + "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==", + "license": "MIT" + }, + "node_modules/dom-converter": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", + "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", + "license": "MIT", + "dependencies": { + "utila": "~0.4" + } + }, + "node_modules/dom-helpers": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", + "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.8.7", + "csstype": "^3.0.2" + } + }, + "node_modules/dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "license": "MIT", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "BSD-2-Clause" + }, + "node_modules/domexception": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", + "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", + "license": "MIT", + "dependencies": { + "webidl-conversions": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/domexception/node_modules/webidl-conversions": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", + "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=8" + } + }, + "node_modules/domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "license": "MIT", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/dotenv": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", + "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=10" + } + }, + "node_modules/dotenv-expand": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", + "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==", + "license": "BSD-2-Clause" + }, + "node_modules/duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", + "license": "MIT" + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "license": "MIT" + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "license": "MIT" + }, + "node_modules/ejs": { + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.9.tgz", + "integrity": "sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==", + "license": "Apache-2.0", + "dependencies": { + "jake": "^10.8.5" + }, + "bin": { + "ejs": "bin/cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.4.671", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.671.tgz", + "integrity": "sha512-UUlE+/rWbydmp+FW8xlnnTA5WNA0ZZd2XL8CuMS72rh+k4y1f8+z6yk3UQhEwqHQWj6IBdL78DwWOdGMvYfQyA==", + "license": "ISC" + }, + "node_modules/emittery": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz", + "integrity": "sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" + } + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "license": "MIT" + }, + "node_modules/emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.15.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", + "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "license": "BSD-2-Clause", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/error-stack-parser": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz", + "integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==", + "license": "MIT", + "dependencies": { + "stackframe": "^1.3.4" + } + }, + "node_modules/es-abstract": { + "version": "1.22.4", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.4.tgz", + "integrity": "sha512-vZYJlk2u6qHYxBOTjAeg7qUxHdNfih64Uu2J8QqWgXZ2cri0ZpJAkzDUK/q593+mvKwlxyaxr6F1Q+3LKoQRgg==", + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "arraybuffer.prototype.slice": "^1.0.3", + "available-typed-arrays": "^1.0.6", + "call-bind": "^1.0.7", + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "es-set-tostringtag": "^2.0.2", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.4", + "get-symbol-description": "^1.0.2", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.1", + "internal-slot": "^1.0.7", + "is-array-buffer": "^3.0.4", + "is-callable": "^1.2.7", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.13", + "is-weakref": "^1.0.2", + "object-inspect": "^1.13.1", + "object-keys": "^1.1.1", + "object.assign": "^4.1.5", + "regexp.prototype.flags": "^1.5.2", + "safe-array-concat": "^1.1.0", + "safe-regex-test": "^1.0.3", + "string.prototype.trim": "^1.2.8", + "string.prototype.trimend": "^1.0.7", + "string.prototype.trimstart": "^1.0.7", + "typed-array-buffer": "^1.0.1", + "typed-array-byte-length": "^1.0.0", + "typed-array-byte-offset": "^1.0.0", + "typed-array-length": "^1.0.4", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-array-method-boxes-properly": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", + "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==", + "license": "MIT" + }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-iterator-helpers": { + "version": "1.0.17", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.17.tgz", + "integrity": "sha512-lh7BsUqelv4KUbR5a/ZTaGGIMLCjPGPqJ6q+Oq24YP0RdyptX1uzm4vvaqzk7Zx3bpl/76YLTTDj9L7uYQ92oQ==", + "license": "MIT", + "dependencies": { + "asynciterator.prototype": "^1.0.0", + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.4", + "es-errors": "^1.3.0", + "es-set-tostringtag": "^2.0.2", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "globalthis": "^1.0.3", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.7", + "iterator.prototype": "^1.1.2", + "safe-array-concat": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-module-lexer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.4.1.tgz", + "integrity": "sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w==", + "license": "MIT" + }, + "node_modules/es-set-tostringtag": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz", + "integrity": "sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==", + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.2", + "has-tostringtag": "^1.0.0", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", + "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", + "license": "MIT", + "dependencies": { + "hasown": "^2.0.0" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "license": "MIT", + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-toolkit": { + "version": "1.39.10", + "resolved": "https://registry.npmjs.org/es-toolkit/-/es-toolkit-1.39.10.tgz", + "integrity": "sha512-E0iGnTtbDhkeczB0T+mxmoVlT4YNweEKBLq7oaU4p11mecdsZpNWOglI4895Vh4usbQ+LsJiuLuI2L0Vdmfm2w==", + "license": "MIT", + "workspaces": [ + "docs", + "benchmarks" + ] + }, + "node_modules/escalade": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "license": "MIT" + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/escodegen": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", + "license": "BSD-2-Clause", + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=6.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/escodegen/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint": { + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.56.0.tgz", + "integrity": "sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==", + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.56.0", + "@humanwhocodes/config-array": "^0.11.13", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-config-airbnb": { + "version": "18.2.1", + "resolved": "https://registry.npmjs.org/eslint-config-airbnb/-/eslint-config-airbnb-18.2.1.tgz", + "integrity": "sha512-glZNDEZ36VdlZWoxn/bUR1r/sdFKPd1mHPbqUtkctgNG4yT2DLLtJ3D+yCV+jzZCc2V1nBVkmdknOJBZ5Hc0fg==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-config-airbnb-base": "^14.2.1", + "object.assign": "^4.1.2", + "object.entries": "^1.1.2" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "eslint": "^5.16.0 || ^6.8.0 || ^7.2.0", + "eslint-plugin-import": "^2.22.1", + "eslint-plugin-jsx-a11y": "^6.4.1", + "eslint-plugin-react": "^7.21.5", + "eslint-plugin-react-hooks": "^4 || ^3 || ^2.3.0 || ^1.7.0" + } + }, + "node_modules/eslint-config-airbnb-base": { + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-14.2.1.tgz", + "integrity": "sha512-GOrQyDtVEc1Xy20U7vsB2yAoB4nBlfH5HZJeatRXHleO+OS5Ot+MWij4Dpltw4/DyIkqUfqz1epfhVR5XWWQPA==", + "dev": true, + "license": "MIT", + "dependencies": { + "confusing-browser-globals": "^1.0.10", + "object.assign": "^4.1.2", + "object.entries": "^1.1.2" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "eslint": "^5.16.0 || ^6.8.0 || ^7.2.0", + "eslint-plugin-import": "^2.22.1" + } + }, + "node_modules/eslint-config-airbnb-typescript": { + "version": "12.3.1", + "resolved": "https://registry.npmjs.org/eslint-config-airbnb-typescript/-/eslint-config-airbnb-typescript-12.3.1.tgz", + "integrity": "sha512-ql/Pe6/hppYuRp4m3iPaHJqkBB7dgeEmGPQ6X0UNmrQOfTF+dXw29/ZjU2kQ6RDoLxaxOA+Xqv07Vbef6oVTWw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/parser": "^4.4.1", + "eslint-config-airbnb": "^18.2.0", + "eslint-config-airbnb-base": "^14.2.0" + } + }, + "node_modules/eslint-config-airbnb-typescript/node_modules/@typescript-eslint/parser": { + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.33.0.tgz", + "integrity": "sha512-ZohdsbXadjGBSK0/r+d87X0SBmKzOq4/S5nzK6SBgJspFo9/CUDJ7hjayuze+JK7CZQLDMroqytp7pOcFKTxZA==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/scope-manager": "4.33.0", + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/typescript-estree": "4.33.0", + "debug": "^4.3.1" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/eslint-config-airbnb-typescript/node_modules/@typescript-eslint/scope-manager": { + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.33.0.tgz", + "integrity": "sha512-5IfJHpgTsTZuONKbODctL4kKuQje/bzBRkwHE8UOZ4f89Zeddg+EGZs8PD8NcN4LdM3ygHWYB3ukPAYjvl/qbQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/visitor-keys": "4.33.0" + }, + "engines": { + "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/eslint-config-airbnb-typescript/node_modules/@typescript-eslint/types": { + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.33.0.tgz", + "integrity": "sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/eslint-config-airbnb-typescript/node_modules/@typescript-eslint/typescript-estree": { + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.33.0.tgz", + "integrity": "sha512-rkWRY1MPFzjwnEVHsxGemDzqqddw2QbTJlICPD9p9I9LfsO8fdmfQPOX3uKfUaGRDFJbfrtm/sXhVXN4E+bzCA==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/visitor-keys": "4.33.0", + "debug": "^4.3.1", + "globby": "^11.0.3", + "is-glob": "^4.0.1", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/eslint-config-airbnb-typescript/node_modules/@typescript-eslint/visitor-keys": { + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.33.0.tgz", + "integrity": "sha512-uqi/2aSz9g2ftcHWf8uLPJA70rUv6yuMW5Bohw+bwcuzaxQIHaKFZCKGoGXIrc9vkTJ3+0txM73K0Hq3d5wgIg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "4.33.0", + "eslint-visitor-keys": "^2.0.0" + }, + "engines": { + "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/eslint-config-airbnb-typescript/node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint-config-airbnb-typescript/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint-config-airbnb-typescript/node_modules/semver": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint-config-airbnb-typescript/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "license": "ISC" + }, + "node_modules/eslint-config-prettier": { + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.10.0.tgz", + "integrity": "sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg==", + "dev": true, + "license": "MIT", + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-config-react-app": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/eslint-config-react-app/-/eslint-config-react-app-7.0.1.tgz", + "integrity": "sha512-K6rNzvkIeHaTd8m/QEh1Zko0KI7BACWkkneSs6s9cKZC/J27X3eZR6Upt1jkmZ/4FK+XUOPPxMEN7+lbUXfSlA==", + "license": "MIT", + "dependencies": { + "@babel/core": "^7.16.0", + "@babel/eslint-parser": "^7.16.3", + "@rushstack/eslint-patch": "^1.1.0", + "@typescript-eslint/eslint-plugin": "^5.5.0", + "@typescript-eslint/parser": "^5.5.0", + "babel-preset-react-app": "^10.0.1", + "confusing-browser-globals": "^1.0.11", + "eslint-plugin-flowtype": "^8.0.3", + "eslint-plugin-import": "^2.25.3", + "eslint-plugin-jest": "^25.3.0", + "eslint-plugin-jsx-a11y": "^6.5.1", + "eslint-plugin-react": "^7.27.1", + "eslint-plugin-react-hooks": "^4.3.0", + "eslint-plugin-testing-library": "^5.0.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "eslint": "^8.0.0" + } + }, + "node_modules/eslint-import-resolver-node": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", + "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", + "license": "MIT", + "dependencies": { + "debug": "^3.2.7", + "is-core-module": "^2.13.0", + "resolve": "^1.22.4" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-module-utils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz", + "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==", + "license": "MIT", + "dependencies": { + "debug": "^3.2.7" + }, + "engines": { + "node": ">=4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + } + }, + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-flowtype": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-flowtype/-/eslint-plugin-flowtype-8.0.3.tgz", + "integrity": "sha512-dX8l6qUL6O+fYPtpNRideCFSpmWOUVx5QcaGLVqe/vlDiBSe4vYljDWDETwnyFzpl7By/WVIu6rcrniCgH9BqQ==", + "license": "BSD-3-Clause", + "dependencies": { + "lodash": "^4.17.21", + "string-natural-compare": "^3.0.1" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "@babel/plugin-syntax-flow": "^7.14.5", + "@babel/plugin-transform-react-jsx": "^7.14.9", + "eslint": "^8.1.0" + } + }, + "node_modules/eslint-plugin-import": { + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz", + "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==", + "license": "MIT", + "dependencies": { + "array-includes": "^3.1.7", + "array.prototype.findlastindex": "^1.2.3", + "array.prototype.flat": "^1.3.2", + "array.prototype.flatmap": "^1.3.2", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.9", + "eslint-module-utils": "^2.8.0", + "hasown": "^2.0.0", + "is-core-module": "^2.13.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.7", + "object.groupby": "^1.0.1", + "object.values": "^1.1.7", + "semver": "^6.3.1", + "tsconfig-paths": "^3.15.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" + } + }, + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-jest": { + "version": "25.7.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-25.7.0.tgz", + "integrity": "sha512-PWLUEXeeF7C9QGKqvdSbzLOiLTx+bno7/HC9eefePfEb257QFHg7ye3dh80AZVkaa/RQsBB1Q/ORQvg2X7F0NQ==", + "license": "MIT", + "dependencies": { + "@typescript-eslint/experimental-utils": "^5.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + }, + "peerDependencies": { + "@typescript-eslint/eslint-plugin": "^4.0.0 || ^5.0.0", + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "@typescript-eslint/eslint-plugin": { + "optional": true + }, + "jest": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-jsx-a11y": { + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.8.0.tgz", + "integrity": "sha512-Hdh937BS3KdwwbBaKd5+PLCOmYY6U4f2h9Z2ktwtNKvIdIEu137rjYbcb9ApSbVJfWxANNuiKTD/9tOKjK9qOA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.23.2", + "aria-query": "^5.3.0", + "array-includes": "^3.1.7", + "array.prototype.flatmap": "^1.3.2", + "ast-types-flow": "^0.0.8", + "axe-core": "=4.7.0", + "axobject-query": "^3.2.1", + "damerau-levenshtein": "^1.0.8", + "emoji-regex": "^9.2.2", + "es-iterator-helpers": "^1.0.15", + "hasown": "^2.0.0", + "jsx-ast-utils": "^3.3.5", + "language-tags": "^1.0.9", + "minimatch": "^3.1.2", + "object.entries": "^1.1.7", + "object.fromentries": "^2.0.7" + }, + "engines": { + "node": ">=4.0" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + } + }, + "node_modules/eslint-plugin-prettier": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.4.1.tgz", + "integrity": "sha512-htg25EUYUeIhKHXjOinK4BgCcDwtLHjqaxCDsMy5nbnUMkKFvIhMVCp+5GFUXQ4Nr8lBsPqtGAqBenbpFqAA2g==", + "dev": true, + "license": "MIT", + "dependencies": { + "prettier-linter-helpers": "^1.0.0" + }, + "engines": { + "node": ">=6.0.0" + }, + "peerDependencies": { + "eslint": ">=5.0.0", + "prettier": ">=1.13.0" + }, + "peerDependenciesMeta": { + "eslint-config-prettier": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-react": { + "version": "7.33.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.33.2.tgz", + "integrity": "sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==", + "license": "MIT", + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.flatmap": "^1.3.1", + "array.prototype.tosorted": "^1.1.1", + "doctrine": "^2.1.0", + "es-iterator-helpers": "^1.0.12", + "estraverse": "^5.3.0", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.6", + "object.fromentries": "^2.0.6", + "object.hasown": "^1.1.2", + "object.values": "^1.1.6", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.4", + "semver": "^6.3.1", + "string.prototype.matchall": "^4.0.8" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", + "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" + } + }, + "node_modules/eslint-plugin-react/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-react/node_modules/resolve": { + "version": "2.0.0-next.5", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", + "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", + "license": "MIT", + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/eslint-plugin-testing-library": { + "version": "5.11.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-testing-library/-/eslint-plugin-testing-library-5.11.1.tgz", + "integrity": "sha512-5eX9e1Kc2PqVRed3taaLnAAqPZGEX75C+M/rXzUAI3wIg/ZxzUm1OVAwfe/O+vE+6YXOLetSe9g5GKD2ecXipw==", + "license": "MIT", + "dependencies": { + "@typescript-eslint/utils": "^5.58.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0", + "npm": ">=6" + }, + "peerDependencies": { + "eslint": "^7.5.0 || ^8.0.0" + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/eslint-scope/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-webpack-plugin": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/eslint-webpack-plugin/-/eslint-webpack-plugin-3.2.0.tgz", + "integrity": "sha512-avrKcGncpPbPSUHX6B3stNGzkKFto3eL+DKM4+VyMrVnhPc3vRczVlCq3uhuFOdRvDHTVXuzwk1ZKUrqDQHQ9w==", + "license": "MIT", + "dependencies": { + "@types/eslint": "^7.29.0 || ^8.4.1", + "jest-worker": "^28.0.2", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0", + "webpack": "^5.0.0" + } + }, + "node_modules/eslint-webpack-plugin/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/eslint-webpack-plugin/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/eslint-webpack-plugin/node_modules/jest-worker": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.3.tgz", + "integrity": "sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g==", + "license": "MIT", + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/eslint-webpack-plugin/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "license": "MIT" + }, + "node_modules/eslint-webpack-plugin/node_modules/schema-utils": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/eslint-webpack-plugin/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/eslint/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/eslint/node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estree-walker": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", + "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", + "license": "MIT" + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "license": "MIT" + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "license": "MIT", + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/expect": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/expect/-/expect-27.5.1.tgz", + "integrity": "sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==", + "license": "MIT", + "dependencies": { + "@jest/types": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/expect/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/expect/node_modules/@types/yargs": { + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", + "license": "MIT", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/expect/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/expect/node_modules/jest-get-type": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", + "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", + "license": "MIT", + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/express": { + "version": "4.19.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", + "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", + "license": "MIT", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.2", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.6.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/extract-files": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/extract-files/-/extract-files-11.0.0.tgz", + "integrity": "sha512-FuoE1qtbJ4bBVvv94CC7s0oTnKUGvQs+Rjf1L2SJFfS+HTVVjhPFtehPdQ0JiGPqVNfSSZvL5yzHHQq2Z4WNhQ==", + "license": "MIT", + "engines": { + "node": "^12.20 || >= 14.13" + }, + "funding": { + "url": "https://github.com/sponsors/jaydenseric" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "license": "MIT" + }, + "node_modules/fast-diff": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", + "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "license": "MIT" + }, + "node_modules/fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "license": "Apache-2.0", + "dependencies": { + "websocket-driver": ">=0.5.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/fb-watchman": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", + "license": "Apache-2.0", + "dependencies": { + "bser": "2.1.1" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "license": "MIT", + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/file-loader": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", + "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", + "license": "MIT", + "dependencies": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/filelist": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", + "license": "Apache-2.0", + "dependencies": { + "minimatch": "^5.0.1" + } + }, + "node_modules/filelist/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/filelist/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/filesize": { + "version": "8.0.7", + "resolved": "https://registry.npmjs.org/filesize/-/filesize-8.0.7.tgz", + "integrity": "sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ==", + "license": "BSD-3-Clause", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "license": "MIT", + "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" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "license": "MIT", + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" + } + }, + "node_modules/find-root": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", + "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==", + "license": "MIT" + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.2.9", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", + "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", + "license": "ISC" + }, + "node_modules/focus-lock": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/focus-lock/-/focus-lock-1.3.6.tgz", + "integrity": "sha512-Ik/6OCk9RQQ0T5Xw+hKNLWrjSMtv51dD4GRmJjbD5a58TIEpI5a5iXagKVl3Z5UuyslMCA8Xwnu76jQob62Yhg==", + "license": "MIT", + "dependencies": { + "tslib": "^2.0.3" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/follow-redirects": { + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", + "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "license": "MIT", + "dependencies": { + "is-callable": "^1.1.3" + } + }, + "node_modules/foreground-child": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/foreground-child/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/fork-ts-checker-webpack-plugin": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.3.tgz", + "integrity": "sha512-SbH/l9ikmMWycd5puHJKTkZJKddF4iRLyW3DeZ08HTI7NGyLS38MXd/KGgeWumQO7YNQbW2u/NtPT2YowbPaGQ==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.8.3", + "@types/json-schema": "^7.0.5", + "chalk": "^4.1.0", + "chokidar": "^3.4.2", + "cosmiconfig": "^6.0.0", + "deepmerge": "^4.2.2", + "fs-extra": "^9.0.0", + "glob": "^7.1.6", + "memfs": "^3.1.2", + "minimatch": "^3.0.4", + "schema-utils": "2.7.0", + "semver": "^7.3.2", + "tapable": "^1.0.0" + }, + "engines": { + "node": ">=10", + "yarn": ">=1.0.0" + }, + "peerDependencies": { + "eslint": ">= 6", + "typescript": ">= 2.7", + "vue-template-compiler": "*", + "webpack": ">= 4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + }, + "vue-template-compiler": { + "optional": true + } + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/cosmiconfig": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", + "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", + "license": "MIT", + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.7.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "license": "MIT", + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/schema-utils": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", + "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.4", + "ajv": "^6.12.2", + "ajv-keywords": "^3.4.1" + }, + "engines": { + "node": ">= 8.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/semver": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/tapable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "license": "ISC" + }, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fraction.js": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", + "license": "MIT", + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://github.com/sponsors/rawify" + } + }, + "node_modules/framer-motion": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-6.5.1.tgz", + "integrity": "sha512-o1BGqqposwi7cgDrtg0dNONhkmPsUFDaLcKXigzuTFC5x58mE8iyTazxSudFzmT6MEyJKfjjU8ItoMe3W+3fiw==", + "license": "MIT", + "dependencies": { + "@motionone/dom": "10.12.0", + "framesync": "6.0.1", + "hey-listen": "^1.0.8", + "popmotion": "11.0.3", + "style-value-types": "5.0.0", + "tslib": "^2.1.0" + }, + "optionalDependencies": { + "@emotion/is-prop-valid": "^0.8.2" + }, + "peerDependencies": { + "react": ">=16.8 || ^17.0.0 || ^18.0.0", + "react-dom": ">=16.8 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/framer-motion/node_modules/@emotion/is-prop-valid": { + "version": "0.8.8", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-0.8.8.tgz", + "integrity": "sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA==", + "license": "MIT", + "optional": true, + "dependencies": { + "@emotion/memoize": "0.7.4" + } + }, + "node_modules/framer-motion/node_modules/@emotion/memoize": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.4.tgz", + "integrity": "sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==", + "license": "MIT", + "optional": true + }, + "node_modules/framer-motion/node_modules/framesync": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/framesync/-/framesync-6.0.1.tgz", + "integrity": "sha512-fUY88kXvGiIItgNC7wcTOl0SNRCVXMKSWW2Yzfmn7EKNc+MpCzcz9DhdHcdjbrtN3c6R4H5dTY2jiCpPdysEjA==", + "license": "MIT", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/framesync": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/framesync/-/framesync-6.1.2.tgz", + "integrity": "sha512-jBTqhX6KaQVDyus8muwZbBeGGP0XgujBRbQ7gM7BRdS3CadCZIHiawyzYLnafYcvZIh5j8WE7cxZKFn7dXhu9g==", + "license": "MIT", + "dependencies": { + "tslib": "2.4.0" + } + }, + "node_modules/framesync/node_modules/tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", + "license": "0BSD" + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/fs-monkey": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.5.tgz", + "integrity": "sha512-8uMbBjrhzW76TYgEV27Y5E//W2f/lTFmx78P2w19FZSxarhI/798APGQyuGCwmkNxgwGRhrLfvWyLBvNtuOmew==", + "license": "Unlicense" + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "license": "ISC" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function.prototype.name": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", + "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-nonce": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-nonce/-/get-nonce-1.0.1.tgz", + "integrity": "sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/get-own-enumerable-property-symbols": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", + "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==", + "license": "ISC" + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "license": "MIT", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-symbol-description": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", + "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "license": "BSD-2-Clause" + }, + "node_modules/global-modules": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", + "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", + "license": "MIT", + "dependencies": { + "global-prefix": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/global-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", + "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", + "license": "MIT", + "dependencies": { + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/global-prefix/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/globalize": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/globalize/-/globalize-0.1.1.tgz", + "integrity": "sha512-5e01v8eLGfuQSOvx2MsDMOWS0GFtCx1wPzQSmcHw4hkxFzrQDBO3Xwg/m8Hr/7qXMrHeOIE29qWVzyv06u1TZA==" + }, + "node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "license": "MIT", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "license": "MIT", + "dependencies": { + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "license": "MIT", + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "license": "ISC" + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "license": "MIT" + }, + "node_modules/graphql": { + "version": "15.8.0", + "resolved": "https://registry.npmjs.org/graphql/-/graphql-15.8.0.tgz", + "integrity": "sha512-5gghUc24tP9HRznNpV2+FIoq3xKkj5dTQqf4v0CpdPbFVwFkWoxOM+o+2OC9ZSvjEMTjfmG9QT+gcvggTwW1zw==", + "license": "MIT", + "engines": { + "node": ">= 10.x" + } + }, + "node_modules/graphql-tag": { + "version": "2.12.6", + "resolved": "https://registry.npmjs.org/graphql-tag/-/graphql-tag-2.12.6.tgz", + "integrity": "sha512-FdSNcu2QQcWnM2VNvSCCDCVS5PpPqpzgFT8+GXzqJuoDd0CBncxCY278u4mhRO7tMgo2JjgJA5aZ+nWSQ/Z+xg==", + "license": "MIT", + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "graphql": "^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" + } + }, + "node_modules/gzip-size": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", + "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", + "license": "MIT", + "dependencies": { + "duplexer": "^0.1.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/handle-thing": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", + "license": "MIT" + }, + "node_modules/harmony-reflect": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/harmony-reflect/-/harmony-reflect-1.6.2.tgz", + "integrity": "sha512-HIp/n38R9kQjDEziXyDTuW3vvoxxyxjxFzXLrBr18uB47GnSt+G9D29fqrpM5ZkspMcPICud3XsBJQ4Y2URg8g==", + "license": "(Apache-2.0 OR MPL-1.1)" + }, + "node_modules/has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.1.tgz", + "integrity": "sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "license": "MIT", + "bin": { + "he": "bin/he" + } + }, + "node_modules/hey-listen": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/hey-listen/-/hey-listen-1.0.8.tgz", + "integrity": "sha512-COpmrF2NOg4TBWUJ5UVyaCU2A88wEMkUPK4hNqyCkqHbxT92BbvfjoSozkAIIm6XhicGlJHhFdullInrdhwU8Q==", + "license": "MIT" + }, + "node_modules/hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "license": "BSD-3-Clause", + "dependencies": { + "react-is": "^16.7.0" + } + }, + "node_modules/hoist-non-react-statics/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "license": "MIT" + }, + "node_modules/hoopy": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/hoopy/-/hoopy-0.1.4.tgz", + "integrity": "sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ==", + "license": "MIT", + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + } + }, + "node_modules/hpack.js/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "license": "MIT" + }, + "node_modules/hpack.js/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/hpack.js/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/hpack.js/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/html-encoding-sniffer": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", + "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", + "license": "MIT", + "dependencies": { + "whatwg-encoding": "^1.0.5" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/html-entities": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.4.0.tgz", + "integrity": "sha512-igBTJcNNNhvZFRtm8uA6xMY6xYleeDwn3PeBCkDz7tHttv4F2hsDI2aPgNERWzvRcNYHNT3ymRaQzllmXj4YsQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/mdevils" + }, + { + "type": "patreon", + "url": "https://patreon.com/mdevils" + } + ], + "license": "MIT" + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "license": "MIT" + }, + "node_modules/html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", + "license": "MIT", + "dependencies": { + "camel-case": "^4.1.2", + "clean-css": "^5.2.2", + "commander": "^8.3.0", + "he": "^1.2.0", + "param-case": "^3.0.4", + "relateurl": "^0.2.7", + "terser": "^5.10.0" + }, + "bin": { + "html-minifier-terser": "cli.js" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/html-minifier-terser/node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, + "node_modules/html-webpack-plugin": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.6.0.tgz", + "integrity": "sha512-iwaY4wzbe48AfKLZ/Cc8k0L+FKG6oSNRaZ8x5A/T/IVDGyXcbHncM9TdDa93wn0FsSm82FhTKW7f3vS61thXAw==", + "license": "MIT", + "dependencies": { + "@types/html-minifier-terser": "^6.0.0", + "html-minifier-terser": "^6.0.2", + "lodash": "^4.17.21", + "pretty-error": "^4.0.0", + "tapable": "^2.0.0" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/html-webpack-plugin" + }, + "peerDependencies": { + "@rspack/core": "0.x || 1.x", + "webpack": "^5.20.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "webpack": { + "optional": true + } + } + }, + "node_modules/htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "MIT", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" + } + }, + "node_modules/http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", + "license": "MIT" + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "license": "MIT", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-parser-js": { + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", + "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==", + "license": "MIT" + }, + "node_modules/http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "license": "MIT", + "dependencies": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "license": "MIT", + "dependencies": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/http-proxy-middleware": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", + "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", + "license": "MIT", + "dependencies": { + "@types/http-proxy": "^1.17.8", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "@types/express": "^4.17.13" + }, + "peerDependenciesMeta": { + "@types/express": { + "optional": true + } + } + }, + "node_modules/http-proxy/node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "license": "MIT" + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "license": "MIT", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "license": "Apache-2.0", + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/humps": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/humps/-/humps-2.0.1.tgz", + "integrity": "sha512-E0eIbrFWUhwfXJmsbdjRQFQPrl5pTEoKlz163j1mTqqUnU9PgR4AgB8AIITzuB3vLBdxZXyZ9TDIrwB2OASz4g==", + "license": "MIT" + }, + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "license": "ISC", + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/idb": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/idb/-/idb-7.1.1.tgz", + "integrity": "sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==", + "license": "ISC" + }, + "node_modules/identity-obj-proxy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/identity-obj-proxy/-/identity-obj-proxy-3.0.0.tgz", + "integrity": "sha512-00n6YnVHKrinT9t0d9+5yZC6UBNJANpYEQvL2LlX6Ab9lnmxzIRcEmTPuyGScvl1+jKuCICX1Z0Ab1pPKKdikA==", + "license": "MIT", + "dependencies": { + "harmony-reflect": "^1.4.6" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/ignore": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/immer": { + "version": "9.0.21", + "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.21.tgz", + "integrity": "sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/immer" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-local": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", + "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "license": "MIT", + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "license": "ISC" + }, + "node_modules/internal-slot": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", + "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "hasown": "^2.0.0", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/internmap": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz", + "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.0.0" + } + }, + "node_modules/ipaddr.js": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.1.0.tgz", + "integrity": "sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ==", + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", + "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "license": "MIT" + }, + "node_modules/is-async-function": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", + "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "license": "MIT", + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "license": "MIT", + "dependencies": { + "hasown": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-finalizationregistry": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz", + "integrity": "sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-map": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", + "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", + "license": "MIT" + }, + "node_modules/is-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-plain-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-port-reachable": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-port-reachable/-/is-port-reachable-4.0.0.tgz", + "integrity": "sha512-9UoipoxYmSk6Xy7QFgRv2HDyaysmgSG75TFQs6S+3pDM7ZhKTF/bskZV+0UlABHzKjNVhPjYCLfeZUEg1wXxig==", + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "license": "MIT" + }, + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", + "integrity": "sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-root": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-root/-/is-root-2.1.0.tgz", + "integrity": "sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/is-set": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", + "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", + "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", + "license": "MIT", + "dependencies": { + "which-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", + "license": "MIT" + }, + "node_modules/is-weakmap": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", + "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", + "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "license": "MIT", + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "license": "MIT" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "license": "ISC" + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "license": "BSD-3-Clause", + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "license": "BSD-3-Clause", + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-report/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-report/node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "license": "MIT", + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/istanbul-lib-report/node_modules/semver": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-report/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "license": "ISC" + }, + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "license": "BSD-3-Clause", + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-source-maps/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/istanbul-reports": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz", + "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==", + "license": "BSD-3-Clause", + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/iterator.prototype": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.2.tgz", + "integrity": "sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==", + "license": "MIT", + "dependencies": { + "define-properties": "^1.2.1", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "reflect.getprototypeof": "^1.0.4", + "set-function-name": "^2.0.1" + } + }, + "node_modules/jackspeak": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", + "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jake": { + "version": "10.8.7", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.7.tgz", + "integrity": "sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==", + "license": "Apache-2.0", + "dependencies": { + "async": "^3.2.3", + "chalk": "^4.0.2", + "filelist": "^1.0.4", + "minimatch": "^3.1.2" + }, + "bin": { + "jake": "bin/cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jake/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest/-/jest-27.5.1.tgz", + "integrity": "sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ==", + "license": "MIT", + "dependencies": { + "@jest/core": "^27.5.1", + "import-local": "^3.0.2", + "jest-cli": "^27.5.1" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-changed-files": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.5.1.tgz", + "integrity": "sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw==", + "license": "MIT", + "dependencies": { + "@jest/types": "^27.5.1", + "execa": "^5.0.0", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-changed-files/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-changed-files/node_modules/@types/yargs": { + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", + "license": "MIT", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-changed-files/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-circus": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.5.1.tgz", + "integrity": "sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw==", + "license": "MIT", + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^0.7.0", + "expect": "^27.5.1", + "is-generator-fn": "^2.0.0", + "jest-each": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-circus/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-circus/node_modules/@types/yargs": { + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", + "license": "MIT", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-circus/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-circus/node_modules/pretty-format": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-circus/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-circus/node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "license": "MIT" + }, + "node_modules/jest-cli": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.5.1.tgz", + "integrity": "sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw==", + "license": "MIT", + "dependencies": { + "@jest/core": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "import-local": "^3.0.2", + "jest-config": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "prompts": "^2.0.1", + "yargs": "^16.2.0" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-cli/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-cli/node_modules/@types/yargs": { + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", + "license": "MIT", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-cli/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-config": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.5.1.tgz", + "integrity": "sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA==", + "license": "MIT", + "dependencies": { + "@babel/core": "^7.8.0", + "@jest/test-sequencer": "^27.5.1", + "@jest/types": "^27.5.1", + "babel-jest": "^27.5.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.1", + "graceful-fs": "^4.2.9", + "jest-circus": "^27.5.1", + "jest-environment-jsdom": "^27.5.1", + "jest-environment-node": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-jasmine2": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-runner": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "ts-node": { + "optional": true + } + } + }, + "node_modules/jest-config/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-config/node_modules/@types/yargs": { + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", + "license": "MIT", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-config/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-config/node_modules/jest-get-type": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", + "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", + "license": "MIT", + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-config/node_modules/pretty-format": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-config/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-config/node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "license": "MIT" + }, + "node_modules/jest-diff": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-26.6.2.tgz", + "integrity": "sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA==", + "license": "MIT", + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^26.6.2", + "jest-get-type": "^26.3.0", + "pretty-format": "^26.6.2" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-diff/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-docblock": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.5.1.tgz", + "integrity": "sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ==", + "license": "MIT", + "dependencies": { + "detect-newline": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-each": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.5.1.tgz", + "integrity": "sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ==", + "license": "MIT", + "dependencies": { + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "jest-get-type": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-each/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-each/node_modules/@types/yargs": { + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", + "license": "MIT", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-each/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-each/node_modules/jest-get-type": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", + "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", + "license": "MIT", + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-each/node_modules/pretty-format": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-each/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-each/node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "license": "MIT" + }, + "node_modules/jest-environment-jsdom": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.5.1.tgz", + "integrity": "sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw==", + "license": "MIT", + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1", + "jsdom": "^16.6.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-environment-jsdom/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-environment-jsdom/node_modules/@types/yargs": { + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", + "license": "MIT", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-environment-jsdom/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-environment-node": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.5.1.tgz", + "integrity": "sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw==", + "license": "MIT", + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-environment-node/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-environment-node/node_modules/@types/yargs": { + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", + "license": "MIT", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-environment-node/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-get-type": { + "version": "26.3.0", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-26.3.0.tgz", + "integrity": "sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig==", + "license": "MIT", + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-haste-map": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz", + "integrity": "sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==", + "license": "MIT", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/graceful-fs": "^4.1.2", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^27.5.1", + "jest-serializer": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "micromatch": "^4.0.4", + "walker": "^1.0.7" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + } + }, + "node_modules/jest-haste-map/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-haste-map/node_modules/@types/yargs": { + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", + "license": "MIT", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-haste-map/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-jasmine2": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.5.1.tgz", + "integrity": "sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ==", + "license": "MIT", + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/source-map": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "expect": "^27.5.1", + "is-generator-fn": "^2.0.0", + "jest-each": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-jasmine2/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-jasmine2/node_modules/@types/yargs": { + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", + "license": "MIT", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-jasmine2/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-jasmine2/node_modules/pretty-format": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-jasmine2/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-jasmine2/node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "license": "MIT" + }, + "node_modules/jest-leak-detector": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz", + "integrity": "sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ==", + "license": "MIT", + "dependencies": { + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-leak-detector/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-leak-detector/node_modules/jest-get-type": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", + "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", + "license": "MIT", + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-leak-detector/node_modules/pretty-format": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-leak-detector/node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "license": "MIT" + }, + "node_modules/jest-matcher-utils": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz", + "integrity": "sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==", + "license": "MIT", + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^27.5.1", + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-matcher-utils/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-matcher-utils/node_modules/diff-sequences": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz", + "integrity": "sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==", + "license": "MIT", + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-matcher-utils/node_modules/jest-diff": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.1.tgz", + "integrity": "sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==", + "license": "MIT", + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^27.5.1", + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-matcher-utils/node_modules/jest-get-type": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", + "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", + "license": "MIT", + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-matcher-utils/node_modules/pretty-format": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-matcher-utils/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-matcher-utils/node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "license": "MIT" + }, + "node_modules/jest-message-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", + "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^27.5.1", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-message-util/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-message-util/node_modules/@types/yargs": { + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", + "license": "MIT", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-message-util/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-message-util/node_modules/pretty-format": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-message-util/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-message-util/node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "license": "MIT" + }, + "node_modules/jest-mock": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.5.1.tgz", + "integrity": "sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==", + "license": "MIT", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-mock/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-mock/node_modules/@types/yargs": { + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", + "license": "MIT", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-mock/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-pnp-resolver": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", + "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", + "license": "MIT", + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "jest-resolve": "*" + }, + "peerDependenciesMeta": { + "jest-resolve": { + "optional": true + } + } + }, + "node_modules/jest-regex-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", + "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==", + "license": "MIT", + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-resolve": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.5.1.tgz", + "integrity": "sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw==", + "license": "MIT", + "dependencies": { + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "resolve": "^1.20.0", + "resolve.exports": "^1.1.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-resolve-dependencies": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.1.tgz", + "integrity": "sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg==", + "license": "MIT", + "dependencies": { + "@jest/types": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-snapshot": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-resolve-dependencies/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-resolve-dependencies/node_modules/@types/yargs": { + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", + "license": "MIT", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-resolve-dependencies/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-resolve/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-resolve/node_modules/@types/yargs": { + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", + "license": "MIT", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-resolve/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-runner": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.5.1.tgz", + "integrity": "sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ==", + "license": "MIT", + "dependencies": { + "@jest/console": "^27.5.1", + "@jest/environment": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.8.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "^27.5.1", + "jest-environment-jsdom": "^27.5.1", + "jest-environment-node": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-leak-detector": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "source-map-support": "^0.5.6", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-runner/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-runner/node_modules/@types/yargs": { + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", + "license": "MIT", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-runner/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-runtime": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.5.1.tgz", + "integrity": "sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A==", + "license": "MIT", + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/globals": "^27.5.1", + "@jest/source-map": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "execa": "^5.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-mock": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-runtime/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-runtime/node_modules/@types/yargs": { + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", + "license": "MIT", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-runtime/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-serializer": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", + "integrity": "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==", + "license": "MIT", + "dependencies": { + "@types/node": "*", + "graceful-fs": "^4.2.9" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-snapshot": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.5.1.tgz", + "integrity": "sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==", + "license": "MIT", + "dependencies": { + "@babel/core": "^7.7.2", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/traverse": "^7.7.2", + "@babel/types": "^7.0.0", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/babel__traverse": "^7.0.4", + "@types/prettier": "^2.1.5", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^27.5.1", + "graceful-fs": "^4.2.9", + "jest-diff": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-util": "^27.5.1", + "natural-compare": "^1.4.0", + "pretty-format": "^27.5.1", + "semver": "^7.3.2" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/@types/yargs": { + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", + "license": "MIT", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-snapshot/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-snapshot/node_modules/diff-sequences": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz", + "integrity": "sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==", + "license": "MIT", + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/jest-diff": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.1.tgz", + "integrity": "sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==", + "license": "MIT", + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^27.5.1", + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/jest-get-type": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", + "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", + "license": "MIT", + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-snapshot/node_modules/pretty-format": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-snapshot/node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "license": "MIT" + }, + "node_modules/jest-snapshot/node_modules/semver": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-snapshot/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "license": "ISC" + }, + "node_modules/jest-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", + "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "license": "MIT", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-util/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-util/node_modules/@types/yargs": { + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", + "license": "MIT", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-util/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-validate": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.5.1.tgz", + "integrity": "sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ==", + "license": "MIT", + "dependencies": { + "@jest/types": "^27.5.1", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^27.5.1", + "leven": "^3.1.0", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-validate/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-validate/node_modules/@types/yargs": { + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", + "license": "MIT", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-validate/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-validate/node_modules/jest-get-type": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", + "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", + "license": "MIT", + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-validate/node_modules/pretty-format": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-validate/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-validate/node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "license": "MIT" + }, + "node_modules/jest-watch-typeahead": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/jest-watch-typeahead/-/jest-watch-typeahead-1.1.0.tgz", + "integrity": "sha512-Va5nLSJTN7YFtC2jd+7wsoe1pNe5K4ShLux/E5iHEwlB9AxaxmggY7to9KUqKojhaJw3aXqt5WAb4jGPOolpEw==", + "license": "MIT", + "dependencies": { + "ansi-escapes": "^4.3.1", + "chalk": "^4.0.0", + "jest-regex-util": "^28.0.0", + "jest-watcher": "^28.0.0", + "slash": "^4.0.0", + "string-length": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "jest": "^27.0.0 || ^28.0.0" + } + }, + "node_modules/jest-watch-typeahead/node_modules/@jest/console": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-28.1.3.tgz", + "integrity": "sha512-QPAkP5EwKdK/bxIr6C1I4Vs0rm2nHiANzj/Z5X2JQkrZo6IqvC4ldZ9K95tF0HdidhA8Bo6egxSzUFPYKcEXLw==", + "license": "MIT", + "dependencies": { + "@jest/types": "^28.1.3", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^28.1.3", + "jest-util": "^28.1.3", + "slash": "^3.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-watch-typeahead/node_modules/@jest/console/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-watch-typeahead/node_modules/@jest/test-result": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-28.1.3.tgz", + "integrity": "sha512-kZAkxnSE+FqE8YjW8gNuoVkkC9I7S1qmenl8sGcDOLropASP+BkcGKwhXoyqQuGOGeYY0y/ixjrd/iERpEXHNg==", + "license": "MIT", + "dependencies": { + "@jest/console": "^28.1.3", + "@jest/types": "^28.1.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-watch-typeahead/node_modules/@jest/types": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", + "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", + "license": "MIT", + "dependencies": { + "@jest/schemas": "^28.1.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-watch-typeahead/node_modules/@types/yargs": { + "version": "17.0.32", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", + "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", + "license": "MIT", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-watch-typeahead/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-watch-typeahead/node_modules/emittery": { + "version": "0.10.2", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.10.2.tgz", + "integrity": "sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" + } + }, + "node_modules/jest-watch-typeahead/node_modules/jest-message-util": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.3.tgz", + "integrity": "sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^28.1.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^28.1.3", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-watch-typeahead/node_modules/jest-message-util/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-watch-typeahead/node_modules/jest-regex-util": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz", + "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==", + "license": "MIT", + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-watch-typeahead/node_modules/jest-util": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz", + "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==", + "license": "MIT", + "dependencies": { + "@jest/types": "^28.1.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-watch-typeahead/node_modules/jest-watcher": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-28.1.3.tgz", + "integrity": "sha512-t4qcqj9hze+jviFPUN3YAtAEeFnr/azITXQEMARf5cMwKY2SMBRnCQTXLixTl20OR6mLh9KLMrgVJgJISym+1g==", + "license": "MIT", + "dependencies": { + "@jest/test-result": "^28.1.3", + "@jest/types": "^28.1.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.10.2", + "jest-util": "^28.1.3", + "string-length": "^4.0.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-watch-typeahead/node_modules/jest-watcher/node_modules/string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "license": "MIT", + "dependencies": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-watch-typeahead/node_modules/jest-watcher/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-watch-typeahead/node_modules/pretty-format": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz", + "integrity": "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==", + "license": "MIT", + "dependencies": { + "@jest/schemas": "^28.1.3", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-watch-typeahead/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-watch-typeahead/node_modules/slash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-watch-typeahead/node_modules/string-length": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-5.0.1.tgz", + "integrity": "sha512-9Ep08KAMUn0OadnVaBuRdE2l615CQ508kr0XMadjClfYpdCyvrbFp6Taebo8yyxokQ4viUd/xPPUA4FGgUa0ow==", + "license": "MIT", + "dependencies": { + "char-regex": "^2.0.0", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-watch-typeahead/node_modules/string-length/node_modules/char-regex": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-2.0.1.tgz", + "integrity": "sha512-oSvEeo6ZUD7NepqAat3RqoucZ5SeqLJgOvVIwkafu6IP3V0pO38s/ypdVUmDDK6qIIHNlYHJAKX9E7R7HoKElw==", + "license": "MIT", + "engines": { + "node": ">=12.20" + } + }, + "node_modules/jest-watch-typeahead/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/jest-watch-typeahead/node_modules/strip-ansi/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/jest-watcher": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.5.1.tgz", + "integrity": "sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw==", + "license": "MIT", + "dependencies": { + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "jest-util": "^27.5.1", + "string-length": "^4.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-watcher/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-watcher/node_modules/@types/yargs": { + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", + "license": "MIT", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-watcher/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "license": "MIT", + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/jiti": { + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz", + "integrity": "sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==", + "license": "MIT", + "bin": { + "jiti": "bin/jiti.js" + } + }, + "node_modules/jose": { + "version": "4.15.9", + "resolved": "https://registry.npmjs.org/jose/-/jose-4.15.9.tgz", + "integrity": "sha512-1vUQX+IdDMVPj4k8kOxgUqlcK518yluMuGZwqlr44FS1ppZB/5GWh4rZG89erpOBOJjU/OBsnCVFfapsRz6nEA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/panva" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsdom": { + "version": "16.7.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", + "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", + "license": "MIT", + "dependencies": { + "abab": "^2.0.5", + "acorn": "^8.2.4", + "acorn-globals": "^6.0.0", + "cssom": "^0.4.4", + "cssstyle": "^2.3.0", + "data-urls": "^2.0.0", + "decimal.js": "^10.2.1", + "domexception": "^2.0.1", + "escodegen": "^2.0.0", + "form-data": "^3.0.0", + "html-encoding-sniffer": "^2.0.1", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.0", + "parse5": "6.0.1", + "saxes": "^5.0.1", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.0.0", + "w3c-hr-time": "^1.0.2", + "w3c-xmlserializer": "^2.0.0", + "webidl-conversions": "^6.1.0", + "whatwg-encoding": "^1.0.5", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.5.0", + "ws": "^7.4.6", + "xml-name-validator": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "canvas": "^2.5.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/jsdom/node_modules/form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "license": "MIT" + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "license": "MIT" + }, + "node_modules/json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", + "license": "(AFL-2.1 OR BSD-3-Clause)" + }, + "node_modules/json-schema-compare": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/json-schema-compare/-/json-schema-compare-0.2.2.tgz", + "integrity": "sha512-c4WYmDKyJXhs7WWvAWm3uIYnfyWFoIp+JEoX34rctVvEkMYCPGhXtvmFFXiffBbxfZsvQ0RNnV5H7GvDF5HCqQ==", + "license": "MIT", + "dependencies": { + "lodash": "^4.17.4" + } + }, + "node_modules/json-schema-merge-allof": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/json-schema-merge-allof/-/json-schema-merge-allof-0.6.0.tgz", + "integrity": "sha512-LEw4VMQVRceOPLuGRWcxW5orTTiR9ZAtqTAe4rQUjNADTeR81bezBVFa0MqIwp0YmHIM1KkhSjZM7o+IQhaPbQ==", + "license": "MIT", + "dependencies": { + "compute-lcm": "^1.1.0", + "json-schema-compare": "^0.2.2", + "lodash": "^4.17.4" + } + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "license": "MIT" + }, + "node_modules/json2csv": { + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/json2csv/-/json2csv-5.0.7.tgz", + "integrity": "sha512-YRZbUnyaJZLZUJSRi2G/MqahCyRv9n/ds+4oIetjDF3jWQA7AG7iSeKTiZiCNqtMZM7HDyt0e/W6lEnoGEmMGA==", + "license": "MIT", + "dependencies": { + "commander": "^6.1.0", + "jsonparse": "^1.3.1", + "lodash.get": "^4.4.2" + }, + "bin": { + "json2csv": "bin/json2csv.js" + }, + "engines": { + "node": ">= 10", + "npm": ">= 6.13.0" + } + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", + "engines": [ + "node >= 0.2.0" + ], + "license": "MIT" + }, + "node_modules/jsonpath": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/jsonpath/-/jsonpath-1.1.1.tgz", + "integrity": "sha512-l6Cg7jRpixfbgoWgkrl77dgEj8RPvND0wMH6TwQmi9Qs4TFfS9u5cUFnbeKTwj5ga5Y3BTGGNI28k117LJ009w==", + "license": "MIT", + "dependencies": { + "esprima": "1.2.2", + "static-eval": "2.0.2", + "underscore": "1.12.1" + } + }, + "node_modules/jsonpath/node_modules/esprima": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.2.2.tgz", + "integrity": "sha512-+JpPZam9w5DuJ3Q67SqsMGtiHKENSMRVoxvArfJZK01/BfLEObtZ6orJa/MtoGNR/rfMgp5837T41PAmTwAv/A==", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/jsonpointer": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.1.0.tgz", + "integrity": "sha512-CXcRvMyTlnR53xMcKnuMzfCA5i/nfblTnnr74CZb6C4vG39eu6w51t7nKmU5MfLfbTgGItliNyjO/ciNPDqClg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jsx-ast-utils": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", + "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", + "license": "MIT", + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "object.assign": "^4.1.4", + "object.values": "^1.1.6" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/jwt-decode": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jwt-decode/-/jwt-decode-4.0.0.tgz", + "integrity": "sha512-+KJGIyHgkGuIq3IEBNftfhW/LfWhXUIY6OmyVWjliu5KH1y0fw7VQ8YndE2O4qZdMSd9SqbnC8GOcZEy0Om7sA==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/klona": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.6.tgz", + "integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/language-subtag-registry": { + "version": "0.3.22", + "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz", + "integrity": "sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==", + "license": "CC0-1.0" + }, + "node_modules/language-tags": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz", + "integrity": "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==", + "license": "MIT", + "dependencies": { + "language-subtag-registry": "^0.3.20" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/launch-editor": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.6.1.tgz", + "integrity": "sha512-eB/uXmFVpY4zezmGp5XtU21kwo7GBbKB+EQ+UZeWtGb9yAM5xt/Evk+lYH3eRNAtId+ej4u7TYPFZ07w4s7rRw==", + "license": "MIT", + "dependencies": { + "picocolors": "^1.0.0", + "shell-quote": "^1.8.1" + } + }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lilconfig": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "license": "MIT" + }, + "node_modules/loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "license": "MIT", + "engines": { + "node": ">=6.11.5" + } + }, + "node_modules/loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "license": "MIT", + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "license": "MIT" + }, + "node_modules/lodash-es": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", + "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==", + "license": "MIT" + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "license": "MIT" + }, + "node_modules/lodash.get": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", + "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==", + "license": "MIT" + }, + "node_modules/lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", + "license": "MIT" + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "license": "MIT" + }, + "node_modules/lodash.mergewith": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz", + "integrity": "sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==", + "license": "MIT" + }, + "node_modules/lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==", + "license": "MIT" + }, + "node_modules/lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", + "license": "MIT" + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "license": "MIT", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "license": "MIT", + "dependencies": { + "tslib": "^2.0.3" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/luxon": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.6.1.tgz", + "integrity": "sha512-tJLxrKJhO2ukZ5z0gyjY1zPh3Rh88Ej9P7jNrZiHMUXHae1yvI2imgOZtL1TO8TW6biMMKfTtAOoEJANgtWBMQ==", + "license": "MIT", + "engines": { + "node": ">=12" + } + }, + "node_modules/lz-string": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz", + "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", + "license": "MIT", + "bin": { + "lz-string": "bin/bin.js" + } + }, + "node_modules/magic-string": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", + "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", + "license": "MIT", + "dependencies": { + "sourcemap-codec": "^1.4.8" + } + }, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "license": "MIT", + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "license": "BSD-3-Clause", + "dependencies": { + "tmpl": "1.0.5" + } + }, + "node_modules/mdn-data": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", + "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==", + "license": "CC0-1.0" + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memfs": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.6.0.tgz", + "integrity": "sha512-EGowvkkgbMcIChjMTMkESFDbZeSh8xZ7kNSF0hAiAN4Jh6jgHCRS0Ga/+C8y6Au+oqpezRHCfPsmJ2+DwAgiwQ==", + "license": "Unlicense", + "dependencies": { + "fs-monkey": "^1.0.4" + }, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/memoize-one": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-6.0.0.tgz", + "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==", + "license": "MIT" + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", + "license": "MIT" + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "license": "MIT" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "license": "MIT", + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/mini-css-extract-plugin": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.8.0.tgz", + "integrity": "sha512-CxmUYPFcTgET1zImteG/LZOy/4T5rTojesQXkSNBiquhydn78tfbCE9sjIjnJ/UcjNjOC1bphTCCW5rrS7cXAg==", + "license": "MIT", + "dependencies": { + "schema-utils": "^4.0.0", + "tapable": "^2.2.1" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/mini-css-extract-plugin/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/mini-css-extract-plugin/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/mini-css-extract-plugin/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "license": "MIT" + }, + "node_modules/mini-css-extract-plugin/node_modules/schema-utils": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "license": "ISC" + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "license": "MIT", + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/moment": { + "version": "2.30.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz", + "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==", + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/moment-timezone": { + "version": "0.5.48", + "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.48.tgz", + "integrity": "sha512-f22b8LV1gbTO2ms2j2z13MuPogNoh5UzxL3nzNAYKGraILnbGc9NEE6dyiiiLv46DGRb8A4kg8UKWLjPthxBHw==", + "license": "MIT", + "dependencies": { + "moment": "^2.29.4" + }, + "engines": { + "node": "*" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "license": "MIT" + }, + "node_modules/multicast-dns": { + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", + "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", + "license": "MIT", + "dependencies": { + "dns-packet": "^5.2.2", + "thunky": "^1.0.2" + }, + "bin": { + "multicast-dns": "cli.js" + } + }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "license": "MIT" + }, + "node_modules/natural-compare-lite": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", + "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", + "license": "MIT" + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "license": "MIT" + }, + "node_modules/no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "license": "MIT", + "dependencies": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, + "node_modules/node-cron": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/node-cron/-/node-cron-3.0.3.tgz", + "integrity": "sha512-dOal67//nohNgYWb+nWmg5dkFdIwDm8EpeGYMekPMrngV3637lqnX0lbUcCtgibHTz6SEz7DAIjKvKDFYCnO1A==", + "license": "ISC", + "dependencies": { + "uuid": "8.3.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/node-forge": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "license": "(BSD-3-Clause OR GPL-2.0)", + "engines": { + "node": ">= 6.13.0" + } + }, + "node_modules/node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", + "license": "MIT" + }, + "node_modules/node-releases": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", + "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", + "license": "MIT" + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "license": "MIT", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/nwsapi": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.7.tgz", + "integrity": "sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==", + "license": "MIT" + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/object-inspect": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", + "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.entries": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.7.tgz", + "integrity": "sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.fromentries": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.7.tgz", + "integrity": "sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.getownpropertydescriptors": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.7.tgz", + "integrity": "sha512-PrJz0C2xJ58FNn11XV2lr4Jt5Gzl94qpy9Lu0JlfEj14z88sqbSBJCBEzdlNUCzY2gburhbrwOZ5BHCmuNUy0g==", + "license": "MIT", + "dependencies": { + "array.prototype.reduce": "^1.0.6", + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "safe-array-concat": "^1.0.0" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.groupby": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.2.tgz", + "integrity": "sha512-bzBq58S+x+uo0VjurFT0UktpKHOZmv4/xePiOA1nbB9pMqpGK7rUPNgf+1YC+7mE+0HzhTMqNUuCqvKhj6FnBw==", + "license": "MIT", + "dependencies": { + "array.prototype.filter": "^1.0.3", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.0.0" + } + }, + "node_modules/object.hasown": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.3.tgz", + "integrity": "sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA==", + "license": "MIT", + "dependencies": { + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.values": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.7.tgz", + "integrity": "sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", + "license": "MIT" + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/on-headers": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.1.0.tgz", + "integrity": "sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", + "license": "MIT", + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/optimism": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/optimism/-/optimism-0.18.0.tgz", + "integrity": "sha512-tGn8+REwLRNFnb9WmcY5IfpOqeX2kpaYJ1s6Ae3mn12AeydLkR3j+jSCmVQFoXqU8D41PAJ1RG1rCRNWmNZVmQ==", + "license": "MIT", + "dependencies": { + "@wry/caches": "^1.0.0", + "@wry/context": "^0.7.0", + "@wry/trie": "^0.4.3", + "tslib": "^2.3.0" + } + }, + "node_modules/optimism/node_modules/@wry/trie": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@wry/trie/-/trie-0.4.3.tgz", + "integrity": "sha512-I6bHwH0fSf6RqQcnnXLJKhkSXG45MFral3GxPaY4uAl0LYDZM+YDVDAiU9bYwjTuysy1S0IeecWtmq1SZA3M1w==", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/optionator": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", + "license": "MIT", + "dependencies": { + "@aashutoshrathi/word-wrap": "^1.2.3", + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-retry": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", + "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", + "license": "MIT", + "dependencies": { + "@types/retry": "0.12.0", + "retry": "^0.13.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/param-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", + "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", + "license": "MIT", + "dependencies": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "license": "MIT" + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/pascal-case": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", + "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", + "license": "MIT", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==", + "license": "(WTFPL OR MIT)" + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "license": "MIT" + }, + "node_modules/path-scurry": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", + "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^9.1.1 || ^10.0.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", + "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==", + "license": "ISC", + "engines": { + "node": "14 || >=16.14" + } + }, + "node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", + "license": "MIT" + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "license": "MIT", + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-up": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", + "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", + "license": "MIT", + "dependencies": { + "find-up": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-up/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "license": "MIT", + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-up/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "license": "MIT", + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-up/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-up/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "license": "MIT", + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-up/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/popmotion": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/popmotion/-/popmotion-11.0.3.tgz", + "integrity": "sha512-Y55FLdj3UxkR7Vl3s7Qr4e9m0onSnP8W7d/xQLsoJM40vs6UKHFdygs6SWryasTZYqugMjm3BepCF4CWXDiHgA==", + "license": "MIT", + "dependencies": { + "framesync": "6.0.1", + "hey-listen": "^1.0.8", + "style-value-types": "5.0.0", + "tslib": "^2.1.0" + } + }, + "node_modules/popmotion/node_modules/framesync": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/framesync/-/framesync-6.0.1.tgz", + "integrity": "sha512-fUY88kXvGiIItgNC7wcTOl0SNRCVXMKSWW2Yzfmn7EKNc+MpCzcz9DhdHcdjbrtN3c6R4H5dTY2jiCpPdysEjA==", + "license": "MIT", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/postcss": { + "version": "8.4.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.35.tgz", + "integrity": "sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-attribute-case-insensitive": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-5.0.2.tgz", + "integrity": "sha512-XIidXV8fDr0kKt28vqki84fRK8VW8eTuIa4PChv2MqKuT6C9UjmSKzen6KaWhWEoYvwxFCa7n/tC1SZ3tyq4SQ==", + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-browser-comments": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-browser-comments/-/postcss-browser-comments-4.0.0.tgz", + "integrity": "sha512-X9X9/WN3KIvY9+hNERUqX9gncsgBA25XaeR+jshHz2j8+sYyHktHw1JdKuMjeLpGktXidqDhA7b/qm1mrBDmgg==", + "license": "CC0-1.0", + "engines": { + "node": ">=8" + }, + "peerDependencies": { + "browserslist": ">=4", + "postcss": ">=8" + } + }, + "node_modules/postcss-calc": { + "version": "8.2.4", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz", + "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==", + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.0.9", + "postcss-value-parser": "^4.2.0" + }, + "peerDependencies": { + "postcss": "^8.2.2" + } + }, + "node_modules/postcss-clamp": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-clamp/-/postcss-clamp-4.1.0.tgz", + "integrity": "sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=7.6.0" + }, + "peerDependencies": { + "postcss": "^8.4.6" + } + }, + "node_modules/postcss-color-functional-notation": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-4.2.4.tgz", + "integrity": "sha512-2yrTAUZUab9s6CpxkxC4rVgFEVaR6/2Pipvi6qcgvnYiVqZcbDHEoBDhrXzyb7Efh2CCfHQNtcqWcIruDTIUeg==", + "license": "CC0-1.0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-color-hex-alpha": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-8.0.4.tgz", + "integrity": "sha512-nLo2DCRC9eE4w2JmuKgVA3fGL3d01kGq752pVALF68qpGLmx2Qrk91QTKkdUqqp45T1K1XV8IhQpcu1hoAQflQ==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-color-rebeccapurple": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-7.1.1.tgz", + "integrity": "sha512-pGxkuVEInwLHgkNxUc4sdg4g3py7zUeCQ9sMfwyHAT+Ezk8a4OaaVZ8lIY5+oNqA/BXXgLyXv0+5wHP68R79hg==", + "license": "CC0-1.0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-colormin": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.1.tgz", + "integrity": "sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0", + "colord": "^2.9.1", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-convert-values": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz", + "integrity": "sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.21.4", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-custom-media": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-8.0.2.tgz", + "integrity": "sha512-7yi25vDAoHAkbhAzX9dHx2yc6ntS4jQvejrNcC+csQJAXjj15e7VcWfMgLqBNAbOvqi5uIa9huOVwdHbf+sKqg==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.3" + } + }, + "node_modules/postcss-custom-properties": { + "version": "12.1.11", + "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-12.1.11.tgz", + "integrity": "sha512-0IDJYhgU8xDv1KY6+VgUwuQkVtmYzRwu+dMjnmdMafXYv86SWqfxkc7qdDvWS38vsjaEtv8e0vGOUQrAiMBLpQ==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-custom-selectors": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-6.0.3.tgz", + "integrity": "sha512-fgVkmyiWDwmD3JbpCmB45SvvlCD6z9CG6Ie6Iere22W5aHea6oWa7EM2bpnv2Fj3I94L3VbtvX9KqwSi5aFzSg==", + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.3" + } + }, + "node_modules/postcss-dir-pseudo-class": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-6.0.5.tgz", + "integrity": "sha512-eqn4m70P031PF7ZQIvSgy9RSJ5uI2171O/OO/zcRNYpJbvaeKFUlar1aJ7rmgiQtbm0FSPsRewjpdS0Oew7MPA==", + "license": "CC0-1.0", + "dependencies": { + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-discard-comments": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz", + "integrity": "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==", + "license": "MIT", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-duplicates": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz", + "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==", + "license": "MIT", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-empty": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz", + "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==", + "license": "MIT", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-overridden": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz", + "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==", + "license": "MIT", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-double-position-gradients": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-3.1.2.tgz", + "integrity": "sha512-GX+FuE/uBR6eskOK+4vkXgT6pDkexLokPaz/AbJna9s5Kzp/yl488pKPjhy0obB475ovfT1Wv8ho7U/cHNaRgQ==", + "license": "CC0-1.0", + "dependencies": { + "@csstools/postcss-progressive-custom-properties": "^1.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-env-function": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/postcss-env-function/-/postcss-env-function-4.0.6.tgz", + "integrity": "sha512-kpA6FsLra+NqcFnL81TnsU+Z7orGtDTxcOhl6pwXeEq1yFPpRMkCDpHhrz8CFQDr/Wfm0jLiNQ1OsGGPjlqPwA==", + "license": "CC0-1.0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-flexbugs-fixes": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-5.0.2.tgz", + "integrity": "sha512-18f9voByak7bTktR2QgDveglpn9DTbBWPUzSOe9g0N4WR/2eSt6Vrcbf0hmspvMI6YWGywz6B9f7jzpFNJJgnQ==", + "license": "MIT", + "peerDependencies": { + "postcss": "^8.1.4" + } + }, + "node_modules/postcss-focus-visible": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/postcss-focus-visible/-/postcss-focus-visible-6.0.4.tgz", + "integrity": "sha512-QcKuUU/dgNsstIK6HELFRT5Y3lbrMLEOwG+A4s5cA+fx3A3y/JTq3X9LaOj3OC3ALH0XqyrgQIgey/MIZ8Wczw==", + "license": "CC0-1.0", + "dependencies": { + "postcss-selector-parser": "^6.0.9" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-focus-within": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-5.0.4.tgz", + "integrity": "sha512-vvjDN++C0mu8jz4af5d52CB184ogg/sSxAFS+oUJQq2SuCe7T5U2iIsVJtsCp2d6R4j0jr5+q3rPkBVZkXD9fQ==", + "license": "CC0-1.0", + "dependencies": { + "postcss-selector-parser": "^6.0.9" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-font-variant": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-5.0.0.tgz", + "integrity": "sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==", + "license": "MIT", + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-gap-properties": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-3.0.5.tgz", + "integrity": "sha512-IuE6gKSdoUNcvkGIqdtjtcMtZIFyXZhmFd5RUlg97iVEvp1BZKV5ngsAjCjrVy+14uhGBQl9tzmi1Qwq4kqVOg==", + "license": "CC0-1.0", + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-image-set-function": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-4.0.7.tgz", + "integrity": "sha512-9T2r9rsvYzm5ndsBE8WgtrMlIT7VbtTfE7b3BQnudUqnBcBo7L758oc+o+pdj/dUV0l5wjwSdjeOH2DZtfv8qw==", + "license": "CC0-1.0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-import": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", + "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-initial": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-initial/-/postcss-initial-4.0.1.tgz", + "integrity": "sha512-0ueD7rPqX8Pn1xJIjay0AZeIuDoF+V+VvMt/uOnn+4ezUKhZM/NokDeP6DwMNyIoYByuN/94IQnt5FEkaN59xQ==", + "license": "MIT", + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-js": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", + "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", + "license": "MIT", + "dependencies": { + "camelcase-css": "^2.0.1" + }, + "engines": { + "node": "^12 || ^14 || >= 16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.4.21" + } + }, + "node_modules/postcss-lab-function": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-4.2.1.tgz", + "integrity": "sha512-xuXll4isR03CrQsmxyz92LJB2xX9n+pZJ5jE9JgcnmsCammLyKdlzrBin+25dy6wIjfhJpKBAN80gsTlCgRk2w==", + "license": "CC0-1.0", + "dependencies": { + "@csstools/postcss-progressive-custom-properties": "^1.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-load-config": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz", + "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "lilconfig": "^3.0.0", + "yaml": "^2.3.4" + }, + "engines": { + "node": ">= 14" + }, + "peerDependencies": { + "postcss": ">=8.0.9", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/postcss-load-config/node_modules/lilconfig": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.0.tgz", + "integrity": "sha512-p3cz0JV5vw/XeouBU3Ldnp+ZkBjE+n8ydJ4mcwBrOiXXPqNlrzGBqWs9X4MWF7f+iKUBu794Y8Hh8yawiJbCjw==", + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, + "node_modules/postcss-load-config/node_modules/yaml": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.4.tgz", + "integrity": "sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==", + "license": "ISC", + "engines": { + "node": ">= 14" + } + }, + "node_modules/postcss-loader": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-6.2.1.tgz", + "integrity": "sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q==", + "license": "MIT", + "dependencies": { + "cosmiconfig": "^7.0.0", + "klona": "^2.0.5", + "semver": "^7.3.5" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "postcss": "^7.0.0 || ^8.0.1", + "webpack": "^5.0.0" + } + }, + "node_modules/postcss-loader/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/postcss-loader/node_modules/semver": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/postcss-loader/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "license": "ISC" + }, + "node_modules/postcss-logical": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-5.0.4.tgz", + "integrity": "sha512-RHXxplCeLh9VjinvMrZONq7im4wjWGlRJAqmAVLXyZaXwfDWP73/oq4NdIp+OZwhQUMj0zjqDfM5Fj7qby+B4g==", + "license": "CC0-1.0", + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-media-minmax": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-media-minmax/-/postcss-media-minmax-5.0.0.tgz", + "integrity": "sha512-yDUvFf9QdFZTuCUg0g0uNSHVlJ5X1lSzDZjPSFaiCWvjgsvu8vEVxtahPrLMinIDEEGnx6cBe6iqdx5YWz08wQ==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-merge-longhand": { + "version": "5.1.7", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz", + "integrity": "sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0", + "stylehacks": "^5.1.1" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-merge-rules": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.4.tgz", + "integrity": "sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0", + "cssnano-utils": "^3.1.0", + "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-font-values": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz", + "integrity": "sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-gradients": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz", + "integrity": "sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==", + "license": "MIT", + "dependencies": { + "colord": "^2.9.1", + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-params": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz", + "integrity": "sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.21.4", + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-selectors": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz", + "integrity": "sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==", + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-modules-extract-imports": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", + "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", + "license": "ISC", + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-local-by-default": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.4.tgz", + "integrity": "sha512-L4QzMnOdVwRm1Qb8m4x8jsZzKAaPAgrUF1r/hjDR2Xj7R+8Zsf97jAlSQzWtKx5YNiNGN8QxmPFIc/sh+RQl+Q==", + "license": "MIT", + "dependencies": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-scope": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.1.1.tgz", + "integrity": "sha512-uZgqzdTleelWjzJY+Fhti6F3C9iF1JR/dODLs/JDefozYcKTBCdD8BIl6nNPbTbcLnGrk56hzwZC2DaGNvYjzA==", + "license": "ISC", + "dependencies": { + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "license": "ISC", + "dependencies": { + "icss-utils": "^5.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-nested": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz", + "integrity": "sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==", + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.0.11" + }, + "engines": { + "node": ">=12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "node_modules/postcss-nesting": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-10.2.0.tgz", + "integrity": "sha512-EwMkYchxiDiKUhlJGzWsD9b2zvq/r2SSubcRrgP+jujMXFzqvANLt16lJANC+5uZ6hjI7lpRmI6O8JIl+8l1KA==", + "license": "CC0-1.0", + "dependencies": { + "@csstools/selector-specificity": "^2.0.0", + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-normalize": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize/-/postcss-normalize-10.0.1.tgz", + "integrity": "sha512-+5w18/rDev5mqERcG3W5GZNMJa1eoYYNGo8gB7tEwaos0ajk3ZXAI4mHGcNT47NE+ZnZD1pEpUOFLvltIwmeJA==", + "license": "CC0-1.0", + "dependencies": { + "@csstools/normalize.css": "*", + "postcss-browser-comments": "^4", + "sanitize.css": "*" + }, + "engines": { + "node": ">= 12" + }, + "peerDependencies": { + "browserslist": ">= 4", + "postcss": ">= 8" + } + }, + "node_modules/postcss-normalize-charset": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz", + "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==", + "license": "MIT", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-display-values": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz", + "integrity": "sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-positions": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz", + "integrity": "sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-repeat-style": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz", + "integrity": "sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-string": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz", + "integrity": "sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-timing-functions": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz", + "integrity": "sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-unicode": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz", + "integrity": "sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.21.4", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-url": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz", + "integrity": "sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==", + "license": "MIT", + "dependencies": { + "normalize-url": "^6.0.1", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-whitespace": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz", + "integrity": "sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-opacity-percentage": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/postcss-opacity-percentage/-/postcss-opacity-percentage-1.1.3.tgz", + "integrity": "sha512-An6Ba4pHBiDtyVpSLymUUERMo2cU7s+Obz6BTrS+gxkbnSBNKSuD0AVUc+CpBMrpVPKKfoVz0WQCX+Tnst0i4A==", + "funding": [ + { + "type": "kofi", + "url": "https://ko-fi.com/mrcgrtz" + }, + { + "type": "liberapay", + "url": "https://liberapay.com/mrcgrtz" + } + ], + "license": "MIT", + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-ordered-values": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz", + "integrity": "sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==", + "license": "MIT", + "dependencies": { + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-overflow-shorthand": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-3.0.4.tgz", + "integrity": "sha512-otYl/ylHK8Y9bcBnPLo3foYFLL6a6Ak+3EQBPOTR7luMYCOsiVTUk1iLvNf6tVPNGXcoL9Hoz37kpfriRIFb4A==", + "license": "CC0-1.0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-page-break": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-3.0.4.tgz", + "integrity": "sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==", + "license": "MIT", + "peerDependencies": { + "postcss": "^8" + } + }, + "node_modules/postcss-place": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/postcss-place/-/postcss-place-7.0.5.tgz", + "integrity": "sha512-wR8igaZROA6Z4pv0d+bvVrvGY4GVHihBCBQieXFY3kuSuMyOmEnnfFzHl/tQuqHZkfkIVBEbDvYcFfHmpSet9g==", + "license": "CC0-1.0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-preset-env": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-7.8.3.tgz", + "integrity": "sha512-T1LgRm5uEVFSEF83vHZJV2z19lHg4yJuZ6gXZZkqVsqv63nlr6zabMH3l4Pc01FQCyfWVrh2GaUeCVy9Po+Aag==", + "license": "CC0-1.0", + "dependencies": { + "@csstools/postcss-cascade-layers": "^1.1.1", + "@csstools/postcss-color-function": "^1.1.1", + "@csstools/postcss-font-format-keywords": "^1.0.1", + "@csstools/postcss-hwb-function": "^1.0.2", + "@csstools/postcss-ic-unit": "^1.0.1", + "@csstools/postcss-is-pseudo-class": "^2.0.7", + "@csstools/postcss-nested-calc": "^1.0.0", + "@csstools/postcss-normalize-display-values": "^1.0.1", + "@csstools/postcss-oklab-function": "^1.1.1", + "@csstools/postcss-progressive-custom-properties": "^1.3.0", + "@csstools/postcss-stepped-value-functions": "^1.0.1", + "@csstools/postcss-text-decoration-shorthand": "^1.0.0", + "@csstools/postcss-trigonometric-functions": "^1.0.2", + "@csstools/postcss-unset-value": "^1.0.2", + "autoprefixer": "^10.4.13", + "browserslist": "^4.21.4", + "css-blank-pseudo": "^3.0.3", + "css-has-pseudo": "^3.0.4", + "css-prefers-color-scheme": "^6.0.3", + "cssdb": "^7.1.0", + "postcss-attribute-case-insensitive": "^5.0.2", + "postcss-clamp": "^4.1.0", + "postcss-color-functional-notation": "^4.2.4", + "postcss-color-hex-alpha": "^8.0.4", + "postcss-color-rebeccapurple": "^7.1.1", + "postcss-custom-media": "^8.0.2", + "postcss-custom-properties": "^12.1.10", + "postcss-custom-selectors": "^6.0.3", + "postcss-dir-pseudo-class": "^6.0.5", + "postcss-double-position-gradients": "^3.1.2", + "postcss-env-function": "^4.0.6", + "postcss-focus-visible": "^6.0.4", + "postcss-focus-within": "^5.0.4", + "postcss-font-variant": "^5.0.0", + "postcss-gap-properties": "^3.0.5", + "postcss-image-set-function": "^4.0.7", + "postcss-initial": "^4.0.1", + "postcss-lab-function": "^4.2.1", + "postcss-logical": "^5.0.4", + "postcss-media-minmax": "^5.0.0", + "postcss-nesting": "^10.2.0", + "postcss-opacity-percentage": "^1.1.2", + "postcss-overflow-shorthand": "^3.0.4", + "postcss-page-break": "^3.0.4", + "postcss-place": "^7.0.5", + "postcss-pseudo-class-any-link": "^7.1.6", + "postcss-replace-overflow-wrap": "^4.0.0", + "postcss-selector-not": "^6.0.1", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-pseudo-class-any-link": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-7.1.6.tgz", + "integrity": "sha512-9sCtZkO6f/5ML9WcTLcIyV1yz9D1rf0tWc+ulKcvV30s0iZKS/ONyETvoWsr6vnrmW+X+KmuK3gV/w5EWnT37w==", + "license": "CC0-1.0", + "dependencies": { + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-reduce-initial": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.2.tgz", + "integrity": "sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-reduce-transforms": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz", + "integrity": "sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-replace-overflow-wrap": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-4.0.0.tgz", + "integrity": "sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==", + "license": "MIT", + "peerDependencies": { + "postcss": "^8.0.3" + } + }, + "node_modules/postcss-selector-not": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-6.0.1.tgz", + "integrity": "sha512-1i9affjAe9xu/y9uqWH+tD4r6/hDaXJruk8xn2x1vzxC2U3J3LKO3zJW4CyxlNhA56pADJ/djpEwpH1RClI2rQ==", + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.15", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.15.tgz", + "integrity": "sha512-rEYkQOMUCEMhsKbK66tbEU9QVIxbhN18YiniAwA7XQYTVBqrBy+P2p5JcdqsHgKM2zWylp8d7J6eszocfds5Sw==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-svgo": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.1.0.tgz", + "integrity": "sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0", + "svgo": "^2.7.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-svgo/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/postcss-svgo/node_modules/css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "license": "MIT", + "dependencies": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/postcss-svgo/node_modules/mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", + "license": "CC0-1.0" + }, + "node_modules/postcss-svgo/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss-svgo/node_modules/svgo": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", + "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", + "license": "MIT", + "dependencies": { + "@trysound/sax": "0.2.0", + "commander": "^7.2.0", + "css-select": "^4.1.3", + "css-tree": "^1.1.3", + "csso": "^4.2.0", + "picocolors": "^1.0.0", + "stable": "^0.1.8" + }, + "bin": { + "svgo": "bin/svgo" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/postcss-unique-selectors": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz", + "integrity": "sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==", + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "license": "MIT" + }, + "node_modules/preact": { + "version": "10.12.1", + "resolved": "https://registry.npmjs.org/preact/-/preact-10.12.1.tgz", + "integrity": "sha512-l8386ixSsBdbreOAkqtrwqHwdvR35ID8c3rKPa8lCWuO86dBi32QWHV4vfsZK1utLLFMvw+Z5Ad4XLkZzchscg==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/preact" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", + "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-diff": "^1.1.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/pretty-bytes": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", + "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pretty-error": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", + "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", + "license": "MIT", + "dependencies": { + "lodash": "^4.17.20", + "renderkid": "^3.0.0" + } + }, + "node_modules/pretty-format": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", + "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", + "license": "MIT", + "dependencies": { + "@jest/types": "^26.6.2", + "ansi-regex": "^5.0.0", + "ansi-styles": "^4.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/pretty-format/node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "license": "MIT" + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "license": "MIT" + }, + "node_modules/promise": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz", + "integrity": "sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==", + "license": "MIT", + "dependencies": { + "asap": "~2.0.6" + } + }, + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "license": "MIT", + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/prop-types-extra": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/prop-types-extra/-/prop-types-extra-1.1.1.tgz", + "integrity": "sha512-59+AHNnHYCdiC+vMwY52WmvP5dM3QLeoumYuEyceQDi9aEhtwN9zIQ2ZNo25sMyXnbh32h+P1ezDsUpUH3JAew==", + "license": "MIT", + "dependencies": { + "react-is": "^16.3.2", + "warning": "^4.0.0" + }, + "peerDependencies": { + "react": ">=0.14.0" + } + }, + "node_modules/prop-types-extra/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "license": "MIT" + }, + "node_modules/prop-types/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "license": "MIT" + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "license": "MIT", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/proxy-addr/node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "license": "MIT" + }, + "node_modules/psl": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", + "license": "MIT" + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==", + "license": "MIT", + "engines": { + "node": ">=0.6.0", + "teleport": ">=0.2.0" + } + }, + "node_modules/qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "license": "MIT" + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/raf": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", + "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==", + "license": "MIT", + "dependencies": { + "performance-now": "^2.1.0" + } + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/raw-body/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, + "node_modules/rc/node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", + "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-app-polyfill": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/react-app-polyfill/-/react-app-polyfill-1.0.6.tgz", + "integrity": "sha512-OfBnObtnGgLGfweORmdZbyEz+3dgVePQBb3zipiaDsMHV1NpWm0rDFYIVXFV/AK+x4VIIfWHhrdMIeoTLyRr2g==", + "license": "MIT", + "dependencies": { + "core-js": "^3.5.0", + "object-assign": "^4.1.1", + "promise": "^8.0.3", + "raf": "^3.4.1", + "regenerator-runtime": "^0.13.3", + "whatwg-fetch": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/react-app-polyfill/node_modules/core-js": { + "version": "3.36.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.36.0.tgz", + "integrity": "sha512-mt7+TUBbTFg5+GngsAxeKBTl5/VS0guFeJacYge9OmHb+m058UwwIm41SE9T4Den7ClatV57B6TYTuJ0CX1MAw==", + "hasInstallScript": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/react-app-polyfill/node_modules/regenerator-runtime": { + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", + "license": "MIT" + }, + "node_modules/react-big-calendar": { + "version": "1.19.4", + "resolved": "https://registry.npmjs.org/react-big-calendar/-/react-big-calendar-1.19.4.tgz", + "integrity": "sha512-FrvbDx2LF6JAWFD96LU1jjloppC5OgIvMYUYIPzAw5Aq+ArYFPxAjLqXc4DyxfsQDN0TJTMuS/BIbcSB7Pg0YA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.20.7", + "clsx": "^1.2.1", + "date-arithmetic": "^4.1.0", + "dayjs": "^1.11.7", + "dom-helpers": "^5.2.1", + "globalize": "^0.1.1", + "invariant": "^2.2.4", + "lodash": "^4.17.21", + "lodash-es": "^4.17.21", + "luxon": "^3.2.1", + "memoize-one": "^6.0.0", + "moment": "^2.29.4", + "moment-timezone": "^0.5.40", + "prop-types": "^15.8.1", + "react-overlays": "^5.2.1", + "uncontrollable": "^7.2.1" + }, + "peerDependencies": { + "react": "^16.14.0 || ^17 || ^18 || ^19", + "react-dom": "^16.14.0 || ^17 || ^18 || ^19" + } + }, + "node_modules/react-big-calendar/node_modules/clsx": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz", + "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/react-bootstrap": { + "version": "1.6.8", + "resolved": "https://registry.npmjs.org/react-bootstrap/-/react-bootstrap-1.6.8.tgz", + "integrity": "sha512-yD6uN78XlFOkETQp6GRuVe0s5509x3XYx8PfPbirwFTYCj5/RfmSs9YZGCwkUrhZNFzj7tZPdpb+3k50mK1E4g==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.14.0", + "@restart/context": "^2.1.4", + "@restart/hooks": "^0.4.7", + "@types/invariant": "^2.2.33", + "@types/prop-types": "^15.7.3", + "@types/react": ">=16.14.8", + "@types/react-transition-group": "^4.4.1", + "@types/warning": "^3.0.0", + "classnames": "^2.3.1", + "dom-helpers": "^5.2.1", + "invariant": "^2.2.4", + "prop-types": "^15.7.2", + "prop-types-extra": "^1.1.0", + "react-overlays": "^5.1.2", + "react-transition-group": "^4.4.1", + "uncontrollable": "^7.2.1", + "warning": "^4.0.3" + }, + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, + "node_modules/react-clientside-effect": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/react-clientside-effect/-/react-clientside-effect-1.2.8.tgz", + "integrity": "sha512-ma2FePH0z3px2+WOu6h+YycZcEvFmmxIlAb62cF52bG86eMySciO/EQZeQMXd07kPCYB0a1dWDT5J+KE9mCDUw==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.12.13" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + } + }, + "node_modules/react-dev-utils": { + "version": "12.0.1", + "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-12.0.1.tgz", + "integrity": "sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.16.0", + "address": "^1.1.2", + "browserslist": "^4.18.1", + "chalk": "^4.1.2", + "cross-spawn": "^7.0.3", + "detect-port-alt": "^1.1.6", + "escape-string-regexp": "^4.0.0", + "filesize": "^8.0.6", + "find-up": "^5.0.0", + "fork-ts-checker-webpack-plugin": "^6.5.0", + "global-modules": "^2.0.0", + "globby": "^11.0.4", + "gzip-size": "^6.0.0", + "immer": "^9.0.7", + "is-root": "^2.1.0", + "loader-utils": "^3.2.0", + "open": "^8.4.0", + "pkg-up": "^3.1.0", + "prompts": "^2.4.2", + "react-error-overlay": "^6.0.11", + "recursive-readdir": "^2.2.2", + "shell-quote": "^1.7.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/react-dev-utils/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/react-dev-utils/node_modules/loader-utils": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.1.tgz", + "integrity": "sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==", + "license": "MIT", + "engines": { + "node": ">= 12.13.0" + } + }, + "node_modules/react-dom": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", + "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.0" + }, + "peerDependencies": { + "react": "^18.2.0" + } + }, + "node_modules/react-dom-factories": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/react-dom-factories/-/react-dom-factories-1.0.2.tgz", + "integrity": "sha512-Bmic2N3oKji7vw9qjDr2dmwHvOATbFSnKy7EH0uT/qjvzIUsiXp6Yquk72LJ3WfMtRnq3ujXMMo7GsJeLPfFWw==", + "license": "MIT" + }, + "node_modules/react-error-overlay": { + "version": "6.0.11", + "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.11.tgz", + "integrity": "sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==", + "license": "MIT" + }, + "node_modules/react-fast-compare": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.2.tgz", + "integrity": "sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ==", + "license": "MIT" + }, + "node_modules/react-focus-lock": { + "version": "2.13.6", + "resolved": "https://registry.npmjs.org/react-focus-lock/-/react-focus-lock-2.13.6.tgz", + "integrity": "sha512-ehylFFWyYtBKXjAO9+3v8d0i+cnc1trGS0vlTGhzFW1vbFXVUTmR8s2tt/ZQG8x5hElg6rhENlLG1H3EZK0Llg==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.0.0", + "focus-lock": "^1.3.6", + "prop-types": "^15.6.2", + "react-clientside-effect": "^1.2.7", + "use-callback-ref": "^1.3.3", + "use-sidecar": "^1.1.3" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-google-login": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/react-google-login/-/react-google-login-5.2.2.tgz", + "integrity": "sha512-JUngfvaSMcOuV0lFff7+SzJ2qviuNMQdqlsDJkUM145xkGPVIfqWXq9Ui+2Dr6jdJWH5KYdynz9+4CzKjI5u6g==", + "license": "MIT", + "dependencies": { + "@types/react": "*", + "prop-types": "^15.6.0" + }, + "peerDependencies": { + "react": "^16 || ^17", + "react-dom": "^16 || ^17" + } + }, + "node_modules/react-icons": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-5.2.1.tgz", + "integrity": "sha512-zdbW5GstTzXaVKvGSyTaBalt7HSfuK5ovrzlpyiWHAFXndXTdd/1hdDHI4xBM1Mn7YriT6aqESucFl9kEXzrdw==", + "license": "MIT", + "peerDependencies": { + "react": "*" + } + }, + "node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "license": "MIT" + }, + "node_modules/react-json-schema": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/react-json-schema/-/react-json-schema-1.2.2.tgz", + "integrity": "sha512-aQDeTQPWVhFfy/hZygPgp9imhkkWtF83OF8/I4EfgS5MY0UbiSVZp0HGhH16dB0YoqIFzJ5Bl507iu6L0+GxWg==", + "license": "Apache-2.0", + "dependencies": { + "react-dom-factories": "^1.0.2" + }, + "engines": { + "node": ">=6.4.0" + }, + "peerDependencies": { + "react": ">=15" + } + }, + "node_modules/react-jsonschema-form": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/react-jsonschema-form/-/react-jsonschema-form-1.8.1.tgz", + "integrity": "sha512-aaDloxNAcGXOOOcdKOxxqEEn5oDlPUZgWcs8unXXB9vjBRgCF8rCm/wVSv1u2G5ih0j/BX6Ewd/WjI2g00lPdg==", + "license": "Apache-2.0", + "dependencies": { + "@babel/runtime-corejs2": "^7.4.5", + "ajv": "^6.7.0", + "core-js": "^2.5.7", + "lodash": "^4.17.15", + "prop-types": "^15.5.8", + "react-is": "^16.8.4", + "react-lifecycles-compat": "^3.0.4", + "shortid": "^2.2.14" + }, + "engines": { + "node": ">=6", + "npm": ">=2.14.7" + }, + "peerDependencies": { + "react": ">=15" + } + }, + "node_modules/react-jsonschema-form/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "license": "MIT" + }, + "node_modules/react-lifecycles-compat": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", + "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==", + "license": "MIT" + }, + "node_modules/react-overlays": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/react-overlays/-/react-overlays-5.2.1.tgz", + "integrity": "sha512-GLLSOLWr21CqtJn8geSwQfoJufdt3mfdsnIiQswouuQ2MMPns+ihZklxvsTDKD3cR2tF8ELbi5xUsvqVhR6WvA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.13.8", + "@popperjs/core": "^2.11.6", + "@restart/hooks": "^0.4.7", + "@types/warning": "^3.0.0", + "dom-helpers": "^5.2.0", + "prop-types": "^15.7.2", + "uncontrollable": "^7.2.1", + "warning": "^4.0.3" + }, + "peerDependencies": { + "react": ">=16.3.0", + "react-dom": ">=16.3.0" + } + }, + "node_modules/react-redux": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-9.2.0.tgz", + "integrity": "sha512-ROY9fvHhwOD9ySfrF0wmvu//bKCQ6AeZZq1nJNtbDC+kk5DuSuNX/n6YWYF/SYy7bSba4D4FSz8DJeKY/S/r+g==", + "license": "MIT", + "dependencies": { + "@types/use-sync-external-store": "^0.0.6", + "use-sync-external-store": "^1.4.0" + }, + "peerDependencies": { + "@types/react": "^18.2.25 || ^19", + "react": "^18.0 || ^19", + "redux": "^5.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "redux": { + "optional": true + } + } + }, + "node_modules/react-refresh": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.11.0.tgz", + "integrity": "sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-remove-scroll": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.7.1.tgz", + "integrity": "sha512-HpMh8+oahmIdOuS5aFKKY6Pyog+FNaZV/XyJOq7b4YFwsFHe5yYfdbIalI4k3vU2nSDql7YskmUseHsRrJqIPA==", + "license": "MIT", + "dependencies": { + "react-remove-scroll-bar": "^2.3.7", + "react-style-singleton": "^2.2.3", + "tslib": "^2.1.0", + "use-callback-ref": "^1.3.3", + "use-sidecar": "^1.1.3" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-remove-scroll-bar": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.8.tgz", + "integrity": "sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==", + "license": "MIT", + "dependencies": { + "react-style-singleton": "^2.2.2", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-router": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.22.0.tgz", + "integrity": "sha512-q2yemJeg6gw/YixRlRnVx6IRJWZD6fonnfZhN1JIOhV2iJCPeRNSH3V1ISwHf+JWcESzLC3BOLD1T07tmO5dmg==", + "license": "MIT", + "dependencies": { + "@remix-run/router": "1.15.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "react": ">=16.8" + } + }, + "node_modules/react-router-dom": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.22.0.tgz", + "integrity": "sha512-z2w+M4tH5wlcLmH3BMMOMdrtrJ9T3oJJNsAlBJbwk+8Syxd5WFJ7J5dxMEW0/GEXD1BBis4uXRrNIz3mORr0ag==", + "license": "MIT", + "dependencies": { + "@remix-run/router": "1.15.0", + "react-router": "6.22.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "react": ">=16.8", + "react-dom": ">=16.8" + } + }, + "node_modules/react-scripts": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/react-scripts/-/react-scripts-5.0.1.tgz", + "integrity": "sha512-8VAmEm/ZAwQzJ+GOMLbBsTdDKOpuZh7RPs0UymvBR2vRk4iZWCskjbFnxqjrzoIvlNNRZ3QJFx6/qDSi6zSnaQ==", + "license": "MIT", + "dependencies": { + "@babel/core": "^7.16.0", + "@pmmmwh/react-refresh-webpack-plugin": "^0.5.3", + "@svgr/webpack": "^5.5.0", + "babel-jest": "^27.4.2", + "babel-loader": "^8.2.3", + "babel-plugin-named-asset-import": "^0.3.8", + "babel-preset-react-app": "^10.0.1", + "bfj": "^7.0.2", + "browserslist": "^4.18.1", + "camelcase": "^6.2.1", + "case-sensitive-paths-webpack-plugin": "^2.4.0", + "css-loader": "^6.5.1", + "css-minimizer-webpack-plugin": "^3.2.0", + "dotenv": "^10.0.0", + "dotenv-expand": "^5.1.0", + "eslint": "^8.3.0", + "eslint-config-react-app": "^7.0.1", + "eslint-webpack-plugin": "^3.1.1", + "file-loader": "^6.2.0", + "fs-extra": "^10.0.0", + "html-webpack-plugin": "^5.5.0", + "identity-obj-proxy": "^3.0.0", + "jest": "^27.4.3", + "jest-resolve": "^27.4.2", + "jest-watch-typeahead": "^1.0.0", + "mini-css-extract-plugin": "^2.4.5", + "postcss": "^8.4.4", + "postcss-flexbugs-fixes": "^5.0.2", + "postcss-loader": "^6.2.1", + "postcss-normalize": "^10.0.1", + "postcss-preset-env": "^7.0.1", + "prompts": "^2.4.2", + "react-app-polyfill": "^3.0.0", + "react-dev-utils": "^12.0.1", + "react-refresh": "^0.11.0", + "resolve": "^1.20.0", + "resolve-url-loader": "^4.0.0", + "sass-loader": "^12.3.0", + "semver": "^7.3.5", + "source-map-loader": "^3.0.0", + "style-loader": "^3.3.1", + "tailwindcss": "^3.0.2", + "terser-webpack-plugin": "^5.2.5", + "webpack": "^5.64.4", + "webpack-dev-server": "^4.6.0", + "webpack-manifest-plugin": "^4.0.2", + "workbox-webpack-plugin": "^6.4.1" + }, + "bin": { + "react-scripts": "bin/react-scripts.js" + }, + "engines": { + "node": ">=14.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + }, + "peerDependencies": { + "react": ">= 16", + "typescript": "^3.2.1 || ^4" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/react-scripts/node_modules/core-js": { + "version": "3.36.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.36.0.tgz", + "integrity": "sha512-mt7+TUBbTFg5+GngsAxeKBTl5/VS0guFeJacYge9OmHb+m058UwwIm41SE9T4Den7ClatV57B6TYTuJ0CX1MAw==", + "hasInstallScript": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/react-scripts/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/react-scripts/node_modules/react-app-polyfill": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/react-app-polyfill/-/react-app-polyfill-3.0.0.tgz", + "integrity": "sha512-sZ41cxiU5llIB003yxxQBYrARBqe0repqPTTYBTmMqTz9szeBbE37BehCE891NZsmdZqqP+xWKdT3eo3vOzN8w==", + "license": "MIT", + "dependencies": { + "core-js": "^3.19.2", + "object-assign": "^4.1.1", + "promise": "^8.1.0", + "raf": "^3.4.1", + "regenerator-runtime": "^0.13.9", + "whatwg-fetch": "^3.6.2" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/react-scripts/node_modules/regenerator-runtime": { + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", + "license": "MIT" + }, + "node_modules/react-scripts/node_modules/semver": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/react-scripts/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "license": "ISC" + }, + "node_modules/react-shallow-renderer": { + "version": "16.15.0", + "resolved": "https://registry.npmjs.org/react-shallow-renderer/-/react-shallow-renderer-16.15.0.tgz", + "integrity": "sha512-oScf2FqQ9LFVQgA73vr86xl2NaOIX73rh+YFqcOp68CWj56tSfgtGKrEbyhCj0rSijyG9M1CYprTh39fBi5hzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "object-assign": "^4.1.1", + "react-is": "^16.12.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependencies": { + "react": "^16.0.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/react-style-singleton": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.3.tgz", + "integrity": "sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==", + "license": "MIT", + "dependencies": { + "get-nonce": "^1.0.0", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-table": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/react-table/-/react-table-7.8.0.tgz", + "integrity": "sha512-hNaz4ygkZO4bESeFfnfOft73iBUj8K5oKi1EcSHPAibEydfsX2MyU6Z8KCr3mv3C9Kqqh71U+DhZkFvibbnPbA==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "peerDependencies": { + "react": "^16.8.3 || ^17.0.0-0 || ^18.0.0" + } + }, + "node_modules/react-test-renderer": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-test-renderer/-/react-test-renderer-17.0.2.tgz", + "integrity": "sha512-yaQ9cB89c17PUb0x6UfWRs7kQCorVdHlutU1boVPEsB8IDZH6n9tHxMacc3y0JoXOJUsZb/t/Mb8FUWMKaM7iQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "object-assign": "^4.1.1", + "react-is": "^17.0.2", + "react-shallow-renderer": "^16.13.1", + "scheduler": "^0.20.2" + }, + "peerDependencies": { + "react": "17.0.2" + } + }, + "node_modules/react-test-renderer/node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true, + "license": "MIT" + }, + "node_modules/react-test-renderer/node_modules/scheduler": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", + "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + } + }, + "node_modules/react-transition-group": { + "version": "4.4.5", + "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", + "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", + "license": "BSD-3-Clause", + "dependencies": { + "@babel/runtime": "^7.5.5", + "dom-helpers": "^5.0.1", + "loose-envify": "^1.4.0", + "prop-types": "^15.6.2" + }, + "peerDependencies": { + "react": ">=16.6.0", + "react-dom": ">=16.6.0" + } + }, + "node_modules/read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "license": "MIT", + "dependencies": { + "pify": "^2.3.0" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/recharts": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/recharts/-/recharts-3.2.1.tgz", + "integrity": "sha512-0JKwHRiFZdmLq/6nmilxEZl3pqb4T+aKkOkOi/ZISRZwfBhVMgInxzlYU9D4KnCH3KINScLy68m/OvMXoYGZUw==", + "license": "MIT", + "dependencies": { + "@reduxjs/toolkit": "1.x.x || 2.x.x", + "clsx": "^2.1.1", + "decimal.js-light": "^2.5.1", + "es-toolkit": "^1.39.3", + "eventemitter3": "^5.0.1", + "immer": "^10.1.1", + "react-redux": "8.x.x || 9.x.x", + "reselect": "5.1.1", + "tiny-invariant": "^1.3.3", + "use-sync-external-store": "^1.2.2", + "victory-vendor": "^37.0.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "react-is": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/recharts/node_modules/immer": { + "version": "10.1.3", + "resolved": "https://registry.npmjs.org/immer/-/immer-10.1.3.tgz", + "integrity": "sha512-tmjF/k8QDKydUlm3mZU+tjM6zeq9/fFpPqH9SzWmBnVVKsPBg/V66qsMwb3/Bo90cgUN+ghdVBess+hPsxUyRw==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/immer" + } + }, + "node_modules/recursive-readdir": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz", + "integrity": "sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==", + "license": "MIT", + "dependencies": { + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "license": "MIT", + "dependencies": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/redux": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/redux/-/redux-5.0.1.tgz", + "integrity": "sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w==", + "license": "MIT" + }, + "node_modules/redux-thunk": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-3.1.0.tgz", + "integrity": "sha512-NW2r5T6ksUKXCabzhL9z+h206HQw/NJkcLm1GPImRQ8IzfXwRGqjVhKJGauHirT0DAuyy6hjdnMZaRoAcy0Klw==", + "license": "MIT", + "peerDependencies": { + "redux": "^5.0.0" + } + }, + "node_modules/reflect.getprototypeof": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.5.tgz", + "integrity": "sha512-62wgfC8dJWrmxv44CA36pLDnP6KKl3Vhxb7PL+8+qrrFMMoJij4vgiMP8zV4O8+CBMXY1mHxI5fITGHXFHVmQQ==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.0.0", + "get-intrinsic": "^1.2.3", + "globalthis": "^1.0.3", + "which-builtin-type": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "license": "MIT" + }, + "node_modules/regenerate-unicode-properties": { + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz", + "integrity": "sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==", + "license": "MIT", + "dependencies": { + "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", + "license": "MIT" + }, + "node_modules/regenerator-transform": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", + "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.8.4" + } + }, + "node_modules/regex-parser": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.3.0.tgz", + "integrity": "sha512-TVILVSz2jY5D47F4mA4MppkBrafEaiUWJO/TcZHEIuI13AqoZMkK1WMA4Om1YkYbTx+9Ki1/tSUXbceyr9saRg==", + "license": "MIT" + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", + "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.6", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "set-function-name": "^2.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regexpu-core": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", + "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", + "license": "MIT", + "dependencies": { + "@babel/regjsgen": "^0.8.0", + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.1.0", + "regjsparser": "^0.9.1", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/registry-auth-token": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.2.tgz", + "integrity": "sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ==", + "license": "MIT", + "dependencies": { + "rc": "^1.1.6", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/registry-url": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz", + "integrity": "sha512-ZbgR5aZEdf4UKZVBPYIgaglBmSF2Hi94s2PcIHhRGFjKYu+chjJdYfHn4rt3hB6eCKLJ8giVIIfgMa1ehDfZKA==", + "license": "MIT", + "dependencies": { + "rc": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/regjsparser": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", + "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", + "license": "BSD-2-Clause", + "dependencies": { + "jsesc": "~0.5.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", + "bin": { + "jsesc": "bin/jsesc" + } + }, + "node_modules/rehackt": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/rehackt/-/rehackt-0.0.5.tgz", + "integrity": "sha512-BI1rV+miEkaHj8zd2n+gaMgzu/fKz7BGlb4zZ6HAiY9adDmJMkaDcmuXlJFv0eyKUob+oszs3/2gdnXUrzx2Tg==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "*" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "react": { + "optional": true + } + } + }, + "node_modules/relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/renderkid": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", + "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", + "license": "MIT", + "dependencies": { + "css-select": "^4.1.3", + "dom-converter": "^0.2.0", + "htmlparser2": "^6.1.0", + "lodash": "^4.17.21", + "strip-ansi": "^6.0.1" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "license": "MIT" + }, + "node_modules/reselect": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/reselect/-/reselect-5.1.1.tgz", + "integrity": "sha512-K/BG6eIky/SBpzfHZv/dd+9JBFiS4SWV7FIujVyJRux6e45+73RaUHXLmIR1f7WOMaQ0U1km6qwklRQxpJJY0w==", + "license": "MIT" + }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "license": "MIT", + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "license": "MIT", + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-cwd/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve-url-loader": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-4.0.0.tgz", + "integrity": "sha512-05VEMczVREcbtT7Bz+C+96eUO5HDNvdthIiMB34t7FcF8ehcu4wC0sSgPUubs3XW2Q3CNLJk/BJrCU9wVRymiA==", + "license": "MIT", + "dependencies": { + "adjust-sourcemap-loader": "^4.0.0", + "convert-source-map": "^1.7.0", + "loader-utils": "^2.0.0", + "postcss": "^7.0.35", + "source-map": "0.6.1" + }, + "engines": { + "node": ">=8.9" + }, + "peerDependencies": { + "rework": "1.0.1", + "rework-visit": "1.0.0" + }, + "peerDependenciesMeta": { + "rework": { + "optional": true + }, + "rework-visit": { + "optional": true + } + } + }, + "node_modules/resolve-url-loader/node_modules/picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "license": "ISC" + }, + "node_modules/resolve-url-loader/node_modules/postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "license": "MIT", + "dependencies": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/resolve-url-loader/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve.exports": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.1.tgz", + "integrity": "sha512-/NtpHNDN7jWhAaQ9BvBUYZ6YTXsRBgfqWFWP7BZBaoMJO/I3G5OFzvTuWNlZC3aPjins1F+TNrLKsGbH4rfsRQ==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/response-iterator": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/response-iterator/-/response-iterator-0.2.6.tgz", + "integrity": "sha512-pVzEEzrsg23Sh053rmDUvLSkGXluZio0qu8VT6ukrYuvtjVfCbDZH9d6PGXb8HZfzdNZt8feXv/jvUzlhRgLnw==", + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rollup": { + "version": "2.79.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", + "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", + "license": "MIT", + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=10.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/rollup-plugin-terser": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz", + "integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.10.4", + "jest-worker": "^26.2.1", + "serialize-javascript": "^4.0.0", + "terser": "^5.0.0" + }, + "peerDependencies": { + "rollup": "^2.0.0" + } + }, + "node_modules/rollup-plugin-terser/node_modules/jest-worker": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", + "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", + "license": "MIT", + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/rollup-plugin-terser/node_modules/serialize-javascript": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "license": "BSD-3-Clause", + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-array-concat": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.0.tgz", + "integrity": "sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.5", + "get-intrinsic": "^1.2.2", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/safe-regex-test": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", + "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-regex": "^1.1.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT" + }, + "node_modules/sanitize.css": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/sanitize.css/-/sanitize.css-13.0.0.tgz", + "integrity": "sha512-ZRwKbh/eQ6w9vmTjkuG0Ioi3HBwPFce0O+v//ve+aOq1oeCy7jMV2qzzAlpsNuqpqCBjjriM1lbtZbF/Q8jVyA==", + "license": "CC0-1.0" + }, + "node_modules/sass-loader": { + "version": "12.6.0", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-12.6.0.tgz", + "integrity": "sha512-oLTaH0YCtX4cfnJZxKSLAyglED0naiYfNG1iXfU5w1LNZ+ukoA5DtyDIN5zmKVZwYNJP4KRc5Y3hkWga+7tYfA==", + "license": "MIT", + "dependencies": { + "klona": "^2.0.4", + "neo-async": "^2.6.2" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "fibers": ">= 3.1.0", + "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0", + "sass": "^1.3.0", + "sass-embedded": "*", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "fibers": { + "optional": true + }, + "node-sass": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + } + } + }, + "node_modules/sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "license": "ISC" + }, + "node_modules/saxes": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", + "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", + "license": "ISC", + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/scheduler": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", + "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0" + } + }, + "node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", + "license": "MIT" + }, + "node_modules/selfsigned": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz", + "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==", + "license": "MIT", + "dependencies": { + "@types/node-forge": "^1.3.0", + "node-forge": "^1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "license": "MIT", + "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" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "license": "BSD-3-Clause", + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/serve": { + "version": "14.2.5", + "resolved": "https://registry.npmjs.org/serve/-/serve-14.2.5.tgz", + "integrity": "sha512-Qn/qMkzCcMFVPb60E/hQy+iRLpiU8PamOfOSYoAHmmF+fFFmpPpqa6Oci2iWYpTdOUM3VF+TINud7CfbQnsZbA==", + "license": "MIT", + "dependencies": { + "@zeit/schemas": "2.36.0", + "ajv": "8.12.0", + "arg": "5.0.2", + "boxen": "7.0.0", + "chalk": "5.0.1", + "chalk-template": "0.4.0", + "clipboardy": "3.0.0", + "compression": "1.8.1", + "is-port-reachable": "4.0.0", + "serve-handler": "6.1.6", + "update-check": "1.5.4" + }, + "bin": { + "serve": "build/main.js" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/serve-handler": { + "version": "6.1.6", + "resolved": "https://registry.npmjs.org/serve-handler/-/serve-handler-6.1.6.tgz", + "integrity": "sha512-x5RL9Y2p5+Sh3D38Fh9i/iQ5ZK+e4xuXRd/pGbM4D13tgo/MGwbttUk8emytcr1YYzBYs+apnUngBDFYfpjPuQ==", + "license": "MIT", + "dependencies": { + "bytes": "3.0.0", + "content-disposition": "0.5.2", + "mime-types": "2.1.18", + "minimatch": "3.1.2", + "path-is-inside": "1.0.2", + "path-to-regexp": "3.3.0", + "range-parser": "1.2.0" + } + }, + "node_modules/serve-handler/node_modules/bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/serve-handler/node_modules/content-disposition": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", + "integrity": "sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-handler/node_modules/mime-db": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", + "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-handler/node_modules/mime-types": { + "version": "2.1.18", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", + "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", + "license": "MIT", + "dependencies": { + "mime-db": "~1.33.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-handler/node_modules/path-to-regexp": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-3.3.0.tgz", + "integrity": "sha512-qyCH421YQPS2WFDxDjftfc1ZR5WKQzVzqsp4n9M2kQhVOo/ByahFoUNJfl58kOcEGfQ//7weFTDhm+ss8Ecxgw==", + "license": "MIT" + }, + "node_modules/serve-handler/node_modules/range-parser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", + "integrity": "sha512-kA5WQoNVo4t9lNx2kQNFCxKeBl5IbbSNBl1M/tLkw9WCn+hxNBAW5Qh8gdhs63CJnhjJ2zQWFoqPJP2sK1AV5A==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", + "license": "MIT", + "dependencies": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/serve-index/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/serve-index/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", + "license": "MIT", + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "license": "ISC" + }, + "node_modules/serve-index/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/serve-index/node_modules/setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "license": "ISC" + }, + "node_modules/serve-index/node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "license": "MIT", + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/serve/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/serve/node_modules/chalk": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.0.1.tgz", + "integrity": "sha512-Fo07WOYGqMfCWHOzSXOt2CxDbC6skS/jO9ynEcmpANMoPrD+W1r1K6Vx7iNm+AQmETU1Xr2t+n8nzkV9t6xh3w==", + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/serve/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "license": "MIT" + }, + "node_modules/set-function-length": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.1.tgz", + "integrity": "sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g==", + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.2", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.3", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz", + "integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==", + "license": "MIT", + "dependencies": { + "define-data-property": "^1.0.1", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "license": "ISC" + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/shell-quote": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", + "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/shortid": { + "version": "2.2.16", + "resolved": "https://registry.npmjs.org/shortid/-/shortid-2.2.16.tgz", + "integrity": "sha512-Ugt+GIZqvGXCIItnsL+lvFJOiN7RYqlGy7QE41O3YC1xbNSeDGIRO7xg2JJXIAj1cAGnOeC1r7/T9pgrtQbv4g==", + "license": "MIT", + "dependencies": { + "nanoid": "^2.1.0" + } + }, + "node_modules/shortid/node_modules/nanoid": { + "version": "2.1.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-2.1.11.tgz", + "integrity": "sha512-s/snB+WGm6uwi0WjsZdaVcuf3KJXlfGl2LcxgwkEwJF0D/BWzVWAZW/XY4bFaiR7s0Jk3FPvlnepg1H1b1UwlA==", + "license": "MIT" + }, + "node_modules/side-channel": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.5.tgz", + "integrity": "sha512-QcgiIWV4WV7qWExbN5llt6frQB/lBven9pqliLXfGPB+K9ZYXxDozp0wLkHS24kWCm+6YXH/f0HhnObZnZOBnQ==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "license": "ISC" + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "license": "MIT" + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/sockjs": { + "version": "0.3.24", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", + "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", + "license": "MIT", + "dependencies": { + "faye-websocket": "^0.11.3", + "uuid": "^8.3.2", + "websocket-driver": "^0.7.4" + } + }, + "node_modules/source-list-map": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", + "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", + "license": "MIT" + }, + "node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-loader": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-3.0.2.tgz", + "integrity": "sha512-BokxPoLjyl3iOrgkWaakaxqnelAJSS+0V+De0kKIq6lyWrXuiPgYTGp6z3iHmqljKAaLXwZa+ctD8GccRJeVvg==", + "license": "MIT", + "dependencies": { + "abab": "^2.0.5", + "iconv-lite": "^0.6.3", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "license": "MIT" + }, + "node_modules/spdy": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", + "license": "MIT", + "dependencies": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/spdy-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "license": "MIT", + "dependencies": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "license": "BSD-3-Clause" + }, + "node_modules/stable": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", + "license": "MIT" + }, + "node_modules/stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/stack-utils/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/stackframe": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz", + "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==", + "license": "MIT" + }, + "node_modules/static-eval": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/static-eval/-/static-eval-2.0.2.tgz", + "integrity": "sha512-N/D219Hcr2bPjLxPiV+TQE++Tsmrady7TqAJugLy7Xk1EumfDWS/f5dtBbkRCGE7wKKXuYockQoj8Rm2/pVKyg==", + "license": "MIT", + "dependencies": { + "escodegen": "^1.8.1" + } + }, + "node_modules/static-eval/node_modules/escodegen": { + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", + "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", + "license": "BSD-2-Clause", + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=4.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/static-eval/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/static-eval/node_modules/levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", + "license": "MIT", + "dependencies": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/static-eval/node_modules/optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "license": "MIT", + "dependencies": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/static-eval/node_modules/prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/static-eval/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-eval/node_modules/type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", + "license": "MIT", + "dependencies": { + "prelude-ls": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "license": "MIT", + "dependencies": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/string-natural-compare": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/string-natural-compare/-/string-natural-compare-3.0.1.tgz", + "integrity": "sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw==", + "license": "MIT" + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/string-width/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/string.prototype.matchall": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.10.tgz", + "integrity": "sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.5", + "regexp.prototype.flags": "^1.5.0", + "set-function-name": "^2.0.0", + "side-channel": "^1.0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz", + "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz", + "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz", + "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/stringify-object": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", + "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", + "license": "BSD-2-Clause", + "dependencies": { + "get-own-enumerable-property-symbols": "^3.0.0", + "is-obj": "^1.0.1", + "is-regexp": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-comments/-/strip-comments-2.0.1.tgz", + "integrity": "sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "license": "MIT", + "dependencies": { + "min-indent": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/style-loader": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-3.3.4.tgz", + "integrity": "sha512-0WqXzrsMTyb8yjZJHDqwmnwRJvhALK9LfRtRc6B4UTWe8AijYLZYZ9thuJTZc2VfQWINADW/j+LiJnfy2RoC1w==", + "license": "MIT", + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/style-value-types": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/style-value-types/-/style-value-types-5.0.0.tgz", + "integrity": "sha512-08yq36Ikn4kx4YU6RD7jWEv27v4V+PUsOGa4n/as8Et3CuODMJQ00ENeAVXAeydX4Z2j1XHZF1K2sX4mGl18fA==", + "license": "MIT", + "dependencies": { + "hey-listen": "^1.0.8", + "tslib": "^2.1.0" + } + }, + "node_modules/stylehacks": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.1.tgz", + "integrity": "sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.21.4", + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/stylis": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz", + "integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==", + "license": "MIT" + }, + "node_modules/sucrase": { + "version": "3.35.0", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", + "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "glob": "^10.3.10", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/sucrase/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/sucrase/node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/sucrase/node_modules/glob": { + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.5", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/sucrase/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-hyperlinks": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", + "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/svg-parser": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz", + "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==", + "license": "MIT" + }, + "node_modules/svgo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", + "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", + "license": "MIT", + "dependencies": { + "chalk": "^2.4.1", + "coa": "^2.0.2", + "css-select": "^2.0.0", + "css-select-base-adapter": "^0.1.1", + "css-tree": "1.0.0-alpha.37", + "csso": "^4.0.2", + "js-yaml": "^3.13.1", + "mkdirp": "~0.5.1", + "object.values": "^1.1.0", + "sax": "~1.2.4", + "stable": "^0.1.8", + "unquote": "~1.1.1", + "util.promisify": "~1.0.0" + }, + "bin": { + "svgo": "bin/svgo" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/svgo/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/svgo/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/svgo/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/svgo/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/svgo/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "license": "MIT" + }, + "node_modules/svgo/node_modules/css-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", + "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^3.2.1", + "domutils": "^1.7.0", + "nth-check": "^1.0.2" + } + }, + "node_modules/svgo/node_modules/css-what": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz", + "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==", + "license": "BSD-2-Clause", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/svgo/node_modules/dom-serializer": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", + "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", + "license": "MIT", + "dependencies": { + "domelementtype": "^2.0.1", + "entities": "^2.0.0" + } + }, + "node_modules/svgo/node_modules/domutils": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "node_modules/svgo/node_modules/domutils/node_modules/domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", + "license": "BSD-2-Clause" + }, + "node_modules/svgo/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/svgo/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/svgo/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/svgo/node_modules/nth-check": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", + "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "~1.0.0" + } + }, + "node_modules/svgo/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/symbol-observable": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-4.0.0.tgz", + "integrity": "sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==", + "license": "MIT", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "license": "MIT" + }, + "node_modules/tailwindcss": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.1.tgz", + "integrity": "sha512-qAYmXRfk3ENzuPBakNK0SRrUDipP8NQnEY6772uDhflcQz5EhRdD7JNZxyrFHVQNCwULPBn6FNPp9brpO7ctcA==", + "license": "MIT", + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "arg": "^5.0.2", + "chokidar": "^3.5.3", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.3.0", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "jiti": "^1.19.1", + "lilconfig": "^2.1.0", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.0.0", + "postcss": "^8.4.23", + "postcss-import": "^15.1.0", + "postcss-js": "^4.0.1", + "postcss-load-config": "^4.0.1", + "postcss-nested": "^6.0.1", + "postcss-selector-parser": "^6.0.11", + "resolve": "^1.22.2", + "sucrase": "^3.32.0" + }, + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/temp-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", + "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/tempy": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tempy/-/tempy-0.6.0.tgz", + "integrity": "sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw==", + "license": "MIT", + "dependencies": { + "is-stream": "^2.0.0", + "temp-dir": "^2.0.0", + "type-fest": "^0.16.0", + "unique-string": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/tempy/node_modules/type-fest": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz", + "integrity": "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/terminal-link": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", + "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", + "license": "MIT", + "dependencies": { + "ansi-escapes": "^4.2.1", + "supports-hyperlinks": "^2.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/terser": { + "version": "5.27.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.27.1.tgz", + "integrity": "sha512-29wAr6UU/oQpnTw5HoadwjUZnFQXGdOfj0LjZ4sVxzqwHh/QVkvr7m8y9WoR4iN3FRitVduTc6KdjcW38Npsug==", + "license": "BSD-2-Clause", + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.10", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", + "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.20", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.1", + "terser": "^5.26.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "license": "MIT" + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "license": "ISC", + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "license": "MIT" + }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "license": "MIT", + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/throat": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.2.tgz", + "integrity": "sha512-WKexMoJj3vEuK0yFEapj8y64V0A6xcuPuK9Gt1d0R+dzCSJc0lHqQytAbSB4cDAK0dWh4T0E2ETkoLE2WZ41OQ==", + "license": "MIT" + }, + "node_modules/thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", + "license": "MIT" + }, + "node_modules/tiny-invariant": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz", + "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==", + "license": "MIT" + }, + "node_modules/tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "license": "BSD-3-Clause" + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toggle-selection": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/toggle-selection/-/toggle-selection-1.0.6.tgz", + "integrity": "sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==", + "license": "MIT" + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tough-cookie": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz", + "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==", + "license": "BSD-3-Clause", + "dependencies": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.2.0", + "url-parse": "^1.5.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tough-cookie/node_modules/universalify": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", + "license": "MIT", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/tr46": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", + "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", + "license": "MIT", + "dependencies": { + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tryer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tryer/-/tryer-1.0.1.tgz", + "integrity": "sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==", + "license": "MIT" + }, + "node_modules/ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", + "license": "Apache-2.0" + }, + "node_modules/ts-invariant": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/ts-invariant/-/ts-invariant-0.10.3.tgz", + "integrity": "sha512-uivwYcQaxAucv1CzRp2n/QdYPo4ILf9VXgH19zEIjFx2EJufV16P0JtJVpYHy89DItG6Kwj2oIUjrcK5au+4tQ==", + "license": "MIT", + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tsconfig-paths": { + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", + "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", + "license": "MIT", + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, + "node_modules/tsconfig-paths/node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "license": "MIT", + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/tsconfig-paths/node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "license": "0BSD" + }, + "node_modules/tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "license": "MIT", + "dependencies": { + "tslib": "^1.8.1" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + } + }, + "node_modules/tsutils/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "license": "0BSD" + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "license": "MIT", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typed-array-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.1.tgz", + "integrity": "sha512-RSqu1UEuSlrBhHTWC8O9FnPjOduNs4M7rJ4pRKoEjtx1zUNOPN2sSXHLDX+Y2WPbHIxbvg4JFo2DNAEfPIKWoQ==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", + "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", + "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", + "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "is-typed-array": "^1.1.9" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "license": "MIT", + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, + "node_modules/typescript": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/uncontrollable": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/uncontrollable/-/uncontrollable-7.2.1.tgz", + "integrity": "sha512-svtcfoTADIB0nT9nltgjujTi7BzVmwjZClOmskKu/E8FW9BXzg9os8OLr4f8Dlnk0rYWJIWr4wv9eKUXiQvQwQ==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.6.3", + "@types/react": ">=16.9.11", + "invariant": "^2.2.4", + "react-lifecycles-compat": "^3.0.4" + }, + "peerDependencies": { + "react": ">=15.0.0" + } + }, + "node_modules/underscore": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.12.1.tgz", + "integrity": "sha512-hEQt0+ZLDVUMhebKxL4x1BTtDY7bavVofhZ9KZ4aI26X9SRaE+Y3m83XUL1UP2jn8ynjndwCCpEHdUG+9pP1Tw==", + "license": "MIT" + }, + "node_modules/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "license": "MIT" + }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "license": "MIT", + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", + "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unique-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "license": "MIT", + "dependencies": { + "crypto-random-string": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/unquote": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", + "integrity": "sha512-vRCqFv6UhXpWxZPyGDh/F3ZpNv8/qo7w6iufLpQg9aKnQ71qM4B5KiI7Mia9COcjEhrO9LueHpMYjYzsWH3OIg==", + "license": "MIT" + }, + "node_modules/upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", + "license": "MIT", + "engines": { + "node": ">=4", + "yarn": "*" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", + "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/update-check": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/update-check/-/update-check-1.5.4.tgz", + "integrity": "sha512-5YHsflzHP4t1G+8WGPlvKbJEbAJGCgw+Em+dGR1KmBUbr1J36SJBqlHLjR7oob7sco5hWHGQVcr9B2poIVDDTQ==", + "license": "MIT", + "dependencies": { + "registry-auth-token": "3.3.2", + "registry-url": "3.1.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/url-parse": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "license": "MIT", + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "node_modules/use-callback-ref": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.3.tgz", + "integrity": "sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==", + "license": "MIT", + "dependencies": { + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/use-sidecar": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.3.tgz", + "integrity": "sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==", + "license": "MIT", + "dependencies": { + "detect-node-es": "^1.1.0", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/use-sync-external-store": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.5.0.tgz", + "integrity": "sha512-Rb46I4cGGVBmjamjphe8L/UnvJD+uPPtTkNvX5mZgqdbavhI4EbgIWJiIHXJ8bc/i9EQGPRh4DwEURJ552Do0A==", + "license": "MIT", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "license": "MIT" + }, + "node_modules/util.promisify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz", + "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==", + "license": "MIT", + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.2", + "has-symbols": "^1.0.1", + "object.getownpropertydescriptors": "^2.1.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/utila": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", + "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==", + "license": "MIT" + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "license": "MIT", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/v8-to-istanbul": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz", + "integrity": "sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w==", + "license": "ISC", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0", + "source-map": "^0.7.3" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/v8-to-istanbul/node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">= 8" + } + }, + "node_modules/validate.io-array": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/validate.io-array/-/validate.io-array-1.0.6.tgz", + "integrity": "sha512-DeOy7CnPEziggrOO5CZhVKJw6S3Yi7e9e65R1Nl/RTN1vTQKnzjfvks0/8kQ40FP/dsjRAOd4hxmJ7uLa6vxkg==", + "license": "MIT" + }, + "node_modules/validate.io-function": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/validate.io-function/-/validate.io-function-1.0.2.tgz", + "integrity": "sha512-LlFybRJEriSuBnUhQyG5bwglhh50EpTL2ul23MPIuR1odjO7XaMLFV8vHGwp7AZciFxtYOeiSCT5st+XSPONiQ==" + }, + "node_modules/validate.io-integer": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/validate.io-integer/-/validate.io-integer-1.0.5.tgz", + "integrity": "sha512-22izsYSLojN/P6bppBqhgUDjCkr5RY2jd+N2a3DCAUey8ydvrZ/OkGvFPR7qfOpwR2LC5p4Ngzxz36g5Vgr/hQ==", + "dependencies": { + "validate.io-number": "^1.0.3" + } + }, + "node_modules/validate.io-integer-array": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/validate.io-integer-array/-/validate.io-integer-array-1.0.0.tgz", + "integrity": "sha512-mTrMk/1ytQHtCY0oNO3dztafHYyGU88KL+jRxWuzfOmQb+4qqnWmI+gykvGp8usKZOM0H7keJHEbRaFiYA0VrA==", + "dependencies": { + "validate.io-array": "^1.0.3", + "validate.io-integer": "^1.0.4" + } + }, + "node_modules/validate.io-number": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/validate.io-number/-/validate.io-number-1.0.3.tgz", + "integrity": "sha512-kRAyotcbNaSYoDnXvb4MHg/0a1egJdLwS6oJ38TJY7aw9n93Fl/3blIXdyYvPOp55CNxywooG/3BcrwNrBpcSg==" + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/victory-vendor": { + "version": "37.3.6", + "resolved": "https://registry.npmjs.org/victory-vendor/-/victory-vendor-37.3.6.tgz", + "integrity": "sha512-SbPDPdDBYp+5MJHhBCAyI7wKM3d5ivekigc2Dk2s7pgbZ9wIgIBYGVw4zGHBml/qTFbexrofXW6Gu4noGxrOwQ==", + "license": "MIT AND ISC", + "dependencies": { + "@types/d3-array": "^3.0.3", + "@types/d3-ease": "^3.0.0", + "@types/d3-interpolate": "^3.0.1", + "@types/d3-scale": "^4.0.2", + "@types/d3-shape": "^3.1.0", + "@types/d3-time": "^3.0.0", + "@types/d3-timer": "^3.0.0", + "d3-array": "^3.1.6", + "d3-ease": "^3.0.1", + "d3-interpolate": "^3.0.1", + "d3-scale": "^4.0.2", + "d3-shape": "^3.1.0", + "d3-time": "^3.0.0", + "d3-timer": "^3.0.1" + } + }, + "node_modules/w3c-hr-time": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", + "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", + "license": "MIT", + "dependencies": { + "browser-process-hrtime": "^1.0.0" + } + }, + "node_modules/w3c-xmlserializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", + "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", + "license": "MIT", + "dependencies": { + "xml-name-validator": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/walker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "license": "Apache-2.0", + "dependencies": { + "makeerror": "1.0.12" + } + }, + "node_modules/warning": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz", + "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.0.0" + } + }, + "node_modules/watchpack": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", + "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", + "license": "MIT", + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "license": "MIT", + "dependencies": { + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/web-vitals": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/web-vitals/-/web-vitals-1.1.2.tgz", + "integrity": "sha512-PFMKIY+bRSXlMxVAQ+m2aw9c/ioUYfDgrYot0YUa+/xa0sakubWhSDyxAKwzymvXVdF4CZI71g06W+mqhzu6ig==", + "license": "Apache-2.0" + }, + "node_modules/webidl-conversions": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", + "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=10.4" + } + }, + "node_modules/webpack": { + "version": "5.90.2", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.90.2.tgz", + "integrity": "sha512-ziXu8ABGr0InCMEYFnHrYweinHK2PWrMqnwdHk2oK3rRhv/1B+2FnfwYv5oD+RrknK/Pp/Hmyvu+eAsaMYhzCw==", + "license": "MIT", + "dependencies": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^1.0.5", + "@webassemblyjs/ast": "^1.11.5", + "@webassemblyjs/wasm-edit": "^1.11.5", + "@webassemblyjs/wasm-parser": "^1.11.5", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.9.0", + "browserslist": "^4.21.10", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.15.0", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.2.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.10", + "watchpack": "^2.4.0", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-dev-middleware": { + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.4.tgz", + "integrity": "sha512-BVdTqhhs+0IfoeAf7EoH5WE+exCmqGerHfDM0IL096Px60Tq2Mn9MAbnaGUe6HiMa41KMCYF19gyzZmBcq/o4Q==", + "license": "MIT", + "dependencies": { + "colorette": "^2.0.10", + "memfs": "^3.4.3", + "mime-types": "^2.1.31", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/webpack-dev-middleware/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/webpack-dev-middleware/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/webpack-dev-middleware/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "license": "MIT" + }, + "node_modules/webpack-dev-middleware/node_modules/schema-utils": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/webpack-dev-server": { + "version": "4.15.1", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.1.tgz", + "integrity": "sha512-5hbAst3h3C3L8w6W4P96L5vaV0PxSmJhxZvWKYIdgxOQm8pNZ5dEOmmSLBVpP85ReeyRt6AS1QJNyo/oFFPeVA==", + "license": "MIT", + "dependencies": { + "@types/bonjour": "^3.5.9", + "@types/connect-history-api-fallback": "^1.3.5", + "@types/express": "^4.17.13", + "@types/serve-index": "^1.9.1", + "@types/serve-static": "^1.13.10", + "@types/sockjs": "^0.3.33", + "@types/ws": "^8.5.5", + "ansi-html-community": "^0.0.8", + "bonjour-service": "^1.0.11", + "chokidar": "^3.5.3", + "colorette": "^2.0.10", + "compression": "^1.7.4", + "connect-history-api-fallback": "^2.0.0", + "default-gateway": "^6.0.3", + "express": "^4.17.3", + "graceful-fs": "^4.2.6", + "html-entities": "^2.3.2", + "http-proxy-middleware": "^2.0.3", + "ipaddr.js": "^2.0.1", + "launch-editor": "^2.6.0", + "open": "^8.0.9", + "p-retry": "^4.5.0", + "rimraf": "^3.0.2", + "schema-utils": "^4.0.0", + "selfsigned": "^2.1.1", + "serve-index": "^1.9.1", + "sockjs": "^0.3.24", + "spdy": "^4.0.2", + "webpack-dev-middleware": "^5.3.1", + "ws": "^8.13.0" + }, + "bin": { + "webpack-dev-server": "bin/webpack-dev-server.js" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.37.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + }, + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-dev-server/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/webpack-dev-server/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/webpack-dev-server/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "license": "MIT" + }, + "node_modules/webpack-dev-server/node_modules/schema-utils": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/webpack-dev-server/node_modules/ws": { + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.16.0.tgz", + "integrity": "sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/webpack-manifest-plugin": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/webpack-manifest-plugin/-/webpack-manifest-plugin-4.1.1.tgz", + "integrity": "sha512-YXUAwxtfKIJIKkhg03MKuiFAD72PlrqCiwdwO4VEXdRO5V0ORCNwaOwAZawPZalCbmH9kBDmXnNeQOw+BIEiow==", + "license": "MIT", + "dependencies": { + "tapable": "^2.0.0", + "webpack-sources": "^2.2.0" + }, + "engines": { + "node": ">=12.22.0" + }, + "peerDependencies": { + "webpack": "^4.44.2 || ^5.47.0" + } + }, + "node_modules/webpack-manifest-plugin/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-manifest-plugin/node_modules/webpack-sources": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.3.1.tgz", + "integrity": "sha512-y9EI9AO42JjEcrTJFOYmVywVZdKVUfOvDUPsJea5GIr1JOEGFVqwlY2K098fFoIjOkDzHn2AjRvM8dsBZu+gCA==", + "license": "MIT", + "dependencies": { + "source-list-map": "^2.0.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "license": "MIT", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "license": "Apache-2.0", + "dependencies": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "license": "Apache-2.0", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/whatwg-encoding": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", + "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", + "license": "MIT", + "dependencies": { + "iconv-lite": "0.4.24" + } + }, + "node_modules/whatwg-encoding/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/whatwg-fetch": { + "version": "3.6.20", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.20.tgz", + "integrity": "sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==", + "license": "MIT" + }, + "node_modules/whatwg-mimetype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", + "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", + "license": "MIT" + }, + "node_modules/whatwg-url": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", + "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", + "license": "MIT", + "dependencies": { + "lodash": "^4.7.0", + "tr46": "^2.1.0", + "webidl-conversions": "^6.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "license": "MIT", + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.3.tgz", + "integrity": "sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==", + "license": "MIT", + "dependencies": { + "function.prototype.name": "^1.1.5", + "has-tostringtag": "^1.0.0", + "is-async-function": "^2.0.0", + "is-date-object": "^1.0.5", + "is-finalizationregistry": "^1.0.2", + "is-generator-function": "^1.0.10", + "is-regex": "^1.1.4", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.9" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-collection": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", + "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", + "license": "MIT", + "dependencies": { + "is-map": "^2.0.1", + "is-set": "^2.0.1", + "is-weakmap": "^2.0.1", + "is-weakset": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.14.tgz", + "integrity": "sha512-VnXFiIW8yNn9kIHN88xvZ4yOWchftKDsRJ8fEPacX/wl1lOvBrhsJ/OeJCXq7B0AaijRuqgzSKalJoPk+D8MPg==", + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.6", + "call-bind": "^1.0.5", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/widest-line": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-4.0.1.tgz", + "integrity": "sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==", + "license": "MIT", + "dependencies": { + "string-width": "^5.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/widest-line/node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/widest-line/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/widest-line/node_modules/strip-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/workbox-background-sync": { + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-6.6.1.tgz", + "integrity": "sha512-trJd3ovpWCvzu4sW0E8rV3FUyIcC0W8G+AZ+VcqzzA890AsWZlUGOTSxIMmIHVusUw/FDq1HFWfy/kC/WTRqSg==", + "license": "MIT", + "dependencies": { + "idb": "^7.0.1", + "workbox-core": "6.6.1" + } + }, + "node_modules/workbox-broadcast-update": { + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/workbox-broadcast-update/-/workbox-broadcast-update-6.6.1.tgz", + "integrity": "sha512-fBhffRdaANdeQ1V8s692R9l/gzvjjRtydBOvR6WCSB0BNE2BacA29Z4r9/RHd9KaXCPl6JTdI9q0bR25YKP8TQ==", + "license": "MIT", + "dependencies": { + "workbox-core": "6.6.1" + } + }, + "node_modules/workbox-build": { + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/workbox-build/-/workbox-build-6.6.1.tgz", + "integrity": "sha512-INPgDx6aRycAugUixbKgiEQBWD0MPZqU5r0jyr24CehvNuLPSXp/wGOpdRJmts656lNiXwqV7dC2nzyrzWEDnw==", + "license": "MIT", + "dependencies": { + "@apideck/better-ajv-errors": "^0.3.1", + "@babel/core": "^7.11.1", + "@babel/preset-env": "^7.11.0", + "@babel/runtime": "^7.11.2", + "@rollup/plugin-babel": "^5.2.0", + "@rollup/plugin-node-resolve": "^11.2.1", + "@rollup/plugin-replace": "^2.4.1", + "@surma/rollup-plugin-off-main-thread": "^2.2.3", + "ajv": "^8.6.0", + "common-tags": "^1.8.0", + "fast-json-stable-stringify": "^2.1.0", + "fs-extra": "^9.0.1", + "glob": "^7.1.6", + "lodash": "^4.17.20", + "pretty-bytes": "^5.3.0", + "rollup": "^2.43.1", + "rollup-plugin-terser": "^7.0.0", + "source-map": "^0.8.0-beta.0", + "stringify-object": "^3.3.0", + "strip-comments": "^2.0.1", + "tempy": "^0.6.0", + "upath": "^1.2.0", + "workbox-background-sync": "6.6.1", + "workbox-broadcast-update": "6.6.1", + "workbox-cacheable-response": "6.6.1", + "workbox-core": "6.6.1", + "workbox-expiration": "6.6.1", + "workbox-google-analytics": "6.6.1", + "workbox-navigation-preload": "6.6.1", + "workbox-precaching": "6.6.1", + "workbox-range-requests": "6.6.1", + "workbox-recipes": "6.6.1", + "workbox-routing": "6.6.1", + "workbox-strategies": "6.6.1", + "workbox-streams": "6.6.1", + "workbox-sw": "6.6.1", + "workbox-window": "6.6.1" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/workbox-build/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/workbox-build/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "license": "MIT", + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/workbox-build/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "license": "MIT" + }, + "node_modules/workbox-build/node_modules/source-map": { + "version": "0.8.0-beta.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz", + "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==", + "license": "BSD-3-Clause", + "dependencies": { + "whatwg-url": "^7.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/workbox-build/node_modules/tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==", + "license": "MIT", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/workbox-build/node_modules/webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", + "license": "BSD-2-Clause" + }, + "node_modules/workbox-build/node_modules/whatwg-url": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", + "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", + "license": "MIT", + "dependencies": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + }, + "node_modules/workbox-cacheable-response": { + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/workbox-cacheable-response/-/workbox-cacheable-response-6.6.1.tgz", + "integrity": "sha512-85LY4veT2CnTCDxaVG7ft3NKaFbH6i4urZXgLiU4AiwvKqS2ChL6/eILiGRYXfZ6gAwDnh5RkuDbr/GMS4KSag==", + "license": "MIT", + "dependencies": { + "workbox-core": "6.6.1" + } + }, + "node_modules/workbox-core": { + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/workbox-core/-/workbox-core-6.6.1.tgz", + "integrity": "sha512-ZrGBXjjaJLqzVothoE12qTbVnOAjFrHDXpZe7coCb6q65qI/59rDLwuFMO4PcZ7jcbxY+0+NhUVztzR/CbjEFw==", + "license": "MIT" + }, + "node_modules/workbox-expiration": { + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/workbox-expiration/-/workbox-expiration-6.6.1.tgz", + "integrity": "sha512-qFiNeeINndiOxaCrd2DeL1Xh1RFug3JonzjxUHc5WkvkD2u5abY3gZL1xSUNt3vZKsFFGGORItSjVTVnWAZO4A==", + "license": "MIT", + "dependencies": { + "idb": "^7.0.1", + "workbox-core": "6.6.1" + } + }, + "node_modules/workbox-google-analytics": { + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/workbox-google-analytics/-/workbox-google-analytics-6.6.1.tgz", + "integrity": "sha512-1TjSvbFSLmkpqLcBsF7FuGqqeDsf+uAXO/pjiINQKg3b1GN0nBngnxLcXDYo1n/XxK4N7RaRrpRlkwjY/3ocuA==", + "license": "MIT", + "dependencies": { + "workbox-background-sync": "6.6.1", + "workbox-core": "6.6.1", + "workbox-routing": "6.6.1", + "workbox-strategies": "6.6.1" + } + }, + "node_modules/workbox-navigation-preload": { + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/workbox-navigation-preload/-/workbox-navigation-preload-6.6.1.tgz", + "integrity": "sha512-DQCZowCecO+wRoIxJI2V6bXWK6/53ff+hEXLGlQL4Rp9ZaPDLrgV/32nxwWIP7QpWDkVEtllTAK5h6cnhxNxDA==", + "license": "MIT", + "dependencies": { + "workbox-core": "6.6.1" + } + }, + "node_modules/workbox-precaching": { + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/workbox-precaching/-/workbox-precaching-6.6.1.tgz", + "integrity": "sha512-K4znSJ7IKxCnCYEdhNkMr7X1kNh8cz+mFgx9v5jFdz1MfI84pq8C2zG+oAoeE5kFrUf7YkT5x4uLWBNg0DVZ5A==", + "license": "MIT", + "dependencies": { + "workbox-core": "6.6.1", + "workbox-routing": "6.6.1", + "workbox-strategies": "6.6.1" + } + }, + "node_modules/workbox-range-requests": { + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/workbox-range-requests/-/workbox-range-requests-6.6.1.tgz", + "integrity": "sha512-4BDzk28govqzg2ZpX0IFkthdRmCKgAKreontYRC5YsAPB2jDtPNxqx3WtTXgHw1NZalXpcH/E4LqUa9+2xbv1g==", + "license": "MIT", + "dependencies": { + "workbox-core": "6.6.1" + } + }, + "node_modules/workbox-recipes": { + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/workbox-recipes/-/workbox-recipes-6.6.1.tgz", + "integrity": "sha512-/oy8vCSzromXokDA+X+VgpeZJvtuf8SkQ8KL0xmRivMgJZrjwM3c2tpKTJn6PZA6TsbxGs3Sc7KwMoZVamcV2g==", + "license": "MIT", + "dependencies": { + "workbox-cacheable-response": "6.6.1", + "workbox-core": "6.6.1", + "workbox-expiration": "6.6.1", + "workbox-precaching": "6.6.1", + "workbox-routing": "6.6.1", + "workbox-strategies": "6.6.1" + } + }, + "node_modules/workbox-routing": { + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/workbox-routing/-/workbox-routing-6.6.1.tgz", + "integrity": "sha512-j4ohlQvfpVdoR8vDYxTY9rA9VvxTHogkIDwGdJ+rb2VRZQ5vt1CWwUUZBeD/WGFAni12jD1HlMXvJ8JS7aBWTg==", + "license": "MIT", + "dependencies": { + "workbox-core": "6.6.1" + } + }, + "node_modules/workbox-strategies": { + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/workbox-strategies/-/workbox-strategies-6.6.1.tgz", + "integrity": "sha512-WQLXkRnsk4L81fVPkkgon1rZNxnpdO5LsO+ws7tYBC6QQQFJVI6v98klrJEjFtZwzw/mB/HT5yVp7CcX0O+mrw==", + "license": "MIT", + "dependencies": { + "workbox-core": "6.6.1" + } + }, + "node_modules/workbox-streams": { + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/workbox-streams/-/workbox-streams-6.6.1.tgz", + "integrity": "sha512-maKG65FUq9e4BLotSKWSTzeF0sgctQdYyTMq529piEN24Dlu9b6WhrAfRpHdCncRS89Zi2QVpW5V33NX8PgH3Q==", + "license": "MIT", + "dependencies": { + "workbox-core": "6.6.1", + "workbox-routing": "6.6.1" + } + }, + "node_modules/workbox-sw": { + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/workbox-sw/-/workbox-sw-6.6.1.tgz", + "integrity": "sha512-R7whwjvU2abHH/lR6kQTTXLHDFU2izht9kJOvBRYK65FbwutT4VvnUAJIgHvfWZ/fokrOPhfoWYoPCMpSgUKHQ==", + "license": "MIT" + }, + "node_modules/workbox-webpack-plugin": { + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/workbox-webpack-plugin/-/workbox-webpack-plugin-6.6.1.tgz", + "integrity": "sha512-zpZ+ExFj9NmiI66cFEApyjk7hGsfJ1YMOaLXGXBoZf0v7Iu6hL0ZBe+83mnDq3YYWAfA3fnyFejritjOHkFcrA==", + "license": "MIT", + "dependencies": { + "fast-json-stable-stringify": "^2.1.0", + "pretty-bytes": "^5.4.1", + "upath": "^1.2.0", + "webpack-sources": "^1.4.3", + "workbox-build": "6.6.1" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "webpack": "^4.4.0 || ^5.9.0" + } + }, + "node_modules/workbox-webpack-plugin/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/workbox-webpack-plugin/node_modules/webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "license": "MIT", + "dependencies": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + } + }, + "node_modules/workbox-window": { + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/workbox-window/-/workbox-window-6.6.1.tgz", + "integrity": "sha512-wil4nwOY58nTdCvif/KEZjQ2NP8uk3gGeRNy2jPBbzypU4BT4D9L8xiwbmDBpZlSgJd2xsT9FvSNU0gsxV51JQ==", + "license": "MIT", + "dependencies": { + "@types/trusted-types": "^2.0.2", + "workbox-core": "6.6.1" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "license": "ISC" + }, + "node_modules/write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "node_modules/ws": { + "version": "7.5.9", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", + "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", + "license": "MIT", + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xml-name-validator": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", + "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", + "license": "Apache-2.0" + }, + "node_modules/xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "license": "MIT" + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "license": "ISC" + }, + "node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "license": "ISC", + "engines": { + "node": ">= 6" + } + }, + "node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "license": "MIT", + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zen-observable": { + "version": "0.8.15", + "resolved": "https://registry.npmjs.org/zen-observable/-/zen-observable-0.8.15.tgz", + "integrity": "sha512-PQ2PC7R9rslx84ndNBZB/Dkv8V8fZEpk83RLgXtYd0fwUgEjseMn1Dgajh2x6S8QbZAFa9p2qVCEuYZNgve0dQ==", + "license": "MIT" + }, + "node_modules/zen-observable-ts": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/zen-observable-ts/-/zen-observable-ts-1.2.5.tgz", + "integrity": "sha512-QZWQekv6iB72Naeake9hS1KxHlotfRpe+WGNbNx5/ta+R3DNjVO2bswf63gXlWDcs+EMd7XY8HfVQyP1X6T4Zg==", + "license": "MIT", + "dependencies": { + "zen-observable": "0.8.15" + } + } + } +} diff --git a/frontend/package.json b/frontend/package.json index e5efd488..78f10ab4 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -4,8 +4,8 @@ "private": true, "dependencies": { "@apollo/client": "^3.7.1", - "serve": "^14.2.1", "@chakra-ui/anatomy": "^2.3.4", + "@chakra-ui/icons": "^2.2.4", "@chakra-ui/react": "^2.8.2", "@chakra-ui/styled-system": "^2.12.0", "@chakra-ui/theme-tools": "^2.2.6", @@ -35,6 +35,7 @@ "bootstrap": "^4.6.0", "buffer": "^6.0.3", "crypto-js": "^4.2.0", + "date-fns": "^4.1.0", "framer-motion": "6", "graphql": "^15.5.0", "humps": "^2.0.1", @@ -56,15 +57,14 @@ "react-scripts": "^5.0.1", "react-table": "^7.7.0", "recharts": "^3.2.1", + "serve": "^14.2.1", "typescript": "^4.9.3", "web-vitals": "^1.0.1" }, "scripts": { - "start": "NODE_OPTIONS='--max-old-space-size=4096' react-scripts start", - "build": "NODE_OPTIONS='--max-old-space-size=4096' react-scripts build", + "start": "react-scripts start", + "build": "react-scripts build", "serve": "serve -s build -l 3000", - "test": "NODE_OPTIONS='--max-old-space-size=4096' react-scripts test", - "eject": "react-scripts eject", "lint": "eslint . --ext .ts,.tsx,.js,.jsx --cache", "fix": "eslint . --ext .ts,.tsx,.js,.jsx --fix --cache" }, diff --git a/frontend/public/assets/goal_trophy.png b/frontend/public/assets/goal_trophy.png deleted file mode 100644 index 1757cfa2..00000000 Binary files a/frontend/public/assets/goal_trophy.png and /dev/null differ diff --git a/frontend/public/assets/marillac_bucks.png b/frontend/public/assets/marillac_bucks.png deleted file mode 100644 index 486361d5..00000000 Binary files a/frontend/public/assets/marillac_bucks.png and /dev/null differ diff --git a/frontend/public/badges/baby.svg b/frontend/public/badges/baby.svg deleted file mode 100644 index 6fb06541..00000000 --- a/frontend/public/badges/baby.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/frontend/public/badges/diamond.svg b/frontend/public/badges/diamond.svg deleted file mode 100644 index 61bcf548..00000000 --- a/frontend/public/badges/diamond.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/frontend/public/badges/five_star.svg b/frontend/public/badges/five_star.svg deleted file mode 100644 index c4ec5c80..00000000 --- a/frontend/public/badges/five_star.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/frontend/public/badges/flower.svg b/frontend/public/badges/flower.svg deleted file mode 100644 index c555c575..00000000 --- a/frontend/public/badges/flower.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/frontend/public/badges/four_star.svg b/frontend/public/badges/four_star.svg deleted file mode 100644 index 072f2e4b..00000000 --- a/frontend/public/badges/four_star.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/frontend/public/badges/gemstone.svg b/frontend/public/badges/gemstone.svg deleted file mode 100644 index 65f4a9df..00000000 --- a/frontend/public/badges/gemstone.svg +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/frontend/public/badges/group.svg b/frontend/public/badges/group.svg deleted file mode 100644 index 749963ba..00000000 --- a/frontend/public/badges/group.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/frontend/public/badges/heart.svg b/frontend/public/badges/heart.svg deleted file mode 100644 index 2f91dd0a..00000000 --- a/frontend/public/badges/heart.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/frontend/public/badges/home.svg b/frontend/public/badges/home.svg deleted file mode 100644 index 577ccf2a..00000000 --- a/frontend/public/badges/home.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/frontend/public/badges/money.svg b/frontend/public/badges/money.svg deleted file mode 100644 index 03274c59..00000000 --- a/frontend/public/badges/money.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/frontend/public/badges/pencil.svg b/frontend/public/badges/pencil.svg deleted file mode 100644 index 3e444c3e..00000000 --- a/frontend/public/badges/pencil.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/frontend/public/badges/tool.svg b/frontend/public/badges/tool.svg deleted file mode 100644 index 97c0fd5a..00000000 --- a/frontend/public/badges/tool.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/frontend/public/badges/wings.svg b/frontend/public/badges/wings.svg deleted file mode 100644 index 0c3b058a..00000000 --- a/frontend/public/badges/wings.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx index 938cc794..7c7b46ca 100644 --- a/frontend/src/App.tsx +++ b/frontend/src/App.tsx @@ -1,145 +1,208 @@ import React from "react"; import { BrowserRouter as Router, + Outlet, Route, - Routes as Switch, + Routes, } from "react-router-dom"; - -import { ApolloProvider } from "@apollo/client"; -import { ChakraProvider } from "@chakra-ui/react"; -import getApolloClient from "./utils/getApolloClient"; -import getChakraTheme from "./utils/getChakraTheme"; +import { ApolloProvider, ApolloClient, InMemoryCache } from "@apollo/client"; +import { setContext } from "@apollo/client/link/context"; +import { createUploadLink } from "apollo-upload-client"; +import { ChakraProvider, extendTheme } from "@chakra-ui/react"; import AdminLoginPage from "./admin/pages/login/Main"; import AdminHomePage from "./admin/pages/home/Main"; -import AdminSchedulePage from "./admin/pages/schedule/Main"; -import AdminAnnouncementsPage from "./admin/pages/announcements/Main"; -import AdminParticipantsPage from "./admin/pages/participants/Main"; -import AdminTasksPage from "./admin/pages/tasks/Main"; +// import AdminSchedulePage from "./admin/pages/schedule/Main"; +// import AdminAnnouncementsPage from "./admin/pages/announcements/Main"; +// import AdminParticipantsPage from "./admin/pages/participants/Main"; +// import AdminTasksPage from "./admin/pages/tasks/Main"; import AdminBadgesPage from "./admin/pages/badges/Main"; -import AdminReportsPage from "./admin/pages/reports/Main"; +// import AdminReportsPage from "./admin/pages/reports/Main"; import ParticipantLoginPage from "./participant/pages/login/Main"; -import ParticipantHomePage from "./participant/pages/home/Main"; -import ParticipantSchedulePage from "./participant/pages/schedule/Main"; -import ParticipantAnnouncementsPage from "./participant/pages/announcements/Main"; -import ParticipantProgressPage from "./participant/pages/progress/Main"; - -import NotFound from "./NotFound"; +// import ParticipantHomePage from "./participant/pages/home/Main"; +// import ParticipantSchedulePage from "./participant/pages/schedule/Main"; +// import ParticipantAnnouncementsPage from "./participant/pages/announcements/Main"; +// import ParticipantProgressPage from "./participant/pages/progress/Main"; import * as ROUTES from "./constants/routes"; -import AdminRoute from "./admin/common/misc/AdminRoute"; -import ParticipantRoute from "./participant/common/ParticipantRoute"; +import AdminRoute from "./admin/AdminRoute"; +import ParticipantRoute from "./participant/ParticipantRoute"; +import { AdminProvider } from "./admin/AdminContext"; +import { ParticipantProvider } from "./participant/ParticipantContext"; + +import NotFoundScreen from "./ui/screens/NotFoundScreen"; +import UI from "./ui/UI"; +import colors from "./theme/colors"; +import { Text, textStyles } from "./theme/typography"; + +function initApolloClient() { + const endpoint = createUploadLink({ + uri: `${process.env.REACT_APP_BACKEND_URL}/graphql`, + credentials: "include", + }); + + const header = setContext(async (_, { headers }) => { + let token = null; + token = localStorage.getItem("token"); + return { + headers: { + ...headers, + authorization: token ? `Bearer ${token}` : "", + }, + }; + }); + + const apolloClient = new ApolloClient({ + link: header.concat(endpoint), + cache: new InMemoryCache(), + }); + + return apolloClient; +} + +const AdminLayout = (): React.ReactElement => ( + + + +); + +const ParticipantLayout = (): React.ReactElement => ( + + + +); const App = (): React.ReactElement => { - const theme = getChakraTheme(); - const apolloClient = getApolloClient(); + const theme = extendTheme({ + colors, + textStyles, + components: { Text }, + }); + const apolloClient = initApolloClient(); return ( - - } - /> - - - - } - /> - - - - } - /> - - - - } - /> - - - - } - /> - - - - } - /> - - - - } - /> - - - - } - /> - - } - /> - - - - } - /> - - - - } - /> - - - - } - /> - - - - } - /> + + }> + } + /> + + + + } + /> + + + + } + /> + + + }> + } + /> + + {/* }> + } + /> + + + + } + /> + + + + } + /> + + + + } + /> + + + + } + /> + + + + } + /> + + }> + } + /> + + + + } + /> + + + + } + /> + + + + } + /> + + + + } + /> + */} - } /> - + } /> + } /> + diff --git a/frontend/src/Loading.tsx b/frontend/src/Loading.tsx deleted file mode 100644 index d3d9664d..00000000 --- a/frontend/src/Loading.tsx +++ /dev/null @@ -1,10 +0,0 @@ -import { Flex, Spinner } from "@chakra-ui/react"; -import React from "react"; - -export default function Loading() { - return ( - - - - ); -} diff --git a/frontend/src/admin/AdminContext.tsx b/frontend/src/admin/AdminContext.tsx new file mode 100644 index 00000000..052ac90a --- /dev/null +++ b/frontend/src/admin/AdminContext.tsx @@ -0,0 +1,39 @@ +import React, { createContext, ReactNode, useState } from "react"; + +type AdminContextType = { + role: string | null; + setRole: (role: string) => void; + roomToParticipant: Record; + setRoomToParticipant: (roomToParticipant: Record) => void; +}; + +export const AdminContext = createContext({ + role: null, + setRole: () => {}, + roomToParticipant: {}, + setRoomToParticipant: () => {}, +}); + +interface AdminProviderProps { + children: ReactNode; +} + +export const AdminProvider: React.FC = ({ children }) => { + const [role, setRole] = useState(null); + const [roomToParticipant, setRoomToParticipant] = useState< + Record + >({}); + + return ( + + {children} + + ); +}; diff --git a/frontend/src/admin/common/misc/SideBar.tsx b/frontend/src/admin/AdminMenu.tsx similarity index 89% rename from frontend/src/admin/common/misc/SideBar.tsx rename to frontend/src/admin/AdminMenu.tsx index c93ce916..746ceb5f 100644 --- a/frontend/src/admin/common/misc/SideBar.tsx +++ b/frontend/src/admin/AdminMenu.tsx @@ -1,9 +1,9 @@ import React, { useState } from "react"; import { useNavigate } from "react-router-dom"; import { Tabs, TabList, Tab, Box, Flex, Text } from "@chakra-ui/react"; -import * as ROUTES from "../../../constants/routes"; -import SimpleButton from "../buttons/SimpleButton"; -import ModalContainer from "../form/ModalContainer"; +import * as ROUTES from "../constants/routes"; +import PopupContainer from "../ui/containers/PopupContainer"; +import BlackOutlineButton from "../ui/buttons/BlackOutlineButton"; type SideBarTabProps = { label: string; @@ -41,12 +41,12 @@ type SignOutPopUpProps = { function SignOutPopUp({ cancel }: SignOutPopUpProps) { const navigate = useNavigate(); const handleSignOut = () => { - localStorage.removeItem("admin_token"); + localStorage.removeItem("token"); return navigate(ROUTES.ADMIN_LOGIN_PAGE); }; return ( - Are you sure you want to sign out? - + ); } -export default function SideBar() { +export default function AdminMenu() { const navigate = useNavigate(); const [signOut, setSignOut] = useState(false); @@ -114,8 +114,8 @@ export default function SideBar() { - setSignOut(true)} is_active={signOut} text_color="danger.900" diff --git a/frontend/src/admin/AdminRoute.tsx b/frontend/src/admin/AdminRoute.tsx new file mode 100644 index 00000000..837f3e57 --- /dev/null +++ b/frontend/src/admin/AdminRoute.tsx @@ -0,0 +1,113 @@ +import React, { useEffect, useState, useContext } from "react"; +import { Navigate } from "react-router-dom"; +import { Flex } from "@chakra-ui/react"; +import { useLazyQuery } from "@apollo/client"; +import { verifyRole } from "../helpers/verifyRole"; +import { ADMIN, RELIEF } from "../constants/roles"; +import LoadingScreen from "../ui/screens/LoadingScreen"; +import { ADMIN_LOGIN_PAGE } from "../constants/routes"; +import { GET_CURRENT_PARTICIPANTS } from "../gql/participantRequests"; +import { AdminContext } from "./AdminContext"; +import ErrorScreen from "../ui/screens/ErrorScreen"; +import AdminMenu from "./AdminMenu"; + +type AdminRouteProps = { + children: React.ReactElement; +}; + +export default function AdminRoute({ children }: AdminRouteProps) { + const adminContext = useContext(AdminContext); + + const [authorized, setAuthorized] = useState(false); + const [loading, setLoading] = useState(true); + const [error, setError] = useState(""); + + const [getCurrentParticipants] = useLazyQuery(GET_CURRENT_PARTICIPANTS, { + onCompleted: (data) => { + if (!data || !data.getCurrentParticipants || !adminContext) { + setError("error fetching participants for context"); + return; + } + const roomToParticipantMap: Record = {}; + data.getCurrentParticipants.forEach((participant: any) => { + roomToParticipantMap[participant.room] = participant.pid; + }); + adminContext.setRoomToParticipant(roomToParticipantMap); + }, + onError: (err: Error) => { + setError(err.message); + }, + }); + + useEffect(() => { + const authorize = async () => { + const isStaff = await verifyRole([ADMIN, RELIEF]); + if (isStaff) { + setAuthorized(true); + } + setLoading(false); + }; + authorize(); + }, []); + + useEffect(() => { + if (authorized) { + setLoading(true); + getCurrentParticipants(); + setLoading(false); + } + }, [authorized]); + + if (loading) { + return ; + } + + if (error) { + return ; + } + + if (!authorized) { + return ; + } + + return ( + + + + + + + {children} + + + + + ); +} diff --git a/frontend/src/admin/common/form/ModalContainer.tsx b/frontend/src/admin/common/form/ModalContainer.tsx deleted file mode 100644 index 498373f6..00000000 --- a/frontend/src/admin/common/form/ModalContainer.tsx +++ /dev/null @@ -1,71 +0,0 @@ -import React from "react"; -import { - Modal, - ModalOverlay, - ModalContent, - Flex, - Text, -} from "@chakra-ui/react"; -import { ModalProps } from "../../../types/component"; -import SimpleButton from "../buttons/SimpleButton"; -import OrangeButton from "../buttons/OrangeButton"; - -export default function ModalContainer({ - title, - submit_text, - submit_action, - cancel_action, - children, - error = "", -}: ModalProps) { - return ( - - - - - {title} - - - {children} - {error && ( - - {error} - - )} - - - - - - - - ); -} diff --git a/frontend/src/admin/common/form/SelectionInput.tsx b/frontend/src/admin/common/form/SelectionInput.tsx deleted file mode 100644 index 99ae7bed..00000000 --- a/frontend/src/admin/common/form/SelectionInput.tsx +++ /dev/null @@ -1,89 +0,0 @@ -import React from "react"; -import { - FormControl, - RadioGroup, - Stack, - Radio, - Text, - Select, -} from "@chakra-ui/react"; -import { InputProps } from "../../../types/component"; - -type SelectionInputProps = InputProps & { - mode: "radio" | "dropdown"; - value_options: Record; -}; - -export default function SelectionInput({ - label, - current_value, - action, - mode, - value_options, - width = "450px", -}: SelectionInputProps) { - if (mode === "radio") { - return ( - - - {label} - - - - {Object.entries(value_options).map(([key, value], index) => ( - - - {key} - - - ))} - - - - ); - } - - return ( - - - {label} - - - - ); -} diff --git a/frontend/src/admin/common/form/TaskInput.tsx b/frontend/src/admin/common/form/TaskInput.tsx deleted file mode 100644 index 9f86e525..00000000 --- a/frontend/src/admin/common/form/TaskInput.tsx +++ /dev/null @@ -1,176 +0,0 @@ -import { Flex } from "@chakra-ui/react"; -import React, { useEffect } from "react"; -import CoreInput from "./CoreInput"; -import TextInput from "./TextInput"; -import SelectionInput from "./SelectionInput"; -import GreenButton from "../buttons/GreenButton"; -import { toTitleCase } from "../../../utils/string_helpers"; -import { - DayOfWeek, - RecurrenceFrequency, - TimeOption, -} from "../../../types/task"; -import { weekdays } from "../../../constants/misc"; - -type TaskInputProps = { - set_recurrence: (e: any) => void; - set_days: (e: any) => void; - set_time: (e: any) => void; - set_start_time: (e: any) => void; - set_end_time: (e: any) => void; - set_addition: (e: any) => void; - set_deduction: (e: any) => void; - set_comments: (e: any) => void; - recurrence?: RecurrenceFrequency | ""; - days?: DayOfWeek[]; - time?: TimeOption | ""; - start_time?: string; - end_time?: string; - addition?: number; - deduction?: number; - comments?: string; -}; - -export default function TaskInput({ - set_recurrence, - set_days, - set_time, - set_start_time, - set_end_time, - set_addition, - set_deduction, - set_comments, - recurrence = "", - days = [], - time = "", - start_time = "", - end_time = "", - addition = 0, - deduction = 0, - comments = "", -}: TaskInputProps) { - useEffect(() => { - if (recurrence === RecurrenceFrequency.DAILY) { - set_days(weekdays as DayOfWeek[]); - } else if (recurrence === RecurrenceFrequency.ANY_SELECTED_DAYS) { - const earliestDay = days[0]; - const latestDay = days[days.length - 1]; - const a = weekdays.indexOf(earliestDay as string); - const b = weekdays.indexOf(latestDay as string); - set_days([...weekdays.slice(a, b + 1)]); - } - }, [recurrence]); - - function handleSelectDay(day: DayOfWeek) { - if (recurrence === RecurrenceFrequency.EVERY_SELECTED_DAYS) { - if (!days.includes(day)) { - set_days([...days, day]); - } else { - set_days(days.filter((d) => d !== day)); - } - } else if (recurrence === RecurrenceFrequency.ANY_SELECTED_DAYS) { - if (days.length === 0) { - set_days([day]); - } else if (!days.includes(day)) { - const a = weekdays.indexOf(day as string); - const b = weekdays.indexOf(days[0] as string); - const c = weekdays.indexOf(days[days.length - 1] as string); - if (a < b) { - set_days([...weekdays.slice(a, b), ...days]); - } else { - set_days([...days, ...weekdays.slice(c + 1, a + 1)]); - } - } else if (days.length === 1) { - set_days([]); - } else { - set_days([day]); - } - } - } - - return ( - <> - set_recurrence(opt)} - mode="radio" - value_options={{ - Daily: RecurrenceFrequency.DAILY, - "Every selected day": RecurrenceFrequency.EVERY_SELECTED_DAYS, - "Any selected day": RecurrenceFrequency.ANY_SELECTED_DAYS, - }} - /> - - - {weekdays.map((day: string, index) => ( - handleSelectDay(day as DayOfWeek)} - is_active={days.includes(day as DayOfWeek)} - /> - ))} - - - { - if (opt === TimeOption.ANYTIME) { - set_start_time(""); - set_end_time(""); - } - set_time(opt); - }} - mode="radio" - value_options={{ - Anytime: TimeOption.ANYTIME, - "Select Time": TimeOption.SPECIFIC, - }} - /> - - {time === TimeOption.SPECIFIC && ( - - set_start_time(e.target.value)} - type="time" - width="90%" - /> - set_end_time(e.target.value)} - type="time" - width="90%" - /> - - )} - - - set_addition(e.target.value as number)} - type="number" - width="50%" - /> - set_deduction(e.target.value as number)} - type="number" - width="50%" - /> - - - set_comments(e.target.value)} - /> - - ); -} diff --git a/frontend/src/admin/common/misc/AdminRoute.tsx b/frontend/src/admin/common/misc/AdminRoute.tsx deleted file mode 100644 index f36956dc..00000000 --- a/frontend/src/admin/common/misc/AdminRoute.tsx +++ /dev/null @@ -1,72 +0,0 @@ -import React, { useEffect, useState } from "react"; -import { Navigate } from "react-router-dom"; -import { Flex } from "@chakra-ui/react"; -import SideBar from "./SideBar"; -import Notification from "./Notification"; -import * as ROUTES from "../../../constants/routes"; -import { isAdmin, isRelief } from "../../../utils/checkRole"; -import Loading from "../../../Loading"; - -type AdminRouteProps = { - children: React.ReactElement; -}; - -export default function AdminRoute({ children }: AdminRouteProps) { - const [authorized, setAuthorized] = useState(false); - const [loading, setLoading] = useState(true); - const [notification, setNotification] = useState( - localStorage.getItem("notification") - ); - - useEffect(() => { - const checkRole = async () => { - const adminUser = await isAdmin(); - const reliefUser = await isRelief(); - if (adminUser || reliefUser) { - setAuthorized(true); - } - setLoading(false); - }; - checkRole(); - }, []); - - if (loading) { - return ; - } - - if (!authorized) { - return ; - } - - if (notification) { - setTimeout(() => { - localStorage.setItem("notification", ""); - setNotification(""); - }, 3000); - } - - return ( - - - {notification && } - - - - - {children} - - - - - ); -} diff --git a/frontend/src/admin/common/misc/DataTable.tsx b/frontend/src/admin/common/misc/DataTable.tsx deleted file mode 100644 index d15c3cb8..00000000 --- a/frontend/src/admin/common/misc/DataTable.tsx +++ /dev/null @@ -1,89 +0,0 @@ -import React from "react"; -import { - TableContainer, - Table, - Thead, - Tbody, - Tr, - Th, - Td, - Text, - Flex, - Spinner, -} from "@chakra-ui/react"; -import { TableProps } from "../../../types/component"; - -const DataTable = ({ - loading, - edit, - selected, - error, - columns, - rows, - editModal, -}: TableProps) => { - return ( - <> - - {edit && selected && editModal} - - - - {columns.map((col) => ( - - ))} - - - - {loading ? ( - - - - ) : error ? ( - - - - ) : ( - rows.map((row, index) => ( - - {row.map((cell, cellIndex) => ( - - ))} - - )) - )} - -
- - - {col.header} - - {col.sort} - -
- -
- - {error.message} - -
{cell}
-
- - ); -}; - -export default DataTable; diff --git a/frontend/src/admin/common/misc/Notification.tsx b/frontend/src/admin/common/misc/Notification.tsx deleted file mode 100644 index 0246d486..00000000 --- a/frontend/src/admin/common/misc/Notification.tsx +++ /dev/null @@ -1,36 +0,0 @@ -import React from "react"; -import { Flex, Text } from "@chakra-ui/react"; -import TaskAltIcon from "@mui/icons-material/TaskAlt"; - -type NotificationProps = { - message: string; -}; - -export default function Notification({ message }: NotificationProps) { - return ( - - - - - - {message} - - - ); -} diff --git a/frontend/src/admin/pages/announcements/Main.tsx b/frontend/src/admin/pages/announcements/Main.tsx index 4f0d1f9a..7113b944 100644 --- a/frontend/src/admin/pages/announcements/Main.tsx +++ b/frontend/src/admin/pages/announcements/Main.tsx @@ -1,210 +1,212 @@ -import { Flex, Text, VStack } from "@chakra-ui/react"; -import React, { useEffect, useState } from "react"; -import { useQuery, useLazyQuery } from "@apollo/client"; -import AnnouncementCard from "./components/AnnouncementCard"; -import CreateAnnouncementModal from "./components/CreateAnnouncementModal"; -import { ROOM_NUMBERS } from "../../../constants/misc"; -import { - GET_ALL_ANNOUNCEMENTS, - GET_ANNOUNCEMENTS_BY_PARTICIPANTS, - GET_CURRENT_PARTICIPANTS, -} from "../../../gql/queries"; -import GreenButton from "../../common/buttons/GreenButton"; -import OrangeButton from "../../common/buttons/OrangeButton"; - -export default function AdminAnnouncementsPage() { - const [create, setCreate] = useState(false); - const [selectedButtons, setSelectedButtons] = useState( - new Array(10).fill(false) - ); - const [filter, setFilter] = useState(false); - - const { - data: participantData, - loading: participantLoading, - error: participantError, - } = useQuery(GET_CURRENT_PARTICIPANTS); - - const [getAnnouncementsByParticipants, announcementsByParticipantsResult] = - useLazyQuery(GET_ANNOUNCEMENTS_BY_PARTICIPANTS); - - const [getAllAnnouncements, allAnnouncementsResult] = useLazyQuery( - GET_ALL_ANNOUNCEMENTS - ); - - const participantToRoomMap: Record = {}; - const roomToParticipantMap: Record = {}; - if (participantData?.getCurrentParticipants) { - for (const participant of participantData.getCurrentParticipants) { - roomToParticipantMap[participant.room_number] = - participant.participant_id; - participantToRoomMap[participant.participant_id] = - participant.room_number; - } - } - - useEffect(() => { - const trueCount = selectedButtons.filter(Boolean).length; - if (participantLoading || trueCount === 0 || trueCount === 10) { - setFilter(false); - getAllAnnouncements(); - return; - } - - setFilter(true); - const selectedRoomNumbers = selectedButtons - .map((selected, index) => (selected ? index + 1 : null)) - .filter(Boolean) as number[]; - const selectedParticipantIds = selectedRoomNumbers - .map((roomNumber) => roomToParticipantMap[roomNumber]) - .filter(Boolean); - - console.log(selectedParticipantIds); - - getAnnouncementsByParticipants({ - variables: { participant_ids: selectedParticipantIds }, - }); - }, [selectedButtons, participantLoading]); - - const handleButtonClick = (id: number) => { - setSelectedButtons((prevSelected: any) => { - const newSelected = [...prevSelected]; - newSelected[id] = !newSelected[id]; - return newSelected; - }); - }; - - const handleSelectAll = () => { - setSelectedButtons(new Array(10).fill(true)); - }; - - const handleDeselectAll = () => { - setSelectedButtons(new Array(10).fill(false)); - }; - - const announcementLoading = - (!filter && allAnnouncementsResult.loading) || - (filter && announcementsByParticipantsResult.loading); - const announcementError = - (!filter && allAnnouncementsResult.error) || - (filter && announcementsByParticipantsResult.error); - const announcementData = filter - ? announcementsByParticipantsResult.data?.getAnnouncementsByParticipants - : allAnnouncementsResult.data?.getAllAnnouncements ?? []; - - if (announcementLoading || participantLoading) - return Loading announcements...; - if (announcementError || participantError) - return Error loading announcements; - - return ( - - - - - Announcements - - - Expires in 48h - - - - setCreate(true)} - is_active={create} - /> - - - - - Filters: - - {selectedButtons.map((isSelected: any, index: number) => ( - handleButtonClick(index)} - is_active={selectedButtons[index]} - /> - ))} - handleSelectAll()} - > - Select All - - handleDeselectAll()} - > - Deselect All - - - - - Most Recent - - - - {announcementData.length === 0 && No announcements found.} - {announcementData.map((announcement: any) => ( - participantToRoomMap[ua.participant_id]) - .join(", ")}` - } - message={announcement.message} - timestamp={announcement.creation_date} - importance={ - announcement.priority === "CRITICAL" - ? 2 - : announcement.priority === "HIGH" - ? 1 - : 0 - } - /> - ))} - - - {create && ( - setCreate(false)} - /> - )} - - ); -} +export {}; +// TODO: Refactor this component +// import { Flex, Text, VStack } from "@chakra-ui/react"; +// import React, { useEffect, useState } from "react"; +// import { useQuery, useLazyQuery } from "@apollo/client"; +// import AnnouncementCard from "./components/AnnouncementCard"; +// import CreateAnnouncementModal from "./components/CreateAnnouncementModal"; +// import { ROOM_NUMBERS } from "../../../constants/misc"; +// import { +// GET_ALL_ANNOUNCEMENTS, +// GET_ANNOUNCEMENTS_BY_PARTICIPANTS, +// GET_CURRENT_PARTICIPANTS, +// } from "../../../gql/queries"; +// import GreenButton from "../../common/buttons/GreenButton"; +// import OrangeButton from "../../common/buttons/OrangeButton"; +// +// export default function AdminAnnouncementsPage() { +// const [create, setCreate] = useState(false); +// const [selectedButtons, setSelectedButtons] = useState( +// new Array(10).fill(false) +// ); +// const [filter, setFilter] = useState(false); +// +// const { +// data: participantData, +// loading: participantLoading, +// error: participantError, +// } = useQuery(GET_CURRENT_PARTICIPANTS); +// +// const [getAnnouncementsByParticipants, announcementsByParticipantsResult] = +// useLazyQuery(GET_ANNOUNCEMENTS_BY_PARTICIPANTS); +// +// const [getAllAnnouncements, allAnnouncementsResult] = useLazyQuery( +// GET_ALL_ANNOUNCEMENTS +// ); +// +// const participantToRoomMap: Record = {}; +// const roomToParticipantMap: Record = {}; +// if (participantData?.getCurrentParticipants) { +// for (const participant of participantData.getCurrentParticipants) { +// roomToParticipantMap[participant.room_number] = +// participant.participant_id; +// participantToRoomMap[participant.participant_id] = +// participant.room_number; +// } +// } +// +// useEffect(() => { +// const trueCount = selectedButtons.filter(Boolean).length; +// if (participantLoading || trueCount === 0 || trueCount === 10) { +// setFilter(false); +// getAllAnnouncements(); +// return; +// } +// +// setFilter(true); +// const selectedRoomNumbers = selectedButtons +// .map((selected, index) => (selected ? index + 1 : null)) +// .filter(Boolean) as number[]; +// const selectedParticipantIds = selectedRoomNumbers +// .map((roomNumber) => roomToParticipantMap[roomNumber]) +// .filter(Boolean); +// +// console.log(selectedParticipantIds); +// +// getAnnouncementsByParticipants({ +// variables: { participant_ids: selectedParticipantIds }, +// }); +// }, [selectedButtons, participantLoading]); +// +// const handleButtonClick = (id: number) => { +// setSelectedButtons((prevSelected: any) => { +// const newSelected = [...prevSelected]; +// newSelected[id] = !newSelected[id]; +// return newSelected; +// }); +// }; +// +// const handleSelectAll = () => { +// setSelectedButtons(new Array(10).fill(true)); +// }; +// +// const handleDeselectAll = () => { +// setSelectedButtons(new Array(10).fill(false)); +// }; +// +// const announcementLoading = +// (!filter && allAnnouncementsResult.loading) || +// (filter && announcementsByParticipantsResult.loading); +// const announcementError = +// (!filter && allAnnouncementsResult.error) || +// (filter && announcementsByParticipantsResult.error); +// const announcementData = filter +// ? announcementsByParticipantsResult.data?.getAnnouncementsByParticipants +// : allAnnouncementsResult.data?.getAllAnnouncements ?? []; +// +// if (announcementLoading || participantLoading) +// return Loading announcements...; +// if (announcementError || participantError) +// return Error loading announcements; +// +// return ( +// +// +// +// +// Announcements +// +// +// Expires in 48h +// +// +// +// setCreate(true)} +// is_active={create} +// /> +// +// +// +// +// Filters: +// +// {selectedButtons.map((isSelected: any, index: number) => ( +// handleButtonClick(index)} +// is_active={selectedButtons[index]} +// /> +// ))} +// handleSelectAll()} +// > +// Select All +// +// handleDeselectAll()} +// > +// Deselect All +// +// +// +// +// Most Recent +// +// +// +// {announcementData.length === 0 && No announcements found.} +// {announcementData.map((announcement: any) => ( +// participantToRoomMap[ua.participant_id]) +// .join(", ")}` +// } +// message={announcement.message} +// timestamp={announcement.creation_date} +// importance={ +// announcement.priority === "CRITICAL" +// ? 2 +// : announcement.priority === "HIGH" +// ? 1 +// : 0 +// } +// /> +// ))} +// +// +// {create && ( +// setCreate(false)} +// /> +// )} +// +// ); +// } diff --git a/frontend/src/admin/pages/announcements/components/AnnouncementCard.tsx b/frontend/src/admin/pages/announcements/components/AnnouncementCard.tsx index 4c248431..706c3639 100644 --- a/frontend/src/admin/pages/announcements/components/AnnouncementCard.tsx +++ b/frontend/src/admin/pages/announcements/components/AnnouncementCard.tsx @@ -1,131 +1,133 @@ -import React, { useState } from "react"; -import { useMutation, gql } from "@apollo/client"; -import { useToast, Box, Text, IconButton, Flex } from "@chakra-ui/react"; -import PriorityHighOutlinedIcon from "@mui/icons-material/PriorityHighOutlined"; -import EditIcon from "@mui/icons-material/Edit"; -import DeleteOutlineIcon from "@mui/icons-material/DeleteOutline"; -import { DELETE_ANNOUNCEMENT } from "../../../../gql/mutations"; -import EditAnnouncementModal from "./EditAnnouncementModal"; - -const useDeleteAnnouncement = () => { - const [deleteAnnouncementMutation] = useMutation(DELETE_ANNOUNCEMENT); - - const handleDeleteAnnouncement = async (announcement_id: number) => { - if (typeof announcement_id !== "number" || Number.isNaN(announcement_id)) { - console.log("Unable to delete announcement, invalid announcement id."); - return; - } - - try { - const { data } = await deleteAnnouncementMutation({ - variables: { announcement_id }, - }); - - if (data?.deleteAnnouncement) { - localStorage.setItem("notification", "Announcement deleted"); - window.location.reload(); - } else { - throw new Error("Announcement deletion failed."); - } - } catch (error: any) { - console.error("ERROR: Error in deleting announcement. ", error); - } - }; - - return { handleDeleteAnnouncement }; -}; - -type AnnouncementCardProps = { - announcement_id: any; - room: string; - message: string; - timestamp: string; - importance?: 0 | 1 | 2; -}; - -export default function AnnouncementCard({ - announcement_id, - room, - message, - timestamp, - importance = 0, -}: AnnouncementCardProps) { - const { handleDeleteAnnouncement } = useDeleteAnnouncement(); - const [edit, setEdit] = useState(false); - - return ( - - - - - - {room} - - {Array.from({ length: importance }).map((_, i) => ( - - ))} - - - - {message} - - - - {timestamp} - - - - - } - size="sm" - variant="ghost" - onClick={() => setEdit(true)} - /> - - } - size="sm" - variant="ghost" - onClick={() => handleDeleteAnnouncement(announcement_id)} - /> - - - {edit && ( - setEdit(false)} - announcementId={announcement_id} - sendTo={room} - initialMessage={message} - initialPriority={ - importance === 2 ? "CRITICAL" : importance === 1 ? "HIGH" : "NORMAL" - } - /> - )} - - ); -} +export {}; +// TODO: Refactor this component +// import React, { useState } from "react"; +// import { useMutation, gql } from "@apollo/client"; +// import { useToast, Box, Text, IconButton, Flex } from "@chakra-ui/react"; +// import PriorityHighOutlinedIcon from "@mui/icons-material/PriorityHighOutlined"; +// import EditIcon from "@mui/icons-material/Edit"; +// import DeleteOutlineIcon from "@mui/icons-material/DeleteOutline"; +// import { DELETE_ANNOUNCEMENT } from "../../../../gql/mutations"; +// import EditAnnouncementModal from "./EditAnnouncementModal"; +// +// const useDeleteAnnouncement = () => { +// const [deleteAnnouncementMutation] = useMutation(DELETE_ANNOUNCEMENT); +// +// const handleDeleteAnnouncement = async (announcement_id: number) => { +// if (typeof announcement_id !== "number" || Number.isNaN(announcement_id)) { +// console.log("Unable to delete announcement, invalid announcement id."); +// return; +// } +// +// try { +// const { data } = await deleteAnnouncementMutation({ +// variables: { announcement_id }, +// }); +// +// if (data?.deleteAnnouncement) { +// localStorage.setItem("notification", "Announcement deleted"); +// window.location.reload(); +// } else { +// throw new Error("Announcement deletion failed."); +// } +// } catch (error: any) { +// console.error("ERROR: Error in deleting announcement. ", error); +// } +// }; +// +// return { handleDeleteAnnouncement }; +// }; +// +// type AnnouncementCardProps = { +// announcement_id: any; +// room: string; +// message: string; +// timestamp: string; +// importance?: 0 | 1 | 2; +// }; +// +// export default function AnnouncementCard({ +// announcement_id, +// room, +// message, +// timestamp, +// importance = 0, +// }: AnnouncementCardProps) { +// const { handleDeleteAnnouncement } = useDeleteAnnouncement(); +// const [edit, setEdit] = useState(false); +// +// return ( +// +// +// +// +// +// {room} +// +// {Array.from({ length: importance }).map((_, i) => ( +// +// ))} +// +// +// +// {message} +// +// +// +// {timestamp} +// +// +// +// +// } +// size="sm" +// variant="ghost" +// onClick={() => setEdit(true)} +// /> +// +// } +// size="sm" +// variant="ghost" +// onClick={() => handleDeleteAnnouncement(announcement_id)} +// /> +// +// +// {edit && ( +// setEdit(false)} +// announcementId={announcement_id} +// sendTo={room} +// initialMessage={message} +// initialPriority={ +// importance === 2 ? "CRITICAL" : importance === 1 ? "HIGH" : "NORMAL" +// } +// /> +// )} +// +// ); +// } diff --git a/frontend/src/admin/pages/announcements/components/CreateAnnouncementModal.tsx b/frontend/src/admin/pages/announcements/components/CreateAnnouncementModal.tsx index a7cddc91..af900c4c 100644 --- a/frontend/src/admin/pages/announcements/components/CreateAnnouncementModal.tsx +++ b/frontend/src/admin/pages/announcements/components/CreateAnnouncementModal.tsx @@ -1,157 +1,159 @@ -import React, { useState } from "react"; -import { Flex, Text } from "@chakra-ui/react"; -import { useLazyQuery, useMutation } from "@apollo/client"; -import { CREATE_ANNOUNCEMENT } from "../../../../gql/mutations"; -import { GET_CURRENT_PARTICIPANTS } from "../../../../gql/queries"; -import { ROOM_NUMBERS } from "../../../../constants/misc"; -import ModalContainer from "../../../common/form/ModalContainer"; -import GreenButton from "../../../common/buttons/GreenButton"; -import SelectionInput from "../../../common/form/SelectionInput"; -import TextInput from "../../../common/form/TextInput"; - -const CreateAnnouncementModal = ({ - isOpen, - onClose, -}: { - isOpen: boolean; - onClose: () => void; -}) => { - const [selectedRooms, setSelectedRooms] = useState([]); - const [priority, setPriority] = useState(""); - const [message, setMessage] = useState(""); - const [error, setError] = useState(""); - - const [createAnnouncement] = useMutation(CREATE_ANNOUNCEMENT, { - onCompleted: () => { - let listOfRooms = ""; - if (selectedRooms.length === 1) { - listOfRooms = `Room ${selectedRooms[0]}`; - } else if (selectedRooms.length === ROOM_NUMBERS.length) { - listOfRooms = "All Rooms"; - } else { - listOfRooms = `Rooms ${selectedRooms.join(", ")}`; - } - localStorage.setItem( - "notification", - "Announcement sent to " + listOfRooms - ); - onClose(); - window.location.reload(); - }, - onError: (err) => { - setError(err.message); - }, - }); - - const [getCurrentParticipants] = useLazyQuery(GET_CURRENT_PARTICIPANTS); - - const handleSend = async () => { - if (selectedRooms.length === 0 || priority === "" || message === "") { - setError("Missing fields."); - return; - } - - try { - const { data, error: dataError } = await getCurrentParticipants(); - - if (dataError || !data || !data.getCurrentParticipants) { - setError("Failed to fetch participants."); - return; - } - - const roomToParticipantMap: any = {}; - for (const participant of data.getCurrentParticipants) { - roomToParticipantMap[participant.room_number] = - participant.participant_id; - } - - const participantIds: number[] = []; - for (const room of selectedRooms) { - const participantId = roomToParticipantMap[room]; - if (!participantId) { - setError(`Room ${room} is empty.`); - return; - } - participantIds.push(participantId); - } - - createAnnouncement({ - variables: { - priority, - participants: participantIds, - message, - }, - }); - } catch (err: any) { - console.log(err); - setError("Unable to create announcement"); - } - }; - - const toggleRoom = (room: number) => { - if (room === 0) { - if (selectedRooms.length === ROOM_NUMBERS.length) { - setSelectedRooms([]); - } else { - setSelectedRooms(ROOM_NUMBERS); - } - } else { - setSelectedRooms((prev) => { - const next = [...prev]; - if (next.includes(room)) { - return next.filter((r) => r !== room); - } - return [...next, room]; - }); - } - }; - - return ( - - - - Send To: - - {[[0], ...ROOM_NUMBERS].flat().map((room: number) => { - const isSelected = - selectedRooms.length === ROOM_NUMBERS.length || - selectedRooms.includes(room); - return ( - toggleRoom(room)} - is_active={isSelected} - /> - ); - })} - - - setPriority(opt)} - mode="radio" - value_options={{ - Normal: "NORMAL", - High: "HIGH", - Critical: "CRITICAL", - }} - /> - - setMessage(e.target.value)} - /> - - ); -}; - -export default CreateAnnouncementModal; +export {}; +// TODO: Refactor this component +// import React, { useState } from "react"; +// import { Flex, Text } from "@chakra-ui/react"; +// import { useLazyQuery, useMutation } from "@apollo/client"; +// import { CREATE_ANNOUNCEMENT } from "../../../../gql/mutations"; +// import { GET_CURRENT_PARTICIPANTS } from "../../../../gql/queries"; +// import { ROOM_NUMBERS } from "../../../../constants/misc"; +// import ModalContainer from "../../../common/form/ModalContainer"; +// import GreenButton from "../../../common/buttons/GreenButton"; +// import SelectionInput from "../../../common/form/SelectionInput"; +// import TextInput from "../../../common/form/TextInput"; +// +// const CreateAnnouncementModal = ({ +// isOpen, +// onClose, +// }: { +// isOpen: boolean; +// onClose: () => void; +// }) => { +// const [selectedRooms, setSelectedRooms] = useState([]); +// const [priority, setPriority] = useState(""); +// const [message, setMessage] = useState(""); +// const [error, setError] = useState(""); +// +// const [createAnnouncement] = useMutation(CREATE_ANNOUNCEMENT, { +// onCompleted: () => { +// let listOfRooms = ""; +// if (selectedRooms.length === 1) { +// listOfRooms = `Room ${selectedRooms[0]}`; +// } else if (selectedRooms.length === ROOM_NUMBERS.length) { +// listOfRooms = "All Rooms"; +// } else { +// listOfRooms = `Rooms ${selectedRooms.join(", ")}`; +// } +// localStorage.setItem( +// "notification", +// "Announcement sent to " + listOfRooms +// ); +// onClose(); +// window.location.reload(); +// }, +// onError: (err) => { +// setError(err.message); +// }, +// }); +// +// const [getCurrentParticipants] = useLazyQuery(GET_CURRENT_PARTICIPANTS); +// +// const handleSend = async () => { +// if (selectedRooms.length === 0 || priority === "" || message === "") { +// setError("Missing fields."); +// return; +// } +// +// try { +// const { data, error: dataError } = await getCurrentParticipants(); +// +// if (dataError || !data || !data.getCurrentParticipants) { +// setError("Failed to fetch participants."); +// return; +// } +// +// const roomToParticipantMap: any = {}; +// for (const participant of data.getCurrentParticipants) { +// roomToParticipantMap[participant.room_number] = +// participant.participant_id; +// } +// +// const participantIds: number[] = []; +// for (const room of selectedRooms) { +// const participantId = roomToParticipantMap[room]; +// if (!participantId) { +// setError(`Room ${room} is empty.`); +// return; +// } +// participantIds.push(participantId); +// } +// +// createAnnouncement({ +// variables: { +// priority, +// participants: participantIds, +// message, +// }, +// }); +// } catch (err: any) { +// console.log(err); +// setError("Unable to create announcement"); +// } +// }; +// +// const toggleRoom = (room: number) => { +// if (room === 0) { +// if (selectedRooms.length === ROOM_NUMBERS.length) { +// setSelectedRooms([]); +// } else { +// setSelectedRooms(ROOM_NUMBERS); +// } +// } else { +// setSelectedRooms((prev) => { +// const next = [...prev]; +// if (next.includes(room)) { +// return next.filter((r) => r !== room); +// } +// return [...next, room]; +// }); +// } +// }; +// +// return ( +// +// +// +// Send To: +// +// {[[0], ...ROOM_NUMBERS].flat().map((room: number) => { +// const isSelected = +// selectedRooms.length === ROOM_NUMBERS.length || +// selectedRooms.includes(room); +// return ( +// toggleRoom(room)} +// is_active={isSelected} +// /> +// ); +// })} +// +// +// setPriority(opt)} +// mode="radio" +// value_options={{ +// Normal: "NORMAL", +// High: "HIGH", +// Critical: "CRITICAL", +// }} +// /> +// +// setMessage(e.target.value)} +// /> +// +// ); +// }; +// +// export default CreateAnnouncementModal; diff --git a/frontend/src/admin/pages/announcements/components/EditAnnouncementModal.tsx b/frontend/src/admin/pages/announcements/components/EditAnnouncementModal.tsx index 044734c9..c34fe782 100644 --- a/frontend/src/admin/pages/announcements/components/EditAnnouncementModal.tsx +++ b/frontend/src/admin/pages/announcements/components/EditAnnouncementModal.tsx @@ -1,105 +1,107 @@ -import React, { useState } from "react"; -import { Text, Flex } from "@chakra-ui/react"; -import { useMutation } from "@apollo/client"; -import { EDIT_ANNOUNCEMENT } from "../../../../gql/mutations"; -import ModalContainer from "../../../common/form/ModalContainer"; -import SelectionInput from "../../../common/form/SelectionInput"; -import TextInput from "../../../common/form/TextInput"; - -type EditAnnouncementModalProps = { - isOpen: boolean; - setIsOpen: React.Dispatch>; - announcementId: number; - sendTo: string; - initialMessage: string; - initialPriority: string; -}; - -const EditAnnouncementModal = ({ - isOpen, - setIsOpen, - announcementId, - sendTo, - initialMessage, - initialPriority, -}: EditAnnouncementModalProps): React.ReactElement => { - const [priority, setPriority] = useState(initialPriority); - const [message, setMessage] = useState(initialMessage); - - const [error, setError] = useState(""); - - const [editAnnouncement] = useMutation(EDIT_ANNOUNCEMENT); - - const handleSave = async () => { - setError(""); - if (!announcementId || !priority || !message.trim()) { - setError("Missing fields"); - return; - } - - try { - await editAnnouncement({ - variables: { - announcement_id: announcementId, - priority, - message, - }, - }); - - localStorage.setItem("notification", "Announcement updated!"); - - setIsOpen(false); - window.location.reload(); - } catch (err: any) { - console.error("Edit error:", err); - console.error("GraphQL error details:", err.graphQLErrors); - console.error("Network error details:", err.networkError); - setError("Unable to update announcement"); - } - }; - - const handleCancel = () => { - setError(""); - setIsOpen(false); - }; - - return ( - - - - Sent To - - - {sendTo} - - - - setPriority(opt)} - mode="radio" - value_options={{ - Normal: "NORMAL", - High: "HIGH", - Critical: "CRITICAL", - }} - /> - - setMessage(e.target.value)} - width="350px" - /> - - ); -}; - -export default EditAnnouncementModal; +export {}; +// TODO: Refactor this component +// import React, { useState } from "react"; +// import { Text, Flex } from "@chakra-ui/react"; +// import { useMutation } from "@apollo/client"; +// import { EDIT_ANNOUNCEMENT } from "../../../../gql/mutations"; +// import ModalContainer from "../../../common/form/ModalContainer"; +// import SelectionInput from "../../../common/form/SelectionInput"; +// import TextInput from "../../../common/form/TextInput"; +// +// type EditAnnouncementModalProps = { +// isOpen: boolean; +// setIsOpen: React.Dispatch>; +// announcementId: number; +// sendTo: string; +// initialMessage: string; +// initialPriority: string; +// }; +// +// const EditAnnouncementModal = ({ +// isOpen, +// setIsOpen, +// announcementId, +// sendTo, +// initialMessage, +// initialPriority, +// }: EditAnnouncementModalProps): React.ReactElement => { +// const [priority, setPriority] = useState(initialPriority); +// const [message, setMessage] = useState(initialMessage); +// +// const [error, setError] = useState(""); +// +// const [editAnnouncement] = useMutation(EDIT_ANNOUNCEMENT); +// +// const handleSave = async () => { +// setError(""); +// if (!announcementId || !priority || !message.trim()) { +// setError("Missing fields"); +// return; +// } +// +// try { +// await editAnnouncement({ +// variables: { +// announcement_id: announcementId, +// priority, +// message, +// }, +// }); +// +// localStorage.setItem("notification", "Announcement updated!"); +// +// setIsOpen(false); +// window.location.reload(); +// } catch (err: any) { +// console.error("Edit error:", err); +// console.error("GraphQL error details:", err.graphQLErrors); +// console.error("Network error details:", err.networkError); +// setError("Unable to update announcement"); +// } +// }; +// +// const handleCancel = () => { +// setError(""); +// setIsOpen(false); +// }; +// +// return ( +// +// +// +// Sent To +// +// +// {sendTo} +// +// +// +// setPriority(opt)} +// mode="radio" +// value_options={{ +// Normal: "NORMAL", +// High: "HIGH", +// Critical: "CRITICAL", +// }} +// /> +// +// setMessage(e.target.value)} +// width="350px" +// /> +// +// ); +// }; +// +// export default EditAnnouncementModal; diff --git a/frontend/src/admin/pages/badges/Main.tsx b/frontend/src/admin/pages/badges/Main.tsx index 4a6c6415..20fd5c78 100644 --- a/frontend/src/admin/pages/badges/Main.tsx +++ b/frontend/src/admin/pages/badges/Main.tsx @@ -1,54 +1,42 @@ import { Flex, Text } from "@chakra-ui/react"; import { useQuery } from "@apollo/client"; -import React, { useEffect, useState } from "react"; +import React, { useState } from "react"; import CreateCustomBadgeModal from "./components/CreateCustomBadgeModal"; import CustomBadgeTable from "./components/CustomBadgeTable"; import SystemBadgeTable from "./components/SystemBadgeTable"; -import { GET_CUSTOM_BADGES, GET_SYSTEM_BADGES } from "../../../gql/queries"; +import { GET_CUSTOM_BADGES } from "../../../gql/customBadgeRequests"; +import { GET_SYSTEM_BADGES } from "../../../gql/systemBadgeRequests"; import AssignCustomBadgeModal from "./components/AssignCustomBadgeModal"; -import GreenButton from "../../common/buttons/GreenButton"; -import OrangeButton from "../../common/buttons/OrangeButton"; +import GreenOutlineButton from "../../../ui/buttons/GreenOutlineButton"; +import OrangeButton from "../../../ui/buttons/OrangeButton"; export default function AdminBadgesPage() { const [create, setCreate] = useState(false); const [assign, setAssign] = useState(false); - const [customBadges, setCustomBadges] = useState([]); - const [systemBadges, setSystemBadges] = useState([]); - const { loading: customBadgesLoading, error: customBadgesError, data: customBadgesData, + refetch: refetchCustomBadges, } = useQuery(GET_CUSTOM_BADGES); const { loading: systemBadgesLoading, error: systemBadgesError, data: systemBadgesData, + refetch: refetchSystemBadges, } = useQuery(GET_SYSTEM_BADGES); - useEffect(() => { - if (!systemBadgesLoading && !systemBadgesError && systemBadgesData) { - setSystemBadges(systemBadgesData.getSystemBadges); - } - }, [systemBadgesLoading, systemBadgesError, systemBadgesData]); - - useEffect(() => { - if (!customBadgesLoading && !customBadgesError && customBadgesData) { - setCustomBadges(customBadgesData.getCustomBadges); - } - }, [customBadgesLoading, customBadgesError, customBadgesData]); - return ( - + - + System Badges @@ -59,17 +47,19 @@ export default function AdminBadgesPage() { - + Custom Badges @@ -77,13 +67,13 @@ export default function AdminBadgesPage() { - setAssign(true)} is_active={assign} /> setCreate(true)} is_active={create} /> @@ -91,12 +81,18 @@ export default function AdminBadgesPage() { - {create && setCreate(false)} />} - {assign && setAssign(false)} />} + {create && ( + setCreate(false)} + refetch={refetchCustomBadges} + /> + )} + {assign && setAssign(false)} customBadges={customBadgesData?.getCustomBadges ?? []} />} ); } diff --git a/frontend/src/admin/pages/badges/components/AssignCustomBadgeModal.tsx b/frontend/src/admin/pages/badges/components/AssignCustomBadgeModal.tsx index 48fffcd8..f6bd550e 100644 --- a/frontend/src/admin/pages/badges/components/AssignCustomBadgeModal.tsx +++ b/frontend/src/admin/pages/badges/components/AssignCustomBadgeModal.tsx @@ -1,135 +1,125 @@ -import React, { useEffect, useState } from "react"; +import React, { useState, useContext } from "react"; import { Flex, Grid, Text } from "@chakra-ui/react"; -import { useLazyQuery, useMutation, useQuery } from "@apollo/client"; -import { ROOM_NUMBERS } from "../../../../constants/misc"; -import { - GET_PARTICIPANTS_BY_ROOMS, - GET_CUSTOM_BADGES, -} from "../../../../gql/queries"; -import { ASSIGN_CUSTOM_BADGE } from "../../../../gql/mutations"; -import ModalContainer from "../../../common/form/ModalContainer"; -import GreenButton from "../../../common/buttons/GreenButton"; -import CoreInput from "../../../common/form/CoreInput"; -import SelectionInput from "../../../common/form/SelectionInput"; +import { useMutation, useQuery } from "@apollo/client"; +import { ROOM_NUMBERS } from "../../../../constants/rooms"; +import { CREATE_EARNED_CUSTOM_BADGE } from "../../../../gql/earnedCustomBadgeRequests"; +import PopupContainer from "../../../../ui/containers/PopupContainer"; +import GreenOutlineButton from "../../../../ui/buttons/GreenOutlineButton"; +import NumberInput from "../../../../ui/inputs/NumberInput"; +import { AdminContext } from "../../../AdminContext"; +import { toTitleCase } from "../../../../helpers/stringUtils"; +import { CustomBadge } from "../../../../types/models"; +import DropdownInput from "../../../../ui/inputs/DropdownInput"; interface AssignCustomBadgeModalProps { onClose: () => void; + customBadges: CustomBadge[]; } const AssignCustomBadgeModal: React.FC = ({ onClose, + customBadges, }) => { - const [badgeName, setBadgeName] = useState(""); - const [badgeValue, setBadgeValue] = useState(""); + const { roomToParticipant } = useContext(AdminContext); + + const [selectedBadgeId, setSelectedBadgeId] = useState(""); + const [badgeValue, setBadgeValue] = useState(null); + const [selectedParticipants, setSelectedParticipants] = useState([]); const [selectedRooms, setSelectedRooms] = useState([]); const [error, setError] = useState(""); - const [badges, setBadges] = useState<{ badge_id: number; name: string }[]>( - [] - ); - const { data: badgeData } = useQuery(GET_CUSTOM_BADGES); - - useEffect(() => { - if (badgeData?.getCustomBadges) { - setBadges(badgeData.getCustomBadges); - } - }, [badgeData]); - const [getParticipantsByRooms] = useLazyQuery(GET_PARTICIPANTS_BY_ROOMS); - const [assignCustomBadge] = useMutation(ASSIGN_CUSTOM_BADGE, { - onCompleted: () => { - localStorage.setItem( - "notification", - `Assigned Custom Badge: ${badgeName}` - ); - onClose(); - window.location.reload(); - }, - onError: (err) => { - setError(err.message); - }, - }); + const [assignCustomBadge, { loading: assignCustomBadgeLoading }] = + useMutation(CREATE_EARNED_CUSTOM_BADGE); const toggleRoomSelection = (room: number) => { - setSelectedRooms((prev) => - prev.includes(room) ? prev.filter((r) => r !== room) : [...prev, room] - ); + if (!roomToParticipant || !(room in roomToParticipant)) { + setError("No participant assigned to this room"); + } else { + const participantId = roomToParticipant[room]; + setSelectedParticipants((prev) => + prev.includes(participantId) + ? prev.filter((p) => p !== participantId) + : [...prev, participantId] + ); + setSelectedRooms((prev) => + prev.includes(room) ? prev.filter((r) => r !== room) : [...prev, room] + ); + setError(""); + } }; const assignBadge = async () => { setError(""); - if (!badgeName.trim() || !badgeValue.trim() || selectedRooms.length === 0) { + if (!selectedBadgeId || !badgeValue || selectedParticipants.length === 0) { setError("Missing fields"); - return; - } - try { - const res = await getParticipantsByRooms({ - variables: { room_numbers: selectedRooms }, - }); - const participants = res?.data?.getParticipantsByRooms; - if (!participants || participants.length !== selectedRooms.length) { - setError("No participants found for some selected rooms"); + } else if (badgeValue < 0) { + setError("Badge value must be greater than 0"); + } else { + const selectedBadge = customBadges.find((customBadge: CustomBadge) => + String(customBadge.cid) === selectedBadgeId + ) ?? null; + if (!selectedBadge) { + setError("Invalid badge"); return; } - const participantIds = participants.map((p: any) => p.participant_id); - const selectedBadge = badges.find((badge) => badge.name === badgeName); - const badgeId = selectedBadge?.badge_id; - await assignCustomBadge({ - variables: { - badge_id: badgeId, - marillac_bucks: Number(badgeValue), - participant_ids: participantIds, - }, - }); - } catch (err: any) { - setError(err.message); + try { + await Promise.all( + selectedParticipants.map((pid) => + assignCustomBadge({ + variables: { + pid, + name: selectedBadge.name, + icon: selectedBadge.icon, + description: selectedBadge.description, + value: badgeValue, + }, + }) + ) + ); + onClose(); + } catch (err: any) { + setError(err.message); + } } }; return ( - { - setBadgeName(""); - setBadgeValue(""); - setSelectedRooms([]); + setBadgeValue(null); setError(""); - setBadges([]); + setSelectedParticipants([]); + setSelectedRooms([]); + setSelectedBadgeId(""); onClose(); }} - error={error} + loading={assignCustomBadgeLoading} + error_message={error} > - setBadgeName(e.target.value)} - mode="dropdown" + current_value={selectedBadgeId} + update_action={(badgeId: string) => { + setSelectedBadgeId(badgeId); + }} + size="large" + placeholder="Select Badge" value_options={Object.fromEntries( - badgeData?.getCustomBadges?.map((badge: any) => [ - badge.name, - badge.name, - ]) ?? [] + customBadges.map((customBadge: CustomBadge) => [ + toTitleCase(customBadge.name), + String(customBadge.cid), + ]) )} - width="100%" /> - { - const val = e.target.value; - if (val === "") { - setBadgeValue(""); - } else { - const num = parseFloat(val); - if (!Number.isNaN(num)) { - setBadgeValue(val); - } - } - }} - type="number" - width="100%" + update_action={setBadgeValue} + size="small" /> @@ -137,17 +127,17 @@ const AssignCustomBadgeModal: React.FC = ({ Choose Room(s) - + {ROOM_NUMBERS.map((num: number) => ( - toggleRoomSelection(num)} is_active={selectedRooms.includes(num)} /> ))} - + ); }; diff --git a/frontend/src/admin/pages/badges/components/CreateCustomBadgeModal.tsx b/frontend/src/admin/pages/badges/components/CreateCustomBadgeModal.tsx index 55ca9f11..9aab6626 100644 --- a/frontend/src/admin/pages/badges/components/CreateCustomBadgeModal.tsx +++ b/frontend/src/admin/pages/badges/components/CreateCustomBadgeModal.tsx @@ -1,55 +1,61 @@ import React, { useState } from "react"; -import { - FormControl, - FormLabel, - Flex, - Text, - Grid, - Image as ChakraImage, -} from "@chakra-ui/react"; +import { Flex, Text, Grid } from "@chakra-ui/react"; import { useMutation } from "@apollo/client"; -import { Icon, iconList } from "../../../../constants/icons"; -import { CREATE_CUSTOM_BADGE } from "../../../../gql/mutations"; -import ModalContainer from "../../../common/form/ModalContainer"; -import CoreInput from "../../../common/form/CoreInput"; +import { CREATE_CUSTOM_BADGE } from "../../../../gql/customBadgeRequests"; +import PopupContainer from "../../../../ui/containers/PopupContainer"; +import TextInput from "../../../../ui/inputs/TextInput"; +import { Icon } from "../../../../types/enums"; +import { ICON_MAP } from "../../../../constants/icons"; -interface Props { +interface CreateCustomBadgeModalProps { onClose: () => void; + refetch: () => void; } -const CreateCustomBadgeModal = ({ onClose }: Props) => { +const CreateCustomBadgeModal = ({ + onClose, + refetch, +}: CreateCustomBadgeModalProps) => { const [name, setName] = useState(""); const [criteria, setCriteria] = useState(""); const [selectedIcon, setSelectedIcon] = useState(null); const [error, setError] = useState(""); - const [createCustomBadge, { loading }] = useMutation(CREATE_CUSTOM_BADGE, { - onCompleted: () => { - localStorage.setItem("notification", "Created Custom Badge: " + name); - window.location.reload(); - }, - onError: (err) => { - setError(err.message); - }, - }); + const availableIcons = [ + Icon.PLANT, + Icon.GROUP, + Icon.HEART, + Icon.HOME, + Icon.BABY, + Icon.WINGS, + ]; - const handleSave = () => { + const [createCustomBadge, { loading: createCustomBadgeLoading }] = + useMutation(CREATE_CUSTOM_BADGE); + + const handleSave = async () => { setError(""); if (!name || !criteria || !selectedIcon) { setError("Missing fields"); } else { - createCustomBadge({ - variables: { - name, - description: criteria, - icon: selectedIcon.toUpperCase(), - }, - }); + try { + createCustomBadge({ + variables: { + name, + description: criteria, + icon: selectedIcon, + }, + }); + onClose(); + await refetch(); + } catch (err: any) { + setError(err.message); + } } }; return ( - { setError(""); onClose(); }} - error={error} + loading={createCustomBadgeLoading} + error_message={error} > - setName(e.target.value)} - type="text" + update_action={setName} + size="large" /> - setCriteria(e.target.value)} - type="text" + update_action={setCriteria} + size="large" /> - - - - Choose Badge Icon - - - - {iconList.map((icon) => ( + + Choose Badge Icon + + + {availableIcons.map((icon) => { + const IconComponent = ICON_MAP[icon]; + const isSelected = selectedIcon === icon; + + return ( setSelectedIcon(icon)} - _hover={{ borderColor: "#3182CE" }} > - - ))} - - - + ); + })} + + ); }; diff --git a/frontend/src/admin/pages/badges/components/CustomBadgeTable.tsx b/frontend/src/admin/pages/badges/components/CustomBadgeTable.tsx index 27f05589..13fc6e6f 100644 --- a/frontend/src/admin/pages/badges/components/CustomBadgeTable.tsx +++ b/frontend/src/admin/pages/badges/components/CustomBadgeTable.tsx @@ -3,122 +3,96 @@ import EditIcon from "@mui/icons-material/Edit"; import DeleteOutlineIcon from "@mui/icons-material/DeleteOutline"; import React, { useState } from "react"; import { useMutation } from "@apollo/client"; -import { DELETE_CUSTOM_BADGE } from "../../../../gql/mutations"; +import { DELETE_CUSTOM_BADGE } from "../../../../gql/customBadgeRequests"; import EditCustomBadgeModal from "./EditCustomBadgeModal"; -import DataTable from "../../../common/misc/DataTable"; +import DataTable, { Column, Row } from "../../../../ui/misc/DataTable"; +import { CustomBadge } from "../../../../types/models"; +import { Marker, Trash } from "../../../../ui/icons/ActionIcons"; +import { ICON_MAP } from "../../../../constants/icons"; type CustomBadgeTableProps = { loading: boolean; error: any; - badges: any[]; + badges: CustomBadge[]; + refetch: () => void; }; const CustomBadgeTable = ({ loading, error, badges, + refetch, }: CustomBadgeTableProps) => { const [edit, setEdit] = useState(false); - const [selected, setSelected] = useState(null); + const [selected, setSelected] = useState(null); + const [deleteError, setDeleteError] = useState(""); - const [deleteCustomBadge] = useMutation(DELETE_CUSTOM_BADGE); + const [deleteCustomBadge, { loading: deleteCustomBadgeLoading }] = + useMutation(DELETE_CUSTOM_BADGE); async function handleDelete(id: number) { + setDeleteError(""); try { await deleteCustomBadge({ variables: { - badge_id: id, + cid: id, }, }); + await refetch(); } catch (err: any) { - console.log(err); + setDeleteError(err.message); } - window.location.reload(); } - const columns = [ - { header: "Icon", width: "5%" }, + const columns: Column[] = [ + { header: "Icon", width: "5%", center: true }, { header: "Badge Name", width: "25%" }, - { header: "Description", width: "65%" }, - { header: "Actions", width: "5%" }, + { header: "Description", width: "68%" }, + { header: "", width: "1%" }, + { header: "", width: "1%" }, ]; - const rows: JSX.Element[][] = badges.length - ? badges.map((badge: any) => { - const cells: JSX.Element[] = [ - , - - {badge.name} - , - - {badge.description} - , - - { - setSelected(badge); - setEdit(true); - }} - > - - - handleDelete(badge.badge_id)}> - - - , + const rows: Row[][] = badges.length + ? badges.map((badge: CustomBadge) => { + const IconComponent = ICON_MAP[badge.icon]; + return [ + { element: }, + { element: badge.name }, + { element: badge.description }, + { + element: , + action: () => { + setSelected(badge); + setEdit(true); + }, + }, + { + element: , + action: async () => handleDelete(badge.cid), + }, ]; - return cells; }) : []; - const editModal = ( - setEdit(false)} selected={selected} /> - ); + if (edit && selected) { + return ( + { + setEdit(false); + setSelected(null); + }} + selected={selected} + refetch={refetch} + /> + ); + } return ( ); }; diff --git a/frontend/src/admin/pages/badges/components/EditCustomBadgeModal.tsx b/frontend/src/admin/pages/badges/components/EditCustomBadgeModal.tsx index 1c3617e5..f1966c76 100644 --- a/frontend/src/admin/pages/badges/components/EditCustomBadgeModal.tsx +++ b/frontend/src/admin/pages/badges/components/EditCustomBadgeModal.tsx @@ -1,23 +1,26 @@ import React, { useState } from "react"; import { useMutation } from "@apollo/client"; -import { EDIT_CUSTOM_BADGE } from "../../../../gql/mutations"; -import ModalContainer from "../../../common/form/ModalContainer"; -import CoreInput from "../../../common/form/CoreInput"; +import { UPDATE_CUSTOM_BADGE } from "../../../../gql/customBadgeRequests"; +import PopupContainer from "../../../../ui/containers/PopupContainer"; +import TextInput from "../../../../ui/inputs/TextInput"; interface EditCustomBadgeModalProps { onClose: () => void; + refetch: () => void; selected: any; } const EditCustomBadgeModal: React.FC = ({ onClose, selected, + refetch, }) => { const [badgeName, setBadgeName] = useState(selected.name); const [badgeCriteria, setBadgeCriteria] = useState(selected.description); const [error, setError] = useState(""); - const [editCustomBadge] = useMutation(EDIT_CUSTOM_BADGE); + const [updateCustomBadge, { loading: updateCustomBadgeLoading }] = + useMutation(UPDATE_CUSTOM_BADGE); const handleSave = async () => { setError(""); @@ -27,43 +30,43 @@ const EditCustomBadgeModal: React.FC = ({ } try { - await editCustomBadge({ + await updateCustomBadge({ variables: { - custom_badge_id: selected.badge_id, - new_custom_badge_name: badgeName, - new_custom_badge_description: badgeCriteria, + cid: selected.cid, + name: badgeName, + description: badgeCriteria, + icon: selected.icon, }, }); - localStorage.setItem("notification", "Custom badge updated"); - window.location.reload(); + await refetch(); + onClose(); } catch (err: any) { setError(err.message); } }; return ( - - setBadgeName(e.target.value)} - type="text" - width="350px" + update_action={setBadgeName} + size="large" /> - setBadgeCriteria(e.target.value)} - type="text" - width="350px" + update_action={setBadgeCriteria} + size="large" /> - + ); }; diff --git a/frontend/src/admin/pages/badges/components/EditSystemBadgeModal.tsx b/frontend/src/admin/pages/badges/components/EditSystemBadgeModal.tsx index 87e3d216..0954edf1 100644 --- a/frontend/src/admin/pages/badges/components/EditSystemBadgeModal.tsx +++ b/frontend/src/admin/pages/badges/components/EditSystemBadgeModal.tsx @@ -1,232 +1,220 @@ import React, { useState } from "react"; import { Flex, Input, FormLabel, FormControl, Text } from "@chakra-ui/react"; import { useMutation } from "@apollo/client"; -import { EDIT_BADGE_LEVEL, EDIT_SYSTEM_BADGE } from "../../../../gql/mutations"; -import ModalContainer from "../../../common/form/ModalContainer"; -import CoreInput from "../../../common/form/CoreInput"; +import { UPDATE_SYSTEM_BADGE } from "../../../../gql/systemBadgeRequests"; +import { UPDATE_BADGE_LEVEL } from "../../../../gql/badgeLevelRequests"; +import PopupContainer from "../../../../ui/containers/PopupContainer"; +import TextInput from "../../../../ui/inputs/TextInput"; +import { Level } from "../../../../types/enums"; +import { BadgeLevel } from "../../../../types/models"; +import FixedInput from "../../../../ui/inputs/FixedInput"; +import { LEVEL_ORDER } from "../../../../constants/levels"; +import { toTitleCase } from "../../../../helpers/stringUtils"; +import NumberInput from "../../../../ui/inputs/NumberInput"; interface EditSystemBadgeModalProps { isOpen: boolean; onClose: () => void; selected: any; + refetch: () => void; } const EditSystemBadgeModal = ({ isOpen, onClose, + refetch, selected, }: EditSystemBadgeModalProps) => { const [badgeCriteria, setBadgeCriteria] = useState(selected.description); - const badgeLevels = ["Novice", "Bronze", "Silver", "Gold", "Diamond"]; - - const originalData: Record = {}; - for (const bl of selected.badge_level) { - const name = badgeLevels[bl.level]; - originalData[name] = { - benchmark: bl.benchmark, - bucks: bl.marillac_bucks, - }; - } - const [badgeData, setBadgeData] = useState(originalData); - + const [badgeLevels, setBadgeLevels] = useState< + Record< + Level, + { + benchmark: number; + value: number; + originalBenchmark: number; + originalValue: number; + } + > + >( + selected.BadgeLevel.reduce( + ( + obj: Record< + Level, + { + benchmark: number; + value: number; + originalBenchmark: number; + originalValue: number; + } + >, + bl: BadgeLevel + ) => ({ + ...obj, + [bl.level]: { + benchmark: bl.benchmark, + value: bl.value, + originalBenchmark: bl.benchmark, + originalValue: bl.value, + }, + }), + {} + ) + ); const [error, setError] = useState(""); - const [editBadgeLevel] = useMutation(EDIT_BADGE_LEVEL); - const [editSystemBadge] = useMutation(EDIT_SYSTEM_BADGE); + const [updateBadgeLevel, { loading: updateBadgeLevelLoading }] = + useMutation(UPDATE_BADGE_LEVEL); + const [updateSystemBadge, { loading: updateSystemBadgeLoading }] = + useMutation(UPDATE_SYSTEM_BADGE); const handleSave = async () => { - console.log("getting to save"); setError(""); - if (!badgeCriteria) { + const noBadgeLevels = Object.keys(badgeLevels).length === 0; + const badgeLevelsHaveEmptyFields = Object.values(badgeLevels).some( + ({ benchmark, value }) => !benchmark || !value + ); + if (!badgeCriteria || noBadgeLevels || badgeLevelsHaveEmptyFields) { setError("Missing fields"); return; } - let prevBenchmark = 0; - let prevBucks = 0; - for (const bl of selected.badge_level) { - const data = badgeData[badgeLevels[bl.level]]; - const { benchmark, bucks } = data; - - if (benchmark <= 0 || bucks <= 0) { - setError("Missing fields"); - return; - } - - if (benchmark <= prevBenchmark || bucks <= prevBucks) { - setError("Levels must be increasing"); - return; - } - - prevBenchmark = benchmark; - prevBucks = bucks; + const benchmarksAreIncreasing = + (!(Level.NOVICE in badgeLevels) || + !(Level.BRONZE in badgeLevels) || + badgeLevels[Level.NOVICE].benchmark <= + badgeLevels[Level.BRONZE].benchmark) && + (!(Level.BRONZE in badgeLevels) || + !(Level.SILVER in badgeLevels) || + badgeLevels[Level.BRONZE].benchmark <= + badgeLevels[Level.SILVER].benchmark) && + (!(Level.SILVER in badgeLevels) || + !(Level.GOLD in badgeLevels) || + badgeLevels[Level.SILVER].benchmark <= + badgeLevels[Level.GOLD].benchmark) && + (!(Level.GOLD in badgeLevels) || + !(Level.DIAMOND in badgeLevels) || + badgeLevels[Level.GOLD].benchmark <= + badgeLevels[Level.DIAMOND].benchmark); + if (!benchmarksAreIncreasing) { + setError("Invalid benchmark values (must be increasing)"); + return; } - try { - await editSystemBadge({ + const requests: Promise[] = []; + requests.push( + updateSystemBadge({ variables: { - system_badge_id: selected.badge_id, - system_badge_name: selected.name, - system_badge_criteria: badgeCriteria, + name: selected.name, + description: badgeCriteria, }, - }); - } catch (err: any) { - setError("Failed to edit system badge"); - } - - // list of promises for batch update - const mutationPromises: Promise[] = []; - - for (const bl of selected.badge_level) { - const { benchmark: originalBenchmark, bucks: originalBucks } = - originalData[badgeLevels[bl.level]]; - const { benchmark, bucks } = badgeData[badgeLevels[bl.level]]; - - const hasChanged = - originalBenchmark !== benchmark || originalBucks !== bucks; - if (hasChanged) { - mutationPromises.push( - editBadgeLevel({ + }) + ); + for (const [level, data] of Object.entries(badgeLevels)) { + if ( + data.originalBenchmark !== data.benchmark || + data.originalValue !== data.value + ) { + requests.push( + updateBadgeLevel({ variables: { - badge_id: selected.badge_id, - badge_level: bl.level, - benchmark, - marillac_bucks: bucks, + name: selected.name, + level: level as Level, + benchmark: data.benchmark, + value: data.value, }, }) ); } } - // batched update try { - await Promise.all(mutationPromises); - localStorage.setItem("notification", "System badge updated"); - window.location.reload(); + await Promise.all(requests); + await refetch(); + onClose(); } catch (err: any) { - console.error(`Failed to update badge levels`, err); - setError("one or more badge levels failed to update"); + setError("Failed to edit system badge"); } }; return ( - - - - Badge Name - - - {selected.name} - - + - setBadgeCriteria(e.target.value)} - type="text" - width="350px" + update_action={setBadgeCriteria} + size="large" /> - - - - - - Set Badge Levels - - - - - Set Marillac Bucks - - - - - {Object.entries(badgeData).map(([level, data]) => { + + + + Set Badge Levels + + {LEVEL_ORDER.map((level: Level) => { + if (!badgeLevels[level]) return null; + const data = badgeLevels[level]; return ( - - - {level}: - - {level === "Novice" ? ( - - ) : ( - <> - - setBadgeData((prev: any) => { - const newBenchmark = Number(e.target.value); - if (Number.isNaN(newBenchmark)) return prev; - return { - ...prev, - [level]: { - ...prev[level], - benchmark: newBenchmark, - }, - }; - }) - } - w="75px" - min={0} - /> - days - - )} - - - - setBadgeData((prev: any) => { - const newBucks = Number(e.target.value); - if (Number.isNaN(newBucks)) return prev; + + {toTitleCase(level)}: + + setBadgeLevels((prev: any) => { return { ...prev, - [level]: { - ...prev[level], - bucks: newBucks, - }, + [level]: { ...prev[level], benchmark: value }, }; }) } - min={0} + size="small" /> + times ); })} - + + + + Marillac Bucks + + {LEVEL_ORDER.map((level: Level) => { + if (!badgeLevels[level]) return null; + const data = badgeLevels[level]; + return ( + + setBadgeLevels((prev: any) => { + return { + ...prev, + [level]: { ...prev[level], value }, + }; + }) + } + size="small" + /> + ); + })} + - + ); }; diff --git a/frontend/src/admin/pages/badges/components/SystemBadgeTable.tsx b/frontend/src/admin/pages/badges/components/SystemBadgeTable.tsx index 77b3bdb9..97587111 100644 --- a/frontend/src/admin/pages/badges/components/SystemBadgeTable.tsx +++ b/frontend/src/admin/pages/badges/components/SystemBadgeTable.tsx @@ -2,153 +2,108 @@ import { Text, Flex, Image as ChakraImage, Switch } from "@chakra-ui/react"; import EditIcon from "@mui/icons-material/Edit"; import React, { useEffect, useState } from "react"; import { useMutation } from "@apollo/client"; -import { UPDATE_BADGE_STATUS } from "../../../../gql/mutations"; +import { UPDATE_SYSTEM_BADGE } from "../../../../gql/systemBadgeRequests"; import EditSystemBadgeModal from "./EditSystemBadgeModal"; -import DataTable from "../../../common/misc/DataTable"; +import DataTable, { Column, Row } from "../../../../ui/misc/DataTable"; +import { BadgeLevel, SystemBadge } from "../../../../types/models"; +import { ICON_MAP } from "../../../../constants/icons"; +import { Marker } from "../../../../ui/icons/ActionIcons"; +import { LEVEL_ABBREVIATION, LEVEL_ORDER } from "../../../../constants/levels"; +import ToggleButton from "../../../../ui/buttons/ToggleButton"; type SystemBadgeTableProps = { loading: boolean; error: any; - badges: any[]; + badges: SystemBadge[]; + refetch: () => void; }; const SystemBadgeTable = ({ loading, error, badges, + refetch, }: SystemBadgeTableProps) => { - const levels = ["N", "B", "S", "G", "D"]; const [edit, setEdit] = useState(false); - const [selected, setSelected] = useState(null); + const [selected, setSelected] = useState(null); + const [updateError, setUpdateError] = useState(""); - const [statuses, setStatuses] = useState>({}); - const [updateBadgeStatus] = useMutation(UPDATE_BADGE_STATUS); + const [updateBadgeStatus] = useMutation(UPDATE_SYSTEM_BADGE); - useEffect(() => { - setStatuses( - badges.reduce((acc, badge) => { - acc[badge.badge_id] = badge.is_active; - return acc; - }, {}) - ); - }, [badges]); - - async function changeActivityStatus(badge_id: number, is_active: boolean) { + async function changeActivityStatus(name: string, isActive: boolean) { try { await updateBadgeStatus({ variables: { - badge_id, - is_active, + name, + isActive, }, }); - setStatuses((prev: any) => ({ - ...prev, - [badge_id]: is_active, - })); + await refetch(); } catch (err: any) { - console.log(err.message); + setUpdateError(err.message); } } - const columns = [ - { header: "Icon", width: "5%" }, - { header: "Badge Name", width: "35%" }, - { header: "Description", width: "40%" }, + const columns: Column[] = [ + { header: "Icon", width: "5%", center: true }, + { header: "Badge Name", width: "25%" }, + { header: "Description", width: "50%" }, { header: "Offered Levels", width: "10%" }, - { header: "Status", width: "5%" }, - { header: "Actions", width: "5%" }, + { header: "Status", width: "5%", center: true }, + { header: "", width: "5%" }, ]; - const rows: JSX.Element[][] = badges.length - ? badges.map((badge: any) => { - const cells: JSX.Element[] = [ - , - - {badge.name} - , - - {badge.description} - , - - {levels.slice(0, badge.badge_level.length).join(", ")} - , - - - changeActivityStatus(badge.badge_id, !statuses[badge.badge_id]) - } - /> - , - - { - setSelected(badge); - setEdit(true); - }} - > - - - , + const rows: Row[][] = badges.length + ? badges.map((badge: SystemBadge) => { + const IconComponent = ICON_MAP[badge.icon]; + const offeredLevels = LEVEL_ORDER.filter((level) => + badge.BadgeLevel?.some((bl) => bl.level === level) + ) + .map((level) => LEVEL_ABBREVIATION[level]) + .join(", "); + return [ + { element: }, + { element: badge.name }, + { element: badge.description }, + { element: offeredLevels }, + { + element: ( + {}} /> + ), + action: async () => { + changeActivityStatus(badge.name, !badge.is_active); + }, + }, + { + element: , + action: () => { + setSelected(badge); + setEdit(true); + }, + }, ]; - - return cells; }) : []; - const editModal = ( - setEdit(false)} - selected={selected} - /> - ); - return ( - + <> + + { edit && selected && ( + { + setEdit(false); + setSelected(null); + }} + selected={selected} + refetch={refetch} + /> + )} + ); }; diff --git a/frontend/src/admin/pages/home/Main.tsx b/frontend/src/admin/pages/home/Main.tsx index 38a56688..e8f3b505 100644 --- a/frontend/src/admin/pages/home/Main.tsx +++ b/frontend/src/admin/pages/home/Main.tsx @@ -1,55 +1,46 @@ import React from "react"; -import { Flex, Text } from "@chakra-ui/react"; -import NoteSection from "./components/NoteSection"; +import { Flex, Stack, Text } from "@chakra-ui/react"; import RoomsOverview from "./components/RoomsOverview"; +import NoteSection from "./components/NoteSection"; import AnnouncementSection from "./components/AnnouncementSection"; +import { getTodayDateString } from "../../../helpers/formatDateTime"; const AdminHomePage = (): React.ReactElement => { - const getDate = () => { - const options: Intl.DateTimeFormatOptions = { - year: "numeric", - month: "long", - day: "numeric", - }; - return new Date().toLocaleDateString("en-US", options); - }; - return ( <> - - Marillac Place Overview - - - {getDate()} - + + Marillac Place Overview + + + {getTodayDateString()} + + + - + - + + + ); diff --git a/frontend/src/admin/pages/home/components/AnnouncementSection.tsx b/frontend/src/admin/pages/home/components/AnnouncementSection.tsx index dced4eda..dc5e4db2 100644 --- a/frontend/src/admin/pages/home/components/AnnouncementSection.tsx +++ b/frontend/src/admin/pages/home/components/AnnouncementSection.tsx @@ -1,180 +1,127 @@ import { Flex, Text, Link } from "@chakra-ui/react"; import React from "react"; import { useQuery } from "@apollo/client"; -import { Link as RouterLink } from "react-router-dom"; -import { GET_ANNOUNCEMENTS_IN_DATE_RANGE } from "../../../../gql/queries"; -import { - AnnouncementDisplayInfo, - AnnouncementData, -} from "../../../../types/AnnouncementTypes"; -import { ROOM_NUMBERS } from "../../../../constants/misc"; -import { getRecentDate } from "../../../../utils/formatDateTime"; +import { useNavigate } from "react-router-dom"; +import { GET_ANNOUNCEMENTS_FROM_TODAY } from "../../../../gql/announcementRequests"; +import { Announcement, ReceivedAnnouncement } from "../../../../types/models"; +import { ROOM_NUMBERS } from "../../../../constants/rooms"; +import { formatTimeString } from "../../../../helpers/formatDateTime"; +import WidgetContainer from "../../../../ui/containers/WidgetContainer"; +import UnderlineButton from "../../../../ui/buttons/UnderlineButton"; +import { ADMIN_ANNOUNCEMENTS_PAGE } from "../../../../constants/routes"; -const getRoomString = (rooms: number[]) => { - if (rooms.length === 1) { +const getRoomString = (announcements: Announcement) => { + const rooms = ( + announcements.ReceivedAnnouncement?.map( + (ra: ReceivedAnnouncement) => ra.participant?.room + ).filter((room) => room !== undefined) ?? [] + ).sort(); + + if (announcements.ReceivedAnnouncement?.length === 1) { return `Room ${rooms[0]}`; } + if (rooms.length === ROOM_NUMBERS.length) { return "All Rooms"; } return `Rooms ${rooms.join(", ")}`; }; -const AnnouncementCard: React.FC<{ announcement: AnnouncementDisplayInfo }> = ({ +const AnnouncementCard: React.FC<{ announcement: Announcement }> = ({ announcement, }) => { - const formatDate = (date: Date) => { - return date - .toLocaleString("en-ca", { - hour: "numeric", - minute: "2-digit", - hour12: true, - }) - .toLowerCase(); - }; - return ( - - - - {getRoomString(announcement.rooms)} - - - posted at {formatDate(announcement.creation_date)} - - - - - {announcement.message} - + + + + {getRoomString(announcement)} + + + posted at {formatTimeString(announcement.date)} + + + + + {announcement.message} + + - + ); }; const AnnouncementSection = () => { + const navigate = useNavigate(); + const { loading: getAnnouncementsLoading, error: getAnnouncementsError, - data: getAnnouncementsData, - } = useQuery(GET_ANNOUNCEMENTS_IN_DATE_RANGE, { - variables: { - start: getRecentDate(0, true), - end: getRecentDate(-1, true), - }, - }); + data, + } = useQuery(GET_ANNOUNCEMENTS_FROM_TODAY); - // Get the display info for the announcements - const data: AnnouncementDisplayInfo[] = - getAnnouncementsData?.getAnnouncementsInDateRange?.map( - (announcement: AnnouncementData) => ({ - announcement_id: announcement.announcement_id, - rooms: announcement.user_announcements - .map((ua) => ua.participant.room_number) - .sort((a, b) => a - b), - creation_date: new Date(announcement.creation_date), - message: announcement.message, - }) - ) || []; + const announcements: Announcement[] = data?.getAnnouncementsFromToday || []; return ( - - {/* Title Row */} - - + + Announcements - {data.length} new post{data.length === 1 ? "" : "s"} today + {announcements.length} new post{announcements.length === 1 ? "" : "s"} today - - View All - + navigate(ADMIN_ANNOUNCEMENTS_PAGE)} + /> - 0 ? "flex-start" : "center"} + height="calc(100% - 42px)" overflow="scroll" - height="100%" - justifyContent="center" sx={{ "&::-webkit-scrollbar": { display: "none", }, }} > - {getAnnouncementsLoading ? ( - - Loading... - - ) : getAnnouncementsError ? ( - - {getAnnouncementsError?.message || "An error occurred"} - - ) : data.length === 0 ? ( + {announcements.length > 0 ? ( + announcements.map((announcement: Announcement) => ( + + )) + ) : ( No Announcements Yet - ) : ( - - {data.map((announcement: AnnouncementDisplayInfo) => { - return ( - - ); - })} - )} - + ); }; diff --git a/frontend/src/admin/pages/home/components/NoteSection.tsx b/frontend/src/admin/pages/home/components/NoteSection.tsx index 0eabdb33..78ca8614 100644 --- a/frontend/src/admin/pages/home/components/NoteSection.tsx +++ b/frontend/src/admin/pages/home/components/NoteSection.tsx @@ -8,15 +8,28 @@ import { } from "@chakra-ui/react"; import React, { useState } from "react"; import { useMutation, useQuery } from "@apollo/client"; -import SendIcon from "@mui/icons-material/Send"; -import { CREATE_NOTE, DELETE_NOTE } from "../../../../gql/mutations"; -import { GET_NOTES } from "../../../../gql/queries"; +import { + CREATE_NOTE, + DELETE_NOTE, + GET_NOTES, +} from "../../../../gql/noteRequests"; +import WidgetContainer from "../../../../ui/containers/WidgetContainer"; +import { Airplane } from "../../../../ui/icons/ActionIcons"; +import { Note } from "../../../../types/models"; +import { formatDateTimeString } from "../../../../helpers/formatDateTime"; +import UnderlineButton from "../../../../ui/buttons/UnderlineButton"; const NoteSection = () => { const [newNote, setNewNote] = useState(""); - const [createNote] = useMutation(CREATE_NOTE); - const [deleteNote] = useMutation(DELETE_NOTE); + const [createNote, { loading: createNoteLoading, error: createNoteError }] = useMutation(CREATE_NOTE, { + refetchQueries: [{ query: GET_NOTES }], + awaitRefetchQueries: true, + }); + const [deleteNote, { loading: deleteNoteLoading, error: deleteNoteError }] = useMutation(DELETE_NOTE, { + refetchQueries: [{ query: GET_NOTES }], + awaitRefetchQueries: true, + }); const { loading: getNotesLoading, error: getNotesError, @@ -27,182 +40,131 @@ const NoteSection = () => { if (newNote === "") { return; } - try { - await createNote({ - variables: { - message: newNote, - }, - }); - window.location.reload(); - } catch (err) { - console.log(err); - } + await createNote({ + variables: { + message: newNote, + }, + }); + setNewNote(""); } - async function dismissNote(noteId: string) { - try { - await deleteNote({ - variables: { - note_id: noteId, - }, - }); - window.location.reload(); - } catch (err) { - console.log(err); - } + async function dismissNote(nid: number) { + await deleteNote({ + variables: { + nid, + }, + }); } return ( - - - - Internal Notes - - - Expires in 48h + + Internal Notes + + + Expires in 48h + + + + 0 ? "top" : "center"} + sx={{ + "&::-webkit-scrollbar": { + display: "none", + }, + }} + > + {getNotesData?.getNotes.length === 0 ? ( + + No Admin Notes Yet - - - {getNotesLoading ? ( - - Loading... - - ) : getNotesError ? ( - - {getNotesError.message} - - ) : getNotesData.getNotes.length === 0 ? ( - - No Admin Notes Yet - - ) : ( - - {getNotesData.getNotes.map((note: any) => { - const creation = new Date( - note.creation_date.replace("p.m.", "PM").replace("a.m.", "AM") - ) - .toLocaleString("en-ca", { - hour: "numeric", - minute: "2-digit", - hour12: true, - month: "short", - day: "numeric", - }) - .replace("p.m.", "PM") - .replace("a.m.", "AM"); + ) : ( + getNotesData?.getNotes.map((note: Note) => { + return ( + + + + {note.message} + + - return ( - - - - {note.message} - - - - - {creation} - - dismissNote(note.note_id)} - _hover={{ textDecoration: "none" }} - textStyle="web.b3" - color="#000000" - textDecoration="underline" - fontWeight={600} - cursor="pointer" - > - Dismiss - - - - ); - })} - - )} - + + + {formatDateTimeString(note.date)} + + dismissNote(note.nid)} + /> + + + ) + }) + )} - - - + + setNewNote(e.target.value)} border="1px solid" borderColor="neutral.300" + borderRadius="8px" + _focus={{ + borderColor: "neutral.300", + boxShadow: "none", + }} /> - - + - + ); }; diff --git a/frontend/src/admin/pages/home/components/RoomsOverview.tsx b/frontend/src/admin/pages/home/components/RoomsOverview.tsx index 34fab585..7f966659 100644 --- a/frontend/src/admin/pages/home/components/RoomsOverview.tsx +++ b/frontend/src/admin/pages/home/components/RoomsOverview.tsx @@ -1,188 +1,107 @@ -import { Flex, Text, Grid, Link } from "@chakra-ui/react"; -import { useLazyQuery } from "@apollo/client"; -import React, { useEffect, useState } from "react"; -import { GET_PARTICIPANT_BY_ROOM } from "../../../../gql/queries"; -import { ROOM_NUMBERS } from "../../../../constants/misc"; - -type RoomData = { - roomNumber: number; - participantId: number; - taskAssigned: number; -}; - -enum Status { - PENDING_APPROVAL = "PENDING_APPROVAL", - ASSIGNED = "ASSIGNED", - INCOMPLETE = "INCOMPLETE", - COMPLETE = "COMPLETE", - EXCUSED = "EXCUSED", -} +import { Flex, Text, Grid } from "@chakra-ui/react"; +import { useQuery } from "@apollo/client"; +import React, { useContext } from "react"; +import { useNavigate } from "react-router-dom"; +import { GET_NUMBER_OF_ASSIGNED_TASKS_BY_ROOM } from "../../../../gql/assignedTaskRequests"; +import { ROOM_NUMBERS } from "../../../../constants/rooms"; +import { AdminContext } from "../../../AdminContext"; +import WidgetContainer from "../../../../ui/containers/WidgetContainer"; +import UnderlineButton from "../../../../ui/buttons/UnderlineButton"; +import { ADMIN_PARTICIPANTS_PAGE } from "../../../../constants/routes"; export default function RoomsOverview() { - const [roomData, setRoomData] = useState([]); - const [getRoomData, { loading, error }] = useLazyQuery( - GET_PARTICIPANT_BY_ROOM - ); + const { roomToParticipant } = useContext(AdminContext); + const { data, loading, error } = useQuery(GET_NUMBER_OF_ASSIGNED_TASKS_BY_ROOM); + const navigate = useNavigate(); const handleViewSchedule = (roomNumber: number) => { - localStorage.setItem("scheduleSelectedRoom", roomNumber.toString()); + navigate("/admin/schedule", { + state: { + room: roomNumber, + }, + }); }; - useEffect(() => { - const fetchAllRooms = async () => { - const results: RoomData[] = await Promise.all( - ROOM_NUMBERS.map(async (roomNumber) => { - const { data } = await getRoomData({ - variables: { room_number: roomNumber }, - }); - - return { - roomNumber, - participantId: data?.getParticipantByRoom?.participant_id || null, - taskAssigned: - data?.getParticipantByRoom?.assigned_tasks?.filter( - (task: any) => - task.task_status === Status.ASSIGNED || - task.task_status === Status.INCOMPLETE - ).length || 0, - }; - }) - ); - - setRoomData(results); - }; - - fetchAllRooms(); - }, [getRoomData]); - return ( - - + Rooms - + Showing pending tasks for today - - {loading ? ( - - Loading... - - ) : error ? ( - - {error?.message || "An error occured."} - - ) : ( - - {roomData.map((room: RoomData) => ( - - - Room {room.roomNumber} + + {ROOM_NUMBERS.map((room: number) => ( + + + Room {room} + + {room in roomToParticipant ? ( + <> + + ID Number: #{roomToParticipant[room]} - - {room.participantId ? ( - <> - - ID Number:{" "} - - #{room.participantId} - - - - {room.taskAssigned} Assigned Tasks - - handleViewSchedule(room.roomNumber)} - href="/admin/schedule" - textDecoration="underline" - textAlign="center" - textStyle="web.b3" - fontFamily="Nunito" - fontWeight={600} - color="black" - _hover={{ - textDecoration: "none", - }} - > - View Schedule - - - ) : ( - <> - - Room Available. - - - View Participants - - - )} - - ))} - - )} - - + + {data?.getNumberOfAssignedTasksByRoom[room - 1]} Assigned Tasks + + + handleViewSchedule(room)} + /> + + + ) : ( + <> + + Room Available. + + + navigate(ADMIN_PARTICIPANTS_PAGE)} + /> + + + )} + + ))} + + ); } diff --git a/frontend/src/admin/pages/login/Main.tsx b/frontend/src/admin/pages/login/Main.tsx index 5ef47a85..457405bd 100644 --- a/frontend/src/admin/pages/login/Main.tsx +++ b/frontend/src/admin/pages/login/Main.tsx @@ -1,4 +1,4 @@ -import React, { useState, useEffect } from "react"; +import React, { useState, useEffect, useContext } from "react"; import { Navigate, useNavigate } from "react-router-dom"; import { useMutation } from "@apollo/client"; import { @@ -9,69 +9,66 @@ import { Input, FormControl, } from "@chakra-ui/react"; -import { ADMIN_LOGIN } from "../../../gql/mutations"; -import { isAdmin, isRelief } from "../../../utils/checkRole"; +import { ADMIN_LOGIN } from "../../../gql/loginRequests"; +import { verifyRole } from "../../../helpers/verifyRole"; import * as ROUTES from "../../../constants/routes"; -// import Loading from "../../../Loading"; +import LoadingScreen from "../../../ui/screens/LoadingScreen"; +import { ADMIN, RELIEF } from "../../../constants/roles"; +import { AdminContext } from "../../AdminContext"; +import WidgetContainer from "../../../ui/containers/WidgetContainer"; +import DropdownInput from "../../../ui/inputs/DropdownInput"; +import PasswordInput from "../../../ui/inputs/PasswordInput"; +import OrangeButton from "../../../ui/buttons/OrangeButton"; export default function AdminLoginPage() { const navigate = useNavigate(); + const adminContext = useContext(AdminContext); const [loggedIn, setLoggedIn] = useState(false); - const [checkLoggedIn, setCheckLoggedIn] = useState(false); + const [loading, setLoading] = useState(true); + const [error, setError] = useState(""); const [role, setRole] = useState(""); const [password, setPassword] = useState(""); - const [error, setError] = useState(""); - - const [login, { loading }] = useMutation(ADMIN_LOGIN, { + const [adminLogin, { loading: adminLoginLoading }] = useMutation(ADMIN_LOGIN, { onCompleted: (data) => { - localStorage.setItem("admin_token", data.adminLogin.token); + localStorage.setItem("token", data.adminLogin.token); + if (!adminContext) { + setError("admin context not found"); + return; + } + adminContext.setRole(role); navigate(ROUTES.ADMIN_HOME_PAGE); }, onError: (err: Error) => { - // Check if it's a network error (CORS, connection refused, etc.) - if ( - err.message.includes("Failed to fetch") || - err.message.includes("NetworkError") || - err.message.includes("Network request failed") - ) { - setError( - "Unable to connect to server. Please check your internet connection and try again." - ); - } else { - // Show the actual error message from the backend - setError(err.message); - } + setError(err.message); }, }); useEffect(() => { - const tokenCheck = async () => { - const adminUser = await isAdmin(); - const reliefUser = await isRelief(); - if (adminUser || reliefUser) { + const authenticate = async () => { + const isAuthenticated = await verifyRole([ADMIN, RELIEF]); + if (isAuthenticated) { setLoggedIn(true); } - setCheckLoggedIn(true); + setLoading(false); }; - tokenCheck(); + authenticate(); }, []); const handleSubmit = () => { setError(""); - if (!role || !password) { - setError("Missing fields"); + setError("missing required fields"); } else { - login({ variables: { role, password } }); + adminLogin({ variables: { role, password } }); } }; - // if (!checkLoggedIn || loading) { - // return ; - // } + if (loading) { + return ; + } if (loggedIn) { return ; @@ -86,8 +83,8 @@ export default function AdminLoginPage() { bg="neutral.0" > - - Sign in - - Please enter your login information. + Sign in + Please enter your login information. - - - - - - - setPassword(e.target.value)} - placeholder="Password" - /> - + + + + {error && ( @@ -147,18 +131,12 @@ export default function AdminLoginPage() { )} - - + + ); diff --git a/frontend/src/admin/pages/participants/Main.tsx b/frontend/src/admin/pages/participants/Main.tsx index daf4b893..82b063c2 100644 --- a/frontend/src/admin/pages/participants/Main.tsx +++ b/frontend/src/admin/pages/participants/Main.tsx @@ -1,52 +1,54 @@ -import { Flex, Spinner, Text, Grid } from "@chakra-ui/react"; -import React from "react"; -import { useQuery } from "@apollo/client"; -import { GET_CURRENT_PARTICIPANTS } from "../../../gql/queries"; -import { ROOM_NUMBERS } from "../../../constants/misc"; -import OccupiedRoomCard from "./components/OccupiedRoomCard"; -import EmptyRoomCard from "./components/EmptyRoomCard"; -import PastParticipantTable from "./components/PastParticipantTable"; - -export default function AdminParticipantsPage() { - const { loading, error, data } = useQuery(GET_CURRENT_PARTICIPANTS); - - const currentParticipants: Record = {}; - if (data && data.getCurrentParticipants) { - data.getCurrentParticipants.forEach((participant: any) => { - currentParticipants[participant.room_number] = participant; - }); - } - - return ( - - - Current Participants - - - {loading ? ( - - ) : error ? ( - {error.message} - ) : ( - - {ROOM_NUMBERS.map((num) => - num in currentParticipants ? ( - - ) : ( - - ) - )} - - )} - - - Past Participants - - - - ); -} +export {}; +// TODO: Refactor this component +// import { Flex, Spinner, Text, Grid } from "@chakra-ui/react"; +// import React from "react"; +// import { useQuery } from "@apollo/client"; +// import { GET_CURRENT_PARTICIPANTS } from "../../../gql/queries"; +// import { ROOM_NUMBERS } from "../../../constants/misc"; +// import OccupiedRoomCard from "./components/OccupiedRoomCard"; +// import EmptyRoomCard from "./components/EmptyRoomCard"; +// import PastParticipantTable from "./components/PastParticipantTable"; +// +// export default function AdminParticipantsPage() { +// const { loading, error, data } = useQuery(GET_CURRENT_PARTICIPANTS); +// +// const currentParticipants: Record = {}; +// if (data && data.getCurrentParticipants) { +// data.getCurrentParticipants.forEach((participant: any) => { +// currentParticipants[participant.room_number] = participant; +// }); +// } +// +// return ( +// +// +// Current Participants +// +// +// {loading ? ( +// +// ) : error ? ( +// {error.message} +// ) : ( +// +// {ROOM_NUMBERS.map((num) => +// num in currentParticipants ? ( +// +// ) : ( +// +// ) +// )} +// +// )} +// +// +// Past Participants +// +// +// +// ); +// } diff --git a/frontend/src/admin/pages/participants/components/AddParticipantCard.tsx b/frontend/src/admin/pages/participants/components/AddParticipantCard.tsx index deadd719..24d4d107 100644 --- a/frontend/src/admin/pages/participants/components/AddParticipantCard.tsx +++ b/frontend/src/admin/pages/participants/components/AddParticipantCard.tsx @@ -1,91 +1,93 @@ -import React, { useState } from "react"; -import { useMutation } from "@apollo/client"; -import { CREATE_PARTICIPANT } from "../../../../gql/mutations"; -import ModalContainer from "../../../common/form/ModalContainer"; -import CoreInput from "../../../common/form/CoreInput"; - -type AddParticipantCardProps = { - roomNumber: number; - close: () => void; -}; - -const AddParticipantCard = ({ - roomNumber, - close, -}: AddParticipantCardProps): React.ReactElement => { - const [id, setId] = useState(""); - const [arrivalDate, setArrivalDate] = useState(""); - const [password, setPassword] = useState(""); - - const [error, setError] = useState(""); - - const [createParticipant, { loading }] = useMutation(CREATE_PARTICIPANT, { - onCompleted: () => { - localStorage.setItem( - "notification", - "Participant #" + id + " added to Room " + roomNumber - ); - window.location.reload(); - }, - onError: (err) => { - setError(err.message); - }, - }); - - function handleSubmit() { - setError(""); - - if (!id || !arrivalDate || !password) { - setError("Missing fields"); - } else { - const today = new Date().toLocaleDateString("en-ca"); - if (arrivalDate > today) { - setError("Arrival is in the future"); - return; - } - - createParticipant({ - variables: { - participant_id: Number(id), - room_number: roomNumber, - arrival_date: arrivalDate, - password, - }, - }); - } - } - - return ( - - setId(e.target.value)} - type="number" - width="350px" - /> - setArrivalDate(e.target.value)} - type="date" - width="350px" - /> - setPassword(e.target.value)} - type="password" - width="350px" - /> - - ); -}; - -export default AddParticipantCard; +export {}; +// TODO: Refactor this component +// import React, { useState } from "react"; +// import { useMutation } from "@apollo/client"; +// import { CREATE_PARTICIPANT } from "../../../../gql/mutations"; +// import ModalContainer from "../../../common/form/ModalContainer"; +// import CoreInput from "../../../common/form/CoreInput"; +// +// type AddParticipantCardProps = { +// roomNumber: number; +// close: () => void; +// }; +// +// const AddParticipantCard = ({ +// roomNumber, +// close, +// }: AddParticipantCardProps): React.ReactElement => { +// const [id, setId] = useState(""); +// const [arrivalDate, setArrivalDate] = useState(""); +// const [password, setPassword] = useState(""); +// +// const [error, setError] = useState(""); +// +// const [createParticipant, { loading }] = useMutation(CREATE_PARTICIPANT, { +// onCompleted: () => { +// localStorage.setItem( +// "notification", +// "Participant #" + id + " added to Room " + roomNumber +// ); +// window.location.reload(); +// }, +// onError: (err) => { +// setError(err.message); +// }, +// }); +// +// function handleSubmit() { +// setError(""); +// +// if (!id || !arrivalDate || !password) { +// setError("Missing fields"); +// } else { +// const today = new Date().toLocaleDateString("en-ca"); +// if (arrivalDate > today) { +// setError("Arrival is in the future"); +// return; +// } +// +// createParticipant({ +// variables: { +// participant_id: Number(id), +// room_number: roomNumber, +// arrival_date: arrivalDate, +// password, +// }, +// }); +// } +// } +// +// return ( +// +// setId(e.target.value)} +// type="number" +// width="350px" +// /> +// setArrivalDate(e.target.value)} +// type="date" +// width="350px" +// /> +// setPassword(e.target.value)} +// type="password" +// width="350px" +// /> +// +// ); +// }; +// +// export default AddParticipantCard; diff --git a/frontend/src/admin/pages/participants/components/EditParticipantCard.tsx b/frontend/src/admin/pages/participants/components/EditParticipantCard.tsx index a621b98e..029ee8f1 100644 --- a/frontend/src/admin/pages/participants/components/EditParticipantCard.tsx +++ b/frontend/src/admin/pages/participants/components/EditParticipantCard.tsx @@ -1,261 +1,263 @@ -import { Flex, FormControl, Input, Text, Button } from "@chakra-ui/react"; -import { useMutation } from "@apollo/client"; -import React, { useState } from "react"; -import { ROOM_NUMBERS } from "../../../../constants/misc"; -import { UPDATE_PARTICIPANT } from "../../../../gql/mutations"; -import ModalContainer from "../../../common/form/ModalContainer"; -import CoreInput from "../../../common/form/CoreInput"; -import GreenButton from "../../../common/buttons/GreenButton"; - -type EditParticipantCardProps = { - roomNumber: number; - participants: Record; - close: () => void; -}; - -export default function EditParticipantCard({ - roomNumber, - participants, - close, -}: EditParticipantCardProps) { - const id: number = participants[roomNumber].participant_id; - const today = new Date().toLocaleDateString("en-ca"); - const currentArrivalDate = participants[roomNumber].arrival_date; - const currentPassword = participants[roomNumber].password; - - const [arrivalDate, setArrivalDate] = useState(currentArrivalDate); - const [password, setPassword] = useState(currentPassword); - const [departureDate, setDepartureDate] = useState(""); - - const [swapParticipant, setSwapParticipant] = useState(false); - const [endStay, setEndStay] = useState(false); - - const [error, setError] = useState(""); - const [selectedSwap, setSelectedSwap] = useState(-1); - - const [updateParticipant] = useMutation(UPDATE_PARTICIPANT); - - async function handleSubmit() { - setError(""); - if ( - !arrivalDate || - !password || - (endStay && !departureDate) || - (swapParticipant && selectedSwap === -1) - ) { - setError("Missing fields"); - } else if (swapParticipant && selectedSwap === roomNumber) { - setError("Invalid swap."); - } else if ( - arrivalDate === currentArrivalDate && - password === currentPassword && - departureDate === "" && - !swapParticipant && - !endStay - ) { - setError("No changes made"); - } else if (departureDate && arrivalDate >= departureDate) { - setError("Arrival date must be less than departure date"); - } else { - console.log(arrivalDate); - if (arrivalDate > today) { - setError("Arrival is in the future"); - } else if (departureDate && departureDate > today) { - setError("Departure is in the future"); - } else { - try { - await updateParticipant({ - variables: { - participant_id: id, - room_number: swapParticipant ? selectedSwap : undefined, - arrival_date: arrivalDate, - departure_date: endStay ? departureDate : undefined, - account_removal_date: endStay ? today : undefined, - password, - }, - }); - - if (swapParticipant && selectedSwap in participants) { - await updateParticipant({ - variables: { - participant_id: participants[selectedSwap].participant_id, - room_number: roomNumber, - }, - }); - } - - if (swapParticipant) { - let message = - "Participant #" + id + " moved to Room " + selectedSwap; - if (selectedSwap in participants) { - message += - ", Participant #" + - participants[selectedSwap].participant_id + - " moved to Room " + - roomNumber; - } - localStorage.setItem("notification", message); - } else if (endStay) { - localStorage.setItem( - "notification", - "Participant #" + id + " removed from Room " + roomNumber - ); - } else { - localStorage.setItem( - "notification", - "Participant #" + id + " updated" - ); - } - window.location.reload(); - } catch (err: any) { - setError(err.message); - } - } - } - } - - return ( - - - - ID Number - - - - - setArrivalDate(e.target.value)} - type="date" - width="400px" - /> - - setPassword(e.target.value)} - type="password" - width="400px" - /> - - - { - setEndStay(false); - setDepartureDate(""); - setError(""); - setSwapParticipant(true); - }} - is_active={swapParticipant} - /> - - - - {(endStay || swapParticipant) && ( - - )} - - {swapParticipant && ( - - - Available Rooms - - - {ROOM_NUMBERS.map((num: number) => ( - setSelectedSwap(num)} - is_active={selectedSwap === num} - /> - ))} - - - )} - - {selectedSwap !== -1 && - (selectedSwap === roomNumber ? ( - - Participant #{participants[roomNumber].participant_id} is already in - Room {roomNumber}. - - ) : ( - - - Participant #{participants[roomNumber].participant_id} will be - moved to Room {selectedSwap}. - - {selectedSwap in participants && ( - - Participant #{participants[selectedSwap].participant_id} will be - moved to Room {roomNumber}. - - )} - - ))} - - {endStay && ( - setDepartureDate(e.target.value)} - type="date" - width="400px" - /> - )} - - ); -} +export {}; +// TODO: Refactor this component +// import { Flex, FormControl, Input, Text, Button } from "@chakra-ui/react"; +// import { useMutation } from "@apollo/client"; +// import React, { useState } from "react"; +// import { ROOM_NUMBERS } from "../../../../constants/misc"; +// import { UPDATE_PARTICIPANT } from "../../../../gql/mutations"; +// import ModalContainer from "../../../common/form/ModalContainer"; +// import CoreInput from "../../../common/form/CoreInput"; +// import GreenButton from "../../../common/buttons/GreenButton"; +// +// type EditParticipantCardProps = { +// roomNumber: number; +// participants: Record; +// close: () => void; +// }; +// +// export default function EditParticipantCard({ +// roomNumber, +// participants, +// close, +// }: EditParticipantCardProps) { +// const id: number = participants[roomNumber].participant_id; +// const today = new Date().toLocaleDateString("en-ca"); +// const currentArrivalDate = participants[roomNumber].arrival_date; +// const currentPassword = participants[roomNumber].password; +// +// const [arrivalDate, setArrivalDate] = useState(currentArrivalDate); +// const [password, setPassword] = useState(currentPassword); +// const [departureDate, setDepartureDate] = useState(""); +// +// const [swapParticipant, setSwapParticipant] = useState(false); +// const [endStay, setEndStay] = useState(false); +// +// const [error, setError] = useState(""); +// const [selectedSwap, setSelectedSwap] = useState(-1); +// +// const [updateParticipant] = useMutation(UPDATE_PARTICIPANT); +// +// async function handleSubmit() { +// setError(""); +// if ( +// !arrivalDate || +// !password || +// (endStay && !departureDate) || +// (swapParticipant && selectedSwap === -1) +// ) { +// setError("Missing fields"); +// } else if (swapParticipant && selectedSwap === roomNumber) { +// setError("Invalid swap."); +// } else if ( +// arrivalDate === currentArrivalDate && +// password === currentPassword && +// departureDate === "" && +// !swapParticipant && +// !endStay +// ) { +// setError("No changes made"); +// } else if (departureDate && arrivalDate >= departureDate) { +// setError("Arrival date must be less than departure date"); +// } else { +// console.log(arrivalDate); +// if (arrivalDate > today) { +// setError("Arrival is in the future"); +// } else if (departureDate && departureDate > today) { +// setError("Departure is in the future"); +// } else { +// try { +// await updateParticipant({ +// variables: { +// participant_id: id, +// room_number: swapParticipant ? selectedSwap : undefined, +// arrival_date: arrivalDate, +// departure_date: endStay ? departureDate : undefined, +// account_removal_date: endStay ? today : undefined, +// password, +// }, +// }); +// +// if (swapParticipant && selectedSwap in participants) { +// await updateParticipant({ +// variables: { +// participant_id: participants[selectedSwap].participant_id, +// room_number: roomNumber, +// }, +// }); +// } +// +// if (swapParticipant) { +// let message = +// "Participant #" + id + " moved to Room " + selectedSwap; +// if (selectedSwap in participants) { +// message += +// ", Participant #" + +// participants[selectedSwap].participant_id + +// " moved to Room " + +// roomNumber; +// } +// localStorage.setItem("notification", message); +// } else if (endStay) { +// localStorage.setItem( +// "notification", +// "Participant #" + id + " removed from Room " + roomNumber +// ); +// } else { +// localStorage.setItem( +// "notification", +// "Participant #" + id + " updated" +// ); +// } +// window.location.reload(); +// } catch (err: any) { +// setError(err.message); +// } +// } +// } +// } +// +// return ( +// +// +// +// ID Number +// +// +// +// +// setArrivalDate(e.target.value)} +// type="date" +// width="400px" +// /> +// +// setPassword(e.target.value)} +// type="password" +// width="400px" +// /> +// +// +// { +// setEndStay(false); +// setDepartureDate(""); +// setError(""); +// setSwapParticipant(true); +// }} +// is_active={swapParticipant} +// /> +// +// +// +// {(endStay || swapParticipant) && ( +// +// )} +// +// {swapParticipant && ( +// +// +// Available Rooms +// +// +// {ROOM_NUMBERS.map((num: number) => ( +// setSelectedSwap(num)} +// is_active={selectedSwap === num} +// /> +// ))} +// +// +// )} +// +// {selectedSwap !== -1 && +// (selectedSwap === roomNumber ? ( +// +// Participant #{participants[roomNumber].participant_id} is already in +// Room {roomNumber}. +// +// ) : ( +// +// +// Participant #{participants[roomNumber].participant_id} will be +// moved to Room {selectedSwap}. +// +// {selectedSwap in participants && ( +// +// Participant #{participants[selectedSwap].participant_id} will be +// moved to Room {roomNumber}. +// +// )} +// +// ))} +// +// {endStay && ( +// setDepartureDate(e.target.value)} +// type="date" +// width="400px" +// /> +// )} +// +// ); +// } diff --git a/frontend/src/admin/pages/participants/components/EditPastParticipantCard.tsx b/frontend/src/admin/pages/participants/components/EditPastParticipantCard.tsx index 9700019a..a05a3e64 100644 --- a/frontend/src/admin/pages/participants/components/EditPastParticipantCard.tsx +++ b/frontend/src/admin/pages/participants/components/EditPastParticipantCard.tsx @@ -1,111 +1,113 @@ -import { Flex, FormControl, Input, Text } from "@chakra-ui/react"; -import { useMutation } from "@apollo/client"; -import React, { useState } from "react"; -import { UPDATE_PARTICIPANT } from "../../../../gql/mutations"; -import ModalContainer from "../../../common/form/ModalContainer"; -import CoreInput from "../../../common/form/CoreInput"; - -type EditPastParticipantCardProps = { - id: number; - arrival: string; - departure: string; - close: () => void; -}; - -export default function EditPastParticipantCard({ - id, - arrival, - departure, - close, -}: EditPastParticipantCardProps) { - const [arrivalDate, setArrivalDate] = useState(arrival); - const [departureDate, setDepartureDate] = useState(departure); - - const [error, setError] = useState(""); - - const [updateParticipant] = useMutation(UPDATE_PARTICIPANT); - - async function handleSubmit() { - setError(""); - if (!arrivalDate || !departureDate) { - setError("Missing fields"); - } else if (arrivalDate === arrival && departureDate === departure) { - setError("No changes made"); - } else if (departureDate && arrivalDate >= departureDate) { - setError("Arrival date must be less than departure date"); - } else { - const today = new Date().toLocaleDateString("en-ca"); - if (arrivalDate > today) { - setError("Arrival is in the future"); - } else if (departureDate && departureDate > today) { - setError("Departure is in the future"); - } else { - try { - await updateParticipant({ - variables: { - participant_id: id, - arrival_date: arrivalDate, - departure_date: departureDate, - }, - }); - localStorage.setItem( - "notification", - "Participant #" + id + " updated" - ); - window.location.reload(); - } catch (err: any) { - setError(err.message); - } - } - } - } - - return ( - - - - ID Number - - - - - - setArrivalDate(e.target.value)} - type="date" - width="100%" - /> - setDepartureDate(e.target.value)} - type="date" - width="100%" - /> - - - ); -} +export {}; +// TODO: Refactor this component +// import { Flex, FormControl, Input, Text } from "@chakra-ui/react"; +// import { useMutation } from "@apollo/client"; +// import React, { useState } from "react"; +// import { UPDATE_PARTICIPANT } from "../../../../gql/mutations"; +// import ModalContainer from "../../../common/form/ModalContainer"; +// import CoreInput from "../../../common/form/CoreInput"; +// +// type EditPastParticipantCardProps = { +// id: number; +// arrival: string; +// departure: string; +// close: () => void; +// }; +// +// export default function EditPastParticipantCard({ +// id, +// arrival, +// departure, +// close, +// }: EditPastParticipantCardProps) { +// const [arrivalDate, setArrivalDate] = useState(arrival); +// const [departureDate, setDepartureDate] = useState(departure); +// +// const [error, setError] = useState(""); +// +// const [updateParticipant] = useMutation(UPDATE_PARTICIPANT); +// +// async function handleSubmit() { +// setError(""); +// if (!arrivalDate || !departureDate) { +// setError("Missing fields"); +// } else if (arrivalDate === arrival && departureDate === departure) { +// setError("No changes made"); +// } else if (departureDate && arrivalDate >= departureDate) { +// setError("Arrival date must be less than departure date"); +// } else { +// const today = new Date().toLocaleDateString("en-ca"); +// if (arrivalDate > today) { +// setError("Arrival is in the future"); +// } else if (departureDate && departureDate > today) { +// setError("Departure is in the future"); +// } else { +// try { +// await updateParticipant({ +// variables: { +// participant_id: id, +// arrival_date: arrivalDate, +// departure_date: departureDate, +// }, +// }); +// localStorage.setItem( +// "notification", +// "Participant #" + id + " updated" +// ); +// window.location.reload(); +// } catch (err: any) { +// setError(err.message); +// } +// } +// } +// } +// +// return ( +// +// +// +// ID Number +// +// +// +// +// +// setArrivalDate(e.target.value)} +// type="date" +// width="100%" +// /> +// setDepartureDate(e.target.value)} +// type="date" +// width="100%" +// /> +// +// +// ); +// } diff --git a/frontend/src/admin/pages/participants/components/EmptyRoomCard.tsx b/frontend/src/admin/pages/participants/components/EmptyRoomCard.tsx index 9a84edbe..1bc77f81 100644 --- a/frontend/src/admin/pages/participants/components/EmptyRoomCard.tsx +++ b/frontend/src/admin/pages/participants/components/EmptyRoomCard.tsx @@ -1,57 +1,59 @@ -import { Flex, Text } from "@chakra-ui/react"; -import React, { useState } from "react"; -import AddParticipantCard from "./AddParticipantCard"; -import OrangeButton from "../../../common/buttons/OrangeButton"; - -type EmptyRoomCardProps = { - roomNumber: number; -}; - -export default function EmptyRoomCard({ roomNumber }: EmptyRoomCardProps) { - const [addParticipant, setAddParticipant] = useState(false); - return ( - - - Room {roomNumber} - - - This room is empty. - - - setAddParticipant(true)} - is_active={addParticipant} - /> - - - {addParticipant && ( - setAddParticipant(false)} - /> - )} - - ); -} +export {}; +// TODO: Refactor this component +// import { Flex, Text } from "@chakra-ui/react"; +// import React, { useState } from "react"; +// import AddParticipantCard from "./AddParticipantCard"; +// import OrangeButton from "../../../common/buttons/OrangeButton"; +// +// type EmptyRoomCardProps = { +// roomNumber: number; +// }; +// +// export default function EmptyRoomCard({ roomNumber }: EmptyRoomCardProps) { +// const [addParticipant, setAddParticipant] = useState(false); +// return ( +// +// +// Room {roomNumber} +// +// +// This room is empty. +// +// +// setAddParticipant(true)} +// is_active={addParticipant} +// /> +// +// +// {addParticipant && ( +// setAddParticipant(false)} +// /> +// )} +// +// ); +// } diff --git a/frontend/src/admin/pages/participants/components/OccupiedRoomCard.tsx b/frontend/src/admin/pages/participants/components/OccupiedRoomCard.tsx index 2993d9e8..f868dd21 100644 --- a/frontend/src/admin/pages/participants/components/OccupiedRoomCard.tsx +++ b/frontend/src/admin/pages/participants/components/OccupiedRoomCard.tsx @@ -1,80 +1,82 @@ -import { Flex, Text } from "@chakra-ui/react"; -import React, { useState } from "react"; -import EditParticipantCard from "./EditParticipantCard"; -import OrangeButton from "../../../common/buttons/OrangeButton"; - -type OccupiedRoomCardProps = { - roomNumber: number; - participants: Record; -}; - -const OccupiedRoomCard = ({ - roomNumber, - participants, -}: OccupiedRoomCardProps) => { - const [editParticipant, setEditParticipant] = useState(false); - const id = participants[roomNumber].participant_id; - const arrival = participants[roomNumber].arrival_date; - - return ( - - - Room {roomNumber} - - - - ID Number:  - - #{id} - - - - Arrival Date:  - - {arrival} - - - - - setEditParticipant(true)} - is_active={editParticipant} - /> - - - {editParticipant && ( - setEditParticipant(false)} - /> - )} - - ); -}; - -export default OccupiedRoomCard; +export {}; +// TODO: Refactor this component +// import { Flex, Text } from "@chakra-ui/react"; +// import React, { useState } from "react"; +// import EditParticipantCard from "./EditParticipantCard"; +// import OrangeButton from "../../../common/buttons/OrangeButton"; +// +// type OccupiedRoomCardProps = { +// roomNumber: number; +// participants: Record; +// }; +// +// const OccupiedRoomCard = ({ +// roomNumber, +// participants, +// }: OccupiedRoomCardProps) => { +// const [editParticipant, setEditParticipant] = useState(false); +// const id = participants[roomNumber].participant_id; +// const arrival = participants[roomNumber].arrival_date; +// +// return ( +// +// +// Room {roomNumber} +// +// +// +// ID Number:  +// +// #{id} +// +// +// +// Arrival Date:  +// +// {arrival} +// +// +// +// +// setEditParticipant(true)} +// is_active={editParticipant} +// /> +// +// +// {editParticipant && ( +// setEditParticipant(false)} +// /> +// )} +// +// ); +// }; +// +// export default OccupiedRoomCard; diff --git a/frontend/src/admin/pages/participants/components/PastParticipantTable.tsx b/frontend/src/admin/pages/participants/components/PastParticipantTable.tsx index d8f47049..8431d79d 100644 --- a/frontend/src/admin/pages/participants/components/PastParticipantTable.tsx +++ b/frontend/src/admin/pages/participants/components/PastParticipantTable.tsx @@ -1,238 +1,240 @@ -import { Text, Flex } from "@chakra-ui/react"; -import EditIcon from "@mui/icons-material/Edit"; -import ExpandLessIcon from "@mui/icons-material/ExpandLess"; -import ExpandMoreIcon from "@mui/icons-material/ExpandMore"; -import FileDownloadOutlinedIcon from "@mui/icons-material/FileDownloadOutlined"; -import React, { useEffect, useState } from "react"; -import { useQuery } from "@apollo/client"; -import { GET_PAST_PARTICIPANTS } from "../../../../gql/queries"; -import EditPastParticipantCard from "./EditPastParticipantCard"; -import DataTable from "../../../common/misc/DataTable"; - -type SortIconProps = { - state: number; -}; - -function SortIcon({ state }: SortIconProps) { - return ( - - - - - ); -} - -const PastParticipantTable = () => { - const [pastParticipants, setPastParticipants] = useState([]); - const { loading, error, data } = useQuery(GET_PAST_PARTICIPANTS); - - useEffect(() => { - if (!loading && !error && data) { - setPastParticipants(data.getPastParticipants); - } - }, [loading, error, data]); - - const [edit, setEdit] = useState(false); - const [selectedId, setSelectedId] = useState(-1); - const [selectedArrival, setSelectedArrival] = useState(""); - const [selectedDeparture, setSelectedDeparture] = useState(""); - - const [idState, setIdState] = useState(0); - const [arrivalState, setArrivalState] = useState(0); - const [departureState, setDepartureState] = useState(0); - - function handleIdStateChange() { - setArrivalState(0); - setDepartureState(0); - - const newState = (idState + 1) % 3; - let sorted: any; - if (newState === 1) { - sorted = [...pastParticipants].sort( - (a: any, b: any) => a.participant_id - b.participant_id - ); - } else { - sorted = [...pastParticipants].sort( - (a: any, b: any) => b.participant_id - a.participant_id - ); - } - - setPastParticipants(sorted); - setIdState(newState); - } - - function handleArrivalStateChange() { - setIdState(0); - setDepartureState(0); - - const newState = (arrivalState + 1) % 3; - let sorted: any; - if (newState === 1) { - sorted = [...pastParticipants].sort((a: any, b: any) => - a.arrival_date.localeCompare(b.arrival_date) - ); - } else { - sorted = [...pastParticipants].sort((a: any, b: any) => - b.arrival_date.localeCompare(a.arrival_date) - ); - } - - setPastParticipants(sorted); - setArrivalState(newState); - } - - function handleDepartureStateChange() { - setIdState(0); - setArrivalState(0); - - const newState = (departureState + 1) % 3; - let sorted: any; - if (newState === 1) { - sorted = [...pastParticipants].sort((a: any, b: any) => - a.departure_date.localeCompare(b.departure_date) - ); - } else { - sorted = [...pastParticipants].sort((a: any, b: any) => - b.departure_date.localeCompare(a.departure_date) - ); - } - - setPastParticipants(sorted); - setDepartureState(newState); - } - - const columns = [ - { - header: "ID Number", - width: "30%", - sort: ( -
handleIdStateChange()}> - -
- ), - }, - { - header: "Arrival Date", - width: "30%", - sort: ( -
handleArrivalStateChange()}> - -
- ), - }, - { - header: "Departure Date", - width: "30%", - sort: ( -
handleDepartureStateChange()}> - -
- ), - }, - { header: "", width: "10%" }, - ]; - - const rows: JSX.Element[][] = pastParticipants.length - ? pastParticipants.map((participant: any, index: number) => { - const cells: JSX.Element[] = [ - - {participant.participant_id} - , - - {participant.arrival_date} - , - - {participant.departure_date} - , - - { - setSelectedId(participant.participant_id); - setSelectedArrival(participant.arrival_date); - setSelectedDeparture(participant.departure_date); - setEdit(true); - }} - > - - - - , - ]; - return cells; - }) - : []; - - const editModal = ( - setEdit(false)} - /> - ); - - return ( - <> - - - ); -}; - -export default PastParticipantTable; +export {}; +// TODO: Refactor this component +// import { Text, Flex } from "@chakra-ui/react"; +// import EditIcon from "@mui/icons-material/Edit"; +// import ExpandLessIcon from "@mui/icons-material/ExpandLess"; +// import ExpandMoreIcon from "@mui/icons-material/ExpandMore"; +// import FileDownloadOutlinedIcon from "@mui/icons-material/FileDownloadOutlined"; +// import React, { useEffect, useState } from "react"; +// import { useQuery } from "@apollo/client"; +// import { GET_PAST_PARTICIPANTS } from "../../../../gql/queries"; +// import EditPastParticipantCard from "./EditPastParticipantCard"; +// import DataTable from "../../../common/misc/DataTable"; +// +// type SortIconProps = { +// state: number; +// }; +// +// function SortIcon({ state }: SortIconProps) { +// return ( +// +// +// +// +// ); +// } +// +// const PastParticipantTable = () => { +// const [pastParticipants, setPastParticipants] = useState([]); +// const { loading, error, data } = useQuery(GET_PAST_PARTICIPANTS); +// +// useEffect(() => { +// if (!loading && !error && data) { +// setPastParticipants(data.getPastParticipants); +// } +// }, [loading, error, data]); +// +// const [edit, setEdit] = useState(false); +// const [selectedId, setSelectedId] = useState(-1); +// const [selectedArrival, setSelectedArrival] = useState(""); +// const [selectedDeparture, setSelectedDeparture] = useState(""); +// +// const [idState, setIdState] = useState(0); +// const [arrivalState, setArrivalState] = useState(0); +// const [departureState, setDepartureState] = useState(0); +// +// function handleIdStateChange() { +// setArrivalState(0); +// setDepartureState(0); +// +// const newState = (idState + 1) % 3; +// let sorted: any; +// if (newState === 1) { +// sorted = [...pastParticipants].sort( +// (a: any, b: any) => a.participant_id - b.participant_id +// ); +// } else { +// sorted = [...pastParticipants].sort( +// (a: any, b: any) => b.participant_id - a.participant_id +// ); +// } +// +// setPastParticipants(sorted); +// setIdState(newState); +// } +// +// function handleArrivalStateChange() { +// setIdState(0); +// setDepartureState(0); +// +// const newState = (arrivalState + 1) % 3; +// let sorted: any; +// if (newState === 1) { +// sorted = [...pastParticipants].sort((a: any, b: any) => +// a.arrival_date.localeCompare(b.arrival_date) +// ); +// } else { +// sorted = [...pastParticipants].sort((a: any, b: any) => +// b.arrival_date.localeCompare(a.arrival_date) +// ); +// } +// +// setPastParticipants(sorted); +// setArrivalState(newState); +// } +// +// function handleDepartureStateChange() { +// setIdState(0); +// setArrivalState(0); +// +// const newState = (departureState + 1) % 3; +// let sorted: any; +// if (newState === 1) { +// sorted = [...pastParticipants].sort((a: any, b: any) => +// a.departure_date.localeCompare(b.departure_date) +// ); +// } else { +// sorted = [...pastParticipants].sort((a: any, b: any) => +// b.departure_date.localeCompare(a.departure_date) +// ); +// } +// +// setPastParticipants(sorted); +// setDepartureState(newState); +// } +// +// const columns = [ +// { +// header: "ID Number", +// width: "30%", +// sort: ( +//
handleIdStateChange()}> +// +//
+// ), +// }, +// { +// header: "Arrival Date", +// width: "30%", +// sort: ( +//
handleArrivalStateChange()}> +// +//
+// ), +// }, +// { +// header: "Departure Date", +// width: "30%", +// sort: ( +//
handleDepartureStateChange()}> +// +//
+// ), +// }, +// { header: "", width: "10%" }, +// ]; +// +// const rows: JSX.Element[][] = pastParticipants.length +// ? pastParticipants.map((participant: any, index: number) => { +// const cells: JSX.Element[] = [ +// +// {participant.participant_id} +// , +// +// {participant.arrival_date} +// , +// +// {participant.departure_date} +// , +// +// { +// setSelectedId(participant.participant_id); +// setSelectedArrival(participant.arrival_date); +// setSelectedDeparture(participant.departure_date); +// setEdit(true); +// }} +// > +// +// +// +// , +// ]; +// return cells; +// }) +// : []; +// +// const editModal = ( +// setEdit(false)} +// /> +// ); +// +// return ( +// <> +// +// +// ); +// }; +// +// export default PastParticipantTable; diff --git a/frontend/src/admin/pages/reports/Main.tsx b/frontend/src/admin/pages/reports/Main.tsx index aba94f58..63216418 100644 --- a/frontend/src/admin/pages/reports/Main.tsx +++ b/frontend/src/admin/pages/reports/Main.tsx @@ -1,208 +1,210 @@ -import React, { useState, useEffect } from "react"; -import { Flex, Text } from "@chakra-ui/react"; -import { useQuery, useMutation } from "@apollo/client"; -import ReportsTable from "./components/ReportsTable"; -import AddEmailModal from "./components/AddEmailModal"; -import EditEmailModal from "./components/EditEmailModal"; -import { GET_REPORT_RECIPIENTS } from "../../../gql/queries"; -import { - CREATE_REPORT_RECIPIENT, - UPDATE_REPORT_RECIPIENT, - DELETE_REPORT_RECIPIENT, -} from "../../../gql/mutations"; - -type ReportRecipient = { - report_recipient_id: number; - email: string; - weekly: boolean; - monthly: boolean; - last_report_sent: string | null; -}; - -type Report = { - id: number; - email: string; - weekly: boolean; - monthly: boolean; - lastReportSent: string; -}; - -export default function AdminReportsPage() { - const [addEmail, setAddEmail] = useState(false); - const [editEmail, setEditEmail] = useState(false); - const [selectedEmail, setSelectedEmail] = useState(null); - const [reports, setReports] = useState([]); - - const { loading, error, data, refetch } = useQuery(GET_REPORT_RECIPIENTS); - const [createReportRecipient] = useMutation(CREATE_REPORT_RECIPIENT); - const [updateReportRecipient] = useMutation(UPDATE_REPORT_RECIPIENT); - const [deleteReportRecipient] = useMutation(DELETE_REPORT_RECIPIENT); - - // Transform backend data to frontend format - useEffect(() => { - if (data?.getReportRecipients) { - const transformed: Report[] = data.getReportRecipients.map( - (recipient: ReportRecipient) => ({ - id: recipient.report_recipient_id, - email: recipient.email, - weekly: recipient.weekly, - monthly: recipient.monthly, - lastReportSent: recipient.last_report_sent || "Never", - }) - ); - setReports(transformed); - } - }, [data]); - - const handleAddEmail = async (emailData: any) => { - try { - await createReportRecipient({ - variables: { - email: emailData.email, - weekly: emailData.weekly, - monthly: emailData.monthly, - }, - }); - refetch(); - setAddEmail(false); - } catch (err) { - console.error("Error creating report recipient:", err); - } - }; - - const handleEditEmail = async (emailData: any) => { - try { - await updateReportRecipient({ - variables: { - report_recipient_id: selectedEmail.id, - email: emailData.email, - weekly: emailData.weekly, - monthly: emailData.monthly, - }, - }); - refetch(); - setEditEmail(false); - setSelectedEmail(null); - } catch (err) { - console.error("Error updating report recipient:", err); - } - }; - - const handleDeleteEmail = async (id: number) => { - try { - await deleteReportRecipient({ - variables: { - report_recipient_id: id, - }, - }); - refetch(); - } catch (err) { - console.error("Error deleting report recipient:", err); - } - }; - - const handleToggleWeekly = async (id: number, weekly: boolean) => { - try { - await updateReportRecipient({ - variables: { - report_recipient_id: id, - weekly, - }, - }); - refetch(); - } catch (err) { - console.error("Error toggling weekly:", err); - } - }; - - const handleToggleMonthly = async (id: number, monthly: boolean) => { - try { - await updateReportRecipient({ - variables: { - report_recipient_id: id, - monthly, - }, - }); - refetch(); - } catch (err) { - console.error("Error toggling monthly:", err); - } - }; - - const handleEditClick = (email: any) => { - setSelectedEmail(email); - setEditEmail(true); - }; - - if (loading) { - return ( - - Loading... - - ); - } - - if (error) { - return ( - - Error loading reports: {error.message} - - ); - } - - return ( - - - - - Reports - - - Reports will be automatically generated and emailed. Edit and select - frequency of emails in the list below. - - - - setAddEmail(true)} - onEditEmail={handleEditClick} - onDeleteEmail={handleDeleteEmail} - onToggleWeekly={handleToggleWeekly} - onToggleMonthly={handleToggleMonthly} - /> - - {addEmail && ( - setAddEmail(false)} - onSubmit={handleAddEmail} - /> - )} - {editEmail && selectedEmail && ( - { - setEditEmail(false); - setSelectedEmail(null); - }} - onSubmit={handleEditEmail} - /> - )} - - ); -} +export {}; +// TODO: Refactor this component +// import React, { useState, useEffect } from "react"; +// import { Flex, Text } from "@chakra-ui/react"; +// import { useQuery, useMutation } from "@apollo/client"; +// import ReportsTable from "./components/ReportsTable"; +// import AddEmailModal from "./components/AddEmailModal"; +// import EditEmailModal from "./components/EditEmailModal"; +// import { GET_REPORT_RECIPIENTS } from "../../../gql/queries"; +// import { +// CREATE_REPORT_RECIPIENT, +// UPDATE_REPORT_RECIPIENT, +// DELETE_REPORT_RECIPIENT, +// } from "../../../gql/mutations"; +// +// type ReportRecipient = { +// report_recipient_id: number; +// email: string; +// weekly: boolean; +// monthly: boolean; +// last_report_sent: string | null; +// }; +// +// type Report = { +// id: number; +// email: string; +// weekly: boolean; +// monthly: boolean; +// lastReportSent: string; +// }; +// +// export default function AdminReportsPage() { +// const [addEmail, setAddEmail] = useState(false); +// const [editEmail, setEditEmail] = useState(false); +// const [selectedEmail, setSelectedEmail] = useState(null); +// const [reports, setReports] = useState([]); +// +// const { loading, error, data, refetch } = useQuery(GET_REPORT_RECIPIENTS); +// const [createReportRecipient] = useMutation(CREATE_REPORT_RECIPIENT); +// const [updateReportRecipient] = useMutation(UPDATE_REPORT_RECIPIENT); +// const [deleteReportRecipient] = useMutation(DELETE_REPORT_RECIPIENT); +// +// // Transform backend data to frontend format +// useEffect(() => { +// if (data?.getReportRecipients) { +// const transformed: Report[] = data.getReportRecipients.map( +// (recipient: ReportRecipient) => ({ +// id: recipient.report_recipient_id, +// email: recipient.email, +// weekly: recipient.weekly, +// monthly: recipient.monthly, +// lastReportSent: recipient.last_report_sent || "Never", +// }) +// ); +// setReports(transformed); +// } +// }, [data]); +// +// const handleAddEmail = async (emailData: any) => { +// try { +// await createReportRecipient({ +// variables: { +// email: emailData.email, +// weekly: emailData.weekly, +// monthly: emailData.monthly, +// }, +// }); +// refetch(); +// setAddEmail(false); +// } catch (err) { +// console.error("Error creating report recipient:", err); +// } +// }; +// +// const handleEditEmail = async (emailData: any) => { +// try { +// await updateReportRecipient({ +// variables: { +// report_recipient_id: selectedEmail.id, +// email: emailData.email, +// weekly: emailData.weekly, +// monthly: emailData.monthly, +// }, +// }); +// refetch(); +// setEditEmail(false); +// setSelectedEmail(null); +// } catch (err) { +// console.error("Error updating report recipient:", err); +// } +// }; +// +// const handleDeleteEmail = async (id: number) => { +// try { +// await deleteReportRecipient({ +// variables: { +// report_recipient_id: id, +// }, +// }); +// refetch(); +// } catch (err) { +// console.error("Error deleting report recipient:", err); +// } +// }; +// +// const handleToggleWeekly = async (id: number, weekly: boolean) => { +// try { +// await updateReportRecipient({ +// variables: { +// report_recipient_id: id, +// weekly, +// }, +// }); +// refetch(); +// } catch (err) { +// console.error("Error toggling weekly:", err); +// } +// }; +// +// const handleToggleMonthly = async (id: number, monthly: boolean) => { +// try { +// await updateReportRecipient({ +// variables: { +// report_recipient_id: id, +// monthly, +// }, +// }); +// refetch(); +// } catch (err) { +// console.error("Error toggling monthly:", err); +// } +// }; +// +// const handleEditClick = (email: any) => { +// setSelectedEmail(email); +// setEditEmail(true); +// }; +// +// if (loading) { +// return ( +// +// Loading... +// +// ); +// } +// +// if (error) { +// return ( +// +// Error loading reports: {error.message} +// +// ); +// } +// +// return ( +// +// +// +// +// Reports +// +// +// Reports will be automatically generated and emailed. Edit and select +// frequency of emails in the list below. +// +// +// +// setAddEmail(true)} +// onEditEmail={handleEditClick} +// onDeleteEmail={handleDeleteEmail} +// onToggleWeekly={handleToggleWeekly} +// onToggleMonthly={handleToggleMonthly} +// /> +// +// {addEmail && ( +// setAddEmail(false)} +// onSubmit={handleAddEmail} +// /> +// )} +// {editEmail && selectedEmail && ( +// { +// setEditEmail(false); +// setSelectedEmail(null); +// }} +// onSubmit={handleEditEmail} +// /> +// )} +// +// ); +// } diff --git a/frontend/src/admin/pages/reports/components/AddEmailModal.tsx b/frontend/src/admin/pages/reports/components/AddEmailModal.tsx index 552ed772..6c636cad 100644 --- a/frontend/src/admin/pages/reports/components/AddEmailModal.tsx +++ b/frontend/src/admin/pages/reports/components/AddEmailModal.tsx @@ -1,100 +1,102 @@ -import React, { useState } from "react"; -import { Switch, FormControl, FormLabel, Input, Text } from "@chakra-ui/react"; -import ModalContainer from "../../../common/form/ModalContainer"; - -type AddEmailModalProps = { - onClose: () => void; - onSubmit: (emailData: any) => void; -}; - -export default function AddEmailModal({ - onClose, - onSubmit, -}: AddEmailModalProps) { - const [email, setEmail] = useState(""); - const [weekly, setWeekly] = useState(false); - const [monthly, setMonthly] = useState(false); - - const handleSubmit = () => { - if (!email.trim()) { - return; // Basic validation - } - - onSubmit({ - email: email.trim(), - weekly, - monthly, - lastReportSent: "Never", - }); - }; - - return ( - - - - Email Address - - setEmail(e.target.value)} - width="100%" - height="32px" - paddingX="12px" - paddingY="8px" - border="1px" - borderColor="#C5C8D8" - borderRadius="8px" - fontFamily="Nunito" - fontWeight="400" - fontSize="12px" - color="#000000" - _focus={{ - borderColor: "#C5C8D8", - boxShadow: "none", - }} - /> - - - - - Report Frequency - - - - Weekly Reports - - setWeekly(e.target.checked)} - colorScheme="blue" - /> - - - - Monthly Reports - - setMonthly(e.target.checked)} - colorScheme="blue" - /> - - - - ); -} +export {}; +// TODO: Refactor this component +// import React, { useState } from "react"; +// import { Switch, FormControl, FormLabel, Input, Text } from "@chakra-ui/react"; +// import ModalContainer from "../../../common/form/ModalContainer"; +// +// type AddEmailModalProps = { +// onClose: () => void; +// onSubmit: (emailData: any) => void; +// }; +// +// export default function AddEmailModal({ +// onClose, +// onSubmit, +// }: AddEmailModalProps) { +// const [email, setEmail] = useState(""); +// const [weekly, setWeekly] = useState(false); +// const [monthly, setMonthly] = useState(false); +// +// const handleSubmit = () => { +// if (!email.trim()) { +// return; // Basic validation +// } +// +// onSubmit({ +// email: email.trim(), +// weekly, +// monthly, +// lastReportSent: "Never", +// }); +// }; +// +// return ( +// +// +// +// Email Address +// +// setEmail(e.target.value)} +// width="100%" +// height="32px" +// paddingX="12px" +// paddingY="8px" +// border="1px" +// borderColor="#C5C8D8" +// borderRadius="8px" +// fontFamily="Nunito" +// fontWeight="400" +// fontSize="12px" +// color="#000000" +// _focus={{ +// borderColor: "#C5C8D8", +// boxShadow: "none", +// }} +// /> +// +// +// +// +// Report Frequency +// +// +// +// Weekly Reports +// +// setWeekly(e.target.checked)} +// colorScheme="blue" +// /> +// +// +// +// Monthly Reports +// +// setMonthly(e.target.checked)} +// colorScheme="blue" +// /> +// +// +// +// ); +// } diff --git a/frontend/src/admin/pages/reports/components/EditEmailModal.tsx b/frontend/src/admin/pages/reports/components/EditEmailModal.tsx index 3e2e95ed..365b6d46 100644 --- a/frontend/src/admin/pages/reports/components/EditEmailModal.tsx +++ b/frontend/src/admin/pages/reports/components/EditEmailModal.tsx @@ -1,115 +1,117 @@ -import React, { useState, useEffect } from "react"; -import { Switch, FormControl, FormLabel, Input, Text } from "@chakra-ui/react"; -import ModalContainer from "../../../common/form/ModalContainer"; - -type Report = { - id: number; - email: string; - weekly: boolean; - monthly: boolean; - lastReportSent: string; -}; - -type EditEmailModalProps = { - email: Report; - onClose: () => void; - onSubmit: (emailData: any) => void; -}; - -export default function EditEmailModal({ - email, - onClose, - onSubmit, -}: EditEmailModalProps) { - const [emailAddress, setEmailAddress] = useState(email.email); - const [weekly, setWeekly] = useState(email.weekly); - const [monthly, setMonthly] = useState(email.monthly); - - useEffect(() => { - setEmailAddress(email.email); - setWeekly(email.weekly); - setMonthly(email.monthly); - }, [email]); - - const handleSubmit = () => { - if (!emailAddress.trim()) { - return; // Basic validation - } - - onSubmit({ - email: emailAddress.trim(), - weekly, - monthly, - }); - }; - - return ( - - - - Email Address - - setEmailAddress(e.target.value)} - width="100%" - height="32px" - paddingX="12px" - paddingY="8px" - border="1px" - borderColor="#C5C8D8" - borderRadius="8px" - fontFamily="Nunito" - fontWeight="400" - fontSize="12px" - color="#000000" - _focus={{ - borderColor: "#C5C8D8", - boxShadow: "none", - }} - /> - - - - - Report Frequency - - - - Weekly Reports - - setWeekly(e.target.checked)} - colorScheme="blue" - /> - - - - Monthly Reports - - setMonthly(e.target.checked)} - colorScheme="blue" - /> - - - - ); -} +export {}; +// TODO: Refactor this component +// import React, { useState, useEffect } from "react"; +// import { Switch, FormControl, FormLabel, Input, Text } from "@chakra-ui/react"; +// import ModalContainer from "../../../common/form/ModalContainer"; +// +// type Report = { +// id: number; +// email: string; +// weekly: boolean; +// monthly: boolean; +// lastReportSent: string; +// }; +// +// type EditEmailModalProps = { +// email: Report; +// onClose: () => void; +// onSubmit: (emailData: any) => void; +// }; +// +// export default function EditEmailModal({ +// email, +// onClose, +// onSubmit, +// }: EditEmailModalProps) { +// const [emailAddress, setEmailAddress] = useState(email.email); +// const [weekly, setWeekly] = useState(email.weekly); +// const [monthly, setMonthly] = useState(email.monthly); +// +// useEffect(() => { +// setEmailAddress(email.email); +// setWeekly(email.weekly); +// setMonthly(email.monthly); +// }, [email]); +// +// const handleSubmit = () => { +// if (!emailAddress.trim()) { +// return; // Basic validation +// } +// +// onSubmit({ +// email: emailAddress.trim(), +// weekly, +// monthly, +// }); +// }; +// +// return ( +// +// +// +// Email Address +// +// setEmailAddress(e.target.value)} +// width="100%" +// height="32px" +// paddingX="12px" +// paddingY="8px" +// border="1px" +// borderColor="#C5C8D8" +// borderRadius="8px" +// fontFamily="Nunito" +// fontWeight="400" +// fontSize="12px" +// color="#000000" +// _focus={{ +// borderColor: "#C5C8D8", +// boxShadow: "none", +// }} +// /> +// +// +// +// +// Report Frequency +// +// +// +// Weekly Reports +// +// setWeekly(e.target.checked)} +// colorScheme="blue" +// /> +// +// +// +// Monthly Reports +// +// setMonthly(e.target.checked)} +// colorScheme="blue" +// /> +// +// +// +// ); +// } diff --git a/frontend/src/admin/pages/reports/components/ReportsTable.tsx b/frontend/src/admin/pages/reports/components/ReportsTable.tsx index 6dc6db96..470b7443 100644 --- a/frontend/src/admin/pages/reports/components/ReportsTable.tsx +++ b/frontend/src/admin/pages/reports/components/ReportsTable.tsx @@ -1,223 +1,225 @@ -import React from "react"; -import { - TableContainer, - Table, - Thead, - Tbody, - Tr, - Th, - Td, - Text, - Flex, - Switch, - Button, -} from "@chakra-ui/react"; -import EditIcon from "@mui/icons-material/Edit"; -import DeleteOutlineIcon from "@mui/icons-material/DeleteOutline"; -import AddIcon from "@mui/icons-material/Add"; - -type Report = { - id: number; - email: string; - weekly: boolean; - monthly: boolean; - lastReportSent: string; -}; - -type ReportsTableProps = { - reports: Report[]; - onAddEmail: () => void; - onEditEmail: (email: Report) => void; - onDeleteEmail: (id: number) => void; - onToggleWeekly: (id: number, weekly: boolean) => void; - onToggleMonthly: (id: number, monthly: boolean) => void; -}; - -export default function ReportsTable({ - reports, - onAddEmail, - onEditEmail, - onDeleteEmail, - onToggleWeekly, - onToggleMonthly, -}: ReportsTableProps) { - const columns = [ - { header: "Email", width: "30%" }, - { header: "Weekly", width: "15%" }, - { header: "Monthly", width: "15%" }, - { header: "Last Report Sent", width: "20%" }, - { header: "Actions", width: "20%" }, - ]; - - const rows: JSX.Element[][] = reports.map((report: Report) => { - const cells: JSX.Element[] = [ - - {report.email} - , - - onToggleWeekly(report.id, e.target.checked)} - colorScheme="blue" - /> - , - - onToggleMonthly(report.id, e.target.checked)} - colorScheme="blue" - /> - , - - {report.lastReportSent} - , - - onEditEmail(report)} - padding="4px" - borderRadius="4px" - _hover={{ backgroundColor: "gray.100" }} - > - - - onDeleteEmail(report.id)}> - - - , - ]; - - return cells; - }); - - // Add empty row for new entry - const emptyRow: JSX.Element[] = [ - - - - , - - - - , - - - - , - - - - , - - - - , - ]; - - const allRows = [...rows, emptyRow]; - - return ( - <> - - - - - {columns.map((col) => ( - - ))} - - - - {allRows.map((row, index) => ( - - {row.map((cell, cellIndex) => ( - - ))} - - ))} - -
- - - {col.header} - - -
- {cell} -
-
- - - - - - ); -} +export {}; +// TODO: Refactor this component +// import React from "react"; +// import { +// TableContainer, +// Table, +// Thead, +// Tbody, +// Tr, +// Th, +// Td, +// Text, +// Flex, +// Switch, +// Button, +// } from "@chakra-ui/react"; +// import EditIcon from "@mui/icons-material/Edit"; +// import DeleteOutlineIcon from "@mui/icons-material/DeleteOutline"; +// import AddIcon from "@mui/icons-material/Add"; +// +// type Report = { +// id: number; +// email: string; +// weekly: boolean; +// monthly: boolean; +// lastReportSent: string; +// }; +// +// type ReportsTableProps = { +// reports: Report[]; +// onAddEmail: () => void; +// onEditEmail: (email: Report) => void; +// onDeleteEmail: (id: number) => void; +// onToggleWeekly: (id: number, weekly: boolean) => void; +// onToggleMonthly: (id: number, monthly: boolean) => void; +// }; +// +// export default function ReportsTable({ +// reports, +// onAddEmail, +// onEditEmail, +// onDeleteEmail, +// onToggleWeekly, +// onToggleMonthly, +// }: ReportsTableProps) { +// const columns = [ +// { header: "Email", width: "30%" }, +// { header: "Weekly", width: "15%" }, +// { header: "Monthly", width: "15%" }, +// { header: "Last Report Sent", width: "20%" }, +// { header: "Actions", width: "20%" }, +// ]; +// +// const rows: JSX.Element[][] = reports.map((report: Report) => { +// const cells: JSX.Element[] = [ +// +// {report.email} +// , +// +// onToggleWeekly(report.id, e.target.checked)} +// colorScheme="blue" +// /> +// , +// +// onToggleMonthly(report.id, e.target.checked)} +// colorScheme="blue" +// /> +// , +// +// {report.lastReportSent} +// , +// +// onEditEmail(report)} +// padding="4px" +// borderRadius="4px" +// _hover={{ backgroundColor: "gray.100" }} +// > +// +// +// onDeleteEmail(report.id)}> +// +// +// , +// ]; +// +// return cells; +// }); +// +// // Add empty row for new entry +// const emptyRow: JSX.Element[] = [ +// +// - +// , +// +// - +// , +// +// - +// , +// +// - +// , +// +// - +// , +// ]; +// +// const allRows = [...rows, emptyRow]; +// +// return ( +// <> +// +// +// +// +// {columns.map((col) => ( +// +// ))} +// +// +// +// {allRows.map((row, index) => ( +// +// {row.map((cell, cellIndex) => ( +// +// ))} +// +// ))} +// +//
+// +// +// {col.header} +// +// +//
+// {cell} +//
+//
+// +// +// +// +// +// ); +// } diff --git a/frontend/src/admin/pages/schedule/Main.tsx b/frontend/src/admin/pages/schedule/Main.tsx index f85ebefb..735ae32e 100644 --- a/frontend/src/admin/pages/schedule/Main.tsx +++ b/frontend/src/admin/pages/schedule/Main.tsx @@ -1,232 +1,234 @@ -import React, { useEffect, useState } from "react"; -import { Flex, Button, Text, Spinner, Box, HStack } from "@chakra-ui/react"; -import EditIcon from "@mui/icons-material/Edit"; -import moment from "moment"; -import { ListIcon, CalendarIcon } from "./components/CustomIcons"; -import RoomNavigation from "./components/RoomNavigation"; -import ScheduleCalendar from "./components/ScheduleCalendar"; -import ScheduleListView from "./components/ScheduleListView"; -import MarillacBalanceModal from "./components/MarillacBalanceModal"; -import TaskDetailsModal from "./components/TaskDetailsModal"; -import { useScheduleData } from "./components/useScheduleData"; -import { getCurrentWeekRange } from "../../../utils/scheduleUtils"; -import { CalendarEvent, ScheduleView } from "./components/ScheduleTypes"; -import "./components/ScheduleCalendar.css"; -import OrangeButton from "../../common/buttons/OrangeButton"; -import SimpleButton from "../../common/buttons/SimpleButton"; -import AssignTaskModal from "./components/AssignTaskModal"; - -export default function AdminSchedulePage() { - const [editMarillacBucks, setEditMarillacBucks] = useState(false); - const [assignTask, setAssignTask] = useState(false); - const [selectedTask, setSelectedTask] = useState(null); - const [currentView, setCurrentView] = useState(() => { - const view = localStorage.getItem("scheduleView"); - if (!view) return ScheduleView.CALENDAR; - return view as ScheduleView; - }); - const [currentDate, setCurrentDate] = useState(new Date()); - const [selectedRoom, setSelectedRoom] = useState(() => { - const room = localStorage.getItem("scheduleSelectedRoom"); - if (!room) return 1; - return parseInt(room, 10); - }); - - useEffect(() => { - localStorage.setItem("scheduleSelectedRoom", selectedRoom.toString()); - }, [selectedRoom]); - - useEffect(() => { - localStorage.setItem("scheduleView", currentView); - }, [currentView]); - - const { - loading, - error, - participantId, - marillacBucks, - specificTasks, - anydayTasks, - anytimeTasks, - } = useScheduleData(selectedRoom); - - return ( - - - - - {loading ? ( - - - - ) : error ? ( - - {error.message} - - ) : !participantId ? ( - - - This room is empty - - { - window.location.href = "/admin/participants"; - }} - is_active={false} - /> - - ) : ( - - {/* Top Header: Month, Week Navigation, M-Bucks */} - - - - {moment(currentDate).format("MMMM YYYY").toUpperCase()} - - - {}} - is_active - text_color="#0C727E" - /> - - - - - - {/* Second Header: View Toggle and Assign Task Button */} - - - - - - - setAssignTask(true)} - is_active={assignTask} - /> - - - {/* Content based on current view */} - - {currentView === ScheduleView.LIST ? ( - - ) : ( - - )} - - - )} - - - {editMarillacBucks && participantId && ( - setEditMarillacBucks(false)} - participantId={participantId} - currentBalance={marillacBucks} - roomNumber={selectedRoom} - /> - )} - - {assignTask && participantId && ( - setAssignTask(false)} - /> - )} - - {selectedTask && ( - setSelectedTask(null)} - /> - )} - - ); -} +export {}; +// TODO: Refactor this component +// import React, { useEffect, useState } from "react"; +// import { Flex, Button, Text, Spinner, Box, HStack } from "@chakra-ui/react"; +// import EditIcon from "@mui/icons-material/Edit"; +// import moment from "moment"; +// import { ListIcon, CalendarIcon } from "./components/CustomIcons"; +// import RoomNavigation from "./components/RoomNavigation"; +// import ScheduleCalendar from "./components/ScheduleCalendar"; +// import ScheduleListView from "./components/ScheduleListView"; +// import MarillacBalanceModal from "./components/MarillacBalanceModal"; +// import TaskDetailsModal from "./components/TaskDetailsModal"; +// import { useScheduleData } from "./components/useScheduleData"; +// import { getCurrentWeekRange } from "../../../utils/scheduleUtils"; +// import { CalendarEvent, ScheduleView } from "./components/ScheduleTypes"; +// import "./components/ScheduleCalendar.css"; +// import OrangeButton from "../../common/buttons/OrangeButton"; +// import SimpleButton from "../../common/buttons/SimpleButton"; +// import AssignTaskModal from "./components/AssignTaskModal"; +// +// export default function AdminSchedulePage() { +// const [editMarillacBucks, setEditMarillacBucks] = useState(false); +// const [assignTask, setAssignTask] = useState(false); +// const [selectedTask, setSelectedTask] = useState(null); +// const [currentView, setCurrentView] = useState(() => { +// const view = localStorage.getItem("scheduleView"); +// if (!view) return ScheduleView.CALENDAR; +// return view as ScheduleView; +// }); +// const [currentDate, setCurrentDate] = useState(new Date()); +// const [selectedRoom, setSelectedRoom] = useState(() => { +// const room = localStorage.getItem("scheduleSelectedRoom"); +// if (!room) return 1; +// return parseInt(room, 10); +// }); +// +// useEffect(() => { +// localStorage.setItem("scheduleSelectedRoom", selectedRoom.toString()); +// }, [selectedRoom]); +// +// useEffect(() => { +// localStorage.setItem("scheduleView", currentView); +// }, [currentView]); +// +// const { +// loading, +// error, +// participantId, +// marillacBucks, +// specificTasks, +// anydayTasks, +// anytimeTasks, +// } = useScheduleData(selectedRoom); +// +// return ( +// +// +// +// +// {loading ? ( +// +// +// +// ) : error ? ( +// +// {error.message} +// +// ) : !participantId ? ( +// +// +// This room is empty +// +// { +// window.location.href = "/admin/participants"; +// }} +// is_active={false} +// /> +// +// ) : ( +// +// {/* Top Header: Month, Week Navigation, M-Bucks */} +// +// +// +// {moment(currentDate).format("MMMM YYYY").toUpperCase()} +// +// +// {}} +// is_active +// text_color="#0C727E" +// /> +// +// +// +// +// +// {/* Second Header: View Toggle and Assign Task Button */} +// +// +// +// +// +// +// setAssignTask(true)} +// is_active={assignTask} +// /> +// +// +// {/* Content based on current view */} +// +// {currentView === ScheduleView.LIST ? ( +// +// ) : ( +// +// )} +// +// +// )} +// +// +// {editMarillacBucks && participantId && ( +// setEditMarillacBucks(false)} +// participantId={participantId} +// currentBalance={marillacBucks} +// roomNumber={selectedRoom} +// /> +// )} +// +// {assignTask && participantId && ( +// setAssignTask(false)} +// /> +// )} +// +// {selectedTask && ( +// setSelectedTask(null)} +// /> +// )} +// +// ); +// } diff --git a/frontend/src/admin/pages/schedule/components/AssignTaskModal.tsx b/frontend/src/admin/pages/schedule/components/AssignTaskModal.tsx index 890ec755..94d18e86 100644 --- a/frontend/src/admin/pages/schedule/components/AssignTaskModal.tsx +++ b/frontend/src/admin/pages/schedule/components/AssignTaskModal.tsx @@ -1,248 +1,250 @@ -import { Text, Flex, Spinner } from "@chakra-ui/react"; -import React, { useState, useEffect } from "react"; -import { useMutation, useQuery } from "@apollo/client"; -import { GET_TASKS_BY_TYPE } from "../../../../gql/queries"; -import ModalContainer from "../../../common/form/ModalContainer"; -import SelectionInput from "../../../common/form/SelectionInput"; -import CoreInput from "../../../common/form/CoreInput"; -import { - DayOfWeek, - RecurrenceFrequency, - TaskType, - TimeOption, -} from "../../../../types/task"; -import TaskInput from "../../../common/form/TaskInput"; -import { sendNotification } from "../../../../utils/sendNotification"; -import { CREATE_ASSIGNED_TASK } from "../../../../gql/mutations"; -import { formatDateFromString } from "../../../../utils/formatDateTime"; - -type AssignTaskModalProps = { - participantId: number; - isOpen: boolean; - onClose: () => void; -}; - -export default function AssignTaskModal({ - participantId, - isOpen, - onClose, -}: AssignTaskModalProps) { - const [selectedTaskId, setSelectedTaskId] = useState(null); - const [initialState, setInitialState] = useState(true); - const [goalName, setGoalName] = useState(""); - const [goalDescription, setGoalDescription] = useState(""); - const [taskName, setTaskName] = useState(""); - const [taskType, setTaskType] = useState(""); - const [recurrence, setRecurrence] = useState(""); - const [days, setDays] = useState([]); - const [time, setTime] = useState(""); - const [startTime, setStartTime] = useState(""); - const [endTime, setEndTime] = useState(""); - const [addition, setAddition] = useState(0); - const [deduction, setDeduction] = useState(0); - const [comments, setComments] = useState(""); - const [error, setError] = useState(""); - - const { - loading, - error: queryError, - data, - } = useQuery(GET_TASKS_BY_TYPE, { - variables: { type: [TaskType.OPTIONAL, TaskType.INDIVIDUAL_GOAL] }, - }); - - const [createAssignedTask] = useMutation(CREATE_ASSIGNED_TASK, { - onCompleted: () => { - sendNotification(`Task ${taskName} assigned.`); - }, - onError: (err: any) => { - setError(err.message); - }, - }); - - useEffect(() => { - if (!loading && !error && data && selectedTaskId !== null) { - const selectedTask = data.getTasksByType.find( - (t: any) => t.task_id === Number(selectedTaskId) - ); - if (selectedTask) { - setTaskName(selectedTask.task_name); - setTaskType(selectedTask.task_type as TaskType); - setComments(selectedTask.comment ?? ""); - setRecurrence( - selectedTask.recurrence_preference as RecurrenceFrequency - ); - setDays(selectedTask.repeat_days as DayOfWeek[]); - setTime(selectedTask.time_preference as TimeOption); - setStartTime(selectedTask.start_time ?? ""); - setEndTime(selectedTask.end_time ?? ""); - setAddition(selectedTask.marillac_bucks_addition); - setDeduction(selectedTask.marillac_bucks_deduction); - setInitialState(false); - } - } - }, [loading, error, data, selectedTaskId]); - - function handleSave() { - if ( - !taskName || - recurrence === "" || - recurrence === RecurrenceFrequency.PARTICIPANT_PREFERENCE || - days.length === 0 || - time === "" || - time === TimeOption.PARTICIPANT_PREFERENCE || - (time === TimeOption.SPECIFIC && (startTime === "" || endTime === "")) || - (taskType === TaskType.INDIVIDUAL_GOAL && - (goalName === "" || goalDescription === "")) - ) { - setError("Missing fields"); - } else if (addition < 0 || deduction < 0) { - setError("Invalid values for marillac bucks"); - } else if (time === TimeOption.SPECIFIC && startTime >= endTime) { - setError("Start time should be earlier than end time"); - } else if ( - recurrence === RecurrenceFrequency.ANY_SELECTED_DAYS && - days.length <= 1 - ) { - setError( - "If the task can only be completed on a specific day, please choose 'Every selected day'" - ); - } else if ( - recurrence === RecurrenceFrequency.ANY_SELECTED_DAYS && - time !== TimeOption.ANYTIME - ) { - setError("Anyday tasks must also be anytime tasks"); - } else { - if (recurrence === RecurrenceFrequency.ANY_SELECTED_DAYS) { - const startDate = formatDateFromString(days[0]); - const endDate = formatDateFromString(days[days.length - 1], "", true); - - createAssignedTask({ - variables: { - participantId, - taskName, - taskType, - startDate, - endDate, - marillacBucksAddition: Number(addition), - marillacBucksDeduction: Number(deduction), - goalName: goalName ?? undefined, - goalDescription: goalDescription ?? undefined, - comment: comments ?? undefined, - }, - }); - } else { - for (const day of days) { - let startDate = ""; - let endDate = ""; - if (time === TimeOption.ANYTIME) { - startDate = formatDateFromString(day as DayOfWeek); - endDate = formatDateFromString(day as DayOfWeek, "", true); - } else { - startDate = formatDateFromString(day as DayOfWeek, startTime); - endDate = formatDateFromString(day as DayOfWeek, endTime); - } - - createAssignedTask({ - variables: { - participantId, - taskName, - taskType, - startDate, - endDate, - marillacBucksAddition: Number(addition), - marillacBucksDeduction: Number(deduction), - goalName: goalName ?? undefined, - goalDescription: goalDescription ?? undefined, - comment: comments ?? undefined, - }, - }); - } - } - } - } - - return ( - - {loading ? ( - - ) : queryError ? ( - Unable to fetch data. - ) : initialState ? ( - setSelectedTaskId(e.target.value)} - mode="dropdown" - value_options={Object.fromEntries( - data?.getTasksByType?.map((task: any) => [ - task.task_name, - task.task_id, - ]) ?? [] - )} - /> - ) : ( - <> - - - Task Name - - {taskType === TaskType.INDIVIDUAL_GOAL ? ( - - Individual Goal - - ) : ( - - {taskName} - - )} - - - - - {taskType === TaskType.INDIVIDUAL_GOAL && ( - <> - setGoalName(e.target.value)} - type="text" - /> - setGoalDescription(e.target.value)} - type="text" - /> - - )} - - - - )} - - ); -} +export {}; +// TODO: Refactor this component +// import { Text, Flex, Spinner } from "@chakra-ui/react"; +// import React, { useState, useEffect } from "react"; +// import { useMutation, useQuery } from "@apollo/client"; +// import { GET_TASKS_BY_TYPE } from "../../../../gql/queries"; +// import ModalContainer from "../../../common/form/ModalContainer"; +// import SelectionInput from "../../../common/form/SelectionInput"; +// import CoreInput from "../../../common/form/CoreInput"; +// import { +// DayOfWeek, +// RecurrenceFrequency, +// TaskType, +// TimeOption, +// } from "../../../../types/task"; +// import TaskInput from "../../../common/form/TaskInput"; +// import { sendNotification } from "../../../../utils/sendNotification"; +// import { CREATE_ASSIGNED_TASK } from "../../../../gql/mutations"; +// import { formatDateFromString } from "../../../../utils/formatDateTime"; +// +// type AssignTaskModalProps = { +// participantId: number; +// isOpen: boolean; +// onClose: () => void; +// }; +// +// export default function AssignTaskModal({ +// participantId, +// isOpen, +// onClose, +// }: AssignTaskModalProps) { +// const [selectedTaskId, setSelectedTaskId] = useState(null); +// const [initialState, setInitialState] = useState(true); +// const [goalName, setGoalName] = useState(""); +// const [goalDescription, setGoalDescription] = useState(""); +// const [taskName, setTaskName] = useState(""); +// const [taskType, setTaskType] = useState(""); +// const [recurrence, setRecurrence] = useState(""); +// const [days, setDays] = useState([]); +// const [time, setTime] = useState(""); +// const [startTime, setStartTime] = useState(""); +// const [endTime, setEndTime] = useState(""); +// const [addition, setAddition] = useState(0); +// const [deduction, setDeduction] = useState(0); +// const [comments, setComments] = useState(""); +// const [error, setError] = useState(""); +// +// const { +// loading, +// error: queryError, +// data, +// } = useQuery(GET_TASKS_BY_TYPE, { +// variables: { type: [TaskType.OPTIONAL, TaskType.INDIVIDUAL_GOAL] }, +// }); +// +// const [createAssignedTask] = useMutation(CREATE_ASSIGNED_TASK, { +// onCompleted: () => { +// sendNotification(`Task ${taskName} assigned.`); +// }, +// onError: (err: any) => { +// setError(err.message); +// }, +// }); +// +// useEffect(() => { +// if (!loading && !error && data && selectedTaskId !== null) { +// const selectedTask = data.getTasksByType.find( +// (t: any) => t.task_id === Number(selectedTaskId) +// ); +// if (selectedTask) { +// setTaskName(selectedTask.task_name); +// setTaskType(selectedTask.task_type as TaskType); +// setComments(selectedTask.comment ?? ""); +// setRecurrence( +// selectedTask.recurrence_preference as RecurrenceFrequency +// ); +// setDays(selectedTask.repeat_days as DayOfWeek[]); +// setTime(selectedTask.time_preference as TimeOption); +// setStartTime(selectedTask.start_time ?? ""); +// setEndTime(selectedTask.end_time ?? ""); +// setAddition(selectedTask.marillac_bucks_addition); +// setDeduction(selectedTask.marillac_bucks_deduction); +// setInitialState(false); +// } +// } +// }, [loading, error, data, selectedTaskId]); +// +// function handleSave() { +// if ( +// !taskName || +// recurrence === "" || +// recurrence === RecurrenceFrequency.PARTICIPANT_PREFERENCE || +// days.length === 0 || +// time === "" || +// time === TimeOption.PARTICIPANT_PREFERENCE || +// (time === TimeOption.SPECIFIC && (startTime === "" || endTime === "")) || +// (taskType === TaskType.INDIVIDUAL_GOAL && +// (goalName === "" || goalDescription === "")) +// ) { +// setError("Missing fields"); +// } else if (addition < 0 || deduction < 0) { +// setError("Invalid values for marillac bucks"); +// } else if (time === TimeOption.SPECIFIC && startTime >= endTime) { +// setError("Start time should be earlier than end time"); +// } else if ( +// recurrence === RecurrenceFrequency.ANY_SELECTED_DAYS && +// days.length <= 1 +// ) { +// setError( +// "If the task can only be completed on a specific day, please choose 'Every selected day'" +// ); +// } else if ( +// recurrence === RecurrenceFrequency.ANY_SELECTED_DAYS && +// time !== TimeOption.ANYTIME +// ) { +// setError("Anyday tasks must also be anytime tasks"); +// } else { +// if (recurrence === RecurrenceFrequency.ANY_SELECTED_DAYS) { +// const startDate = formatDateFromString(days[0]); +// const endDate = formatDateFromString(days[days.length - 1], "", true); +// +// createAssignedTask({ +// variables: { +// participantId, +// taskName, +// taskType, +// startDate, +// endDate, +// marillacBucksAddition: Number(addition), +// marillacBucksDeduction: Number(deduction), +// goalName: goalName ?? undefined, +// goalDescription: goalDescription ?? undefined, +// comment: comments ?? undefined, +// }, +// }); +// } else { +// for (const day of days) { +// let startDate = ""; +// let endDate = ""; +// if (time === TimeOption.ANYTIME) { +// startDate = formatDateFromString(day as DayOfWeek); +// endDate = formatDateFromString(day as DayOfWeek, "", true); +// } else { +// startDate = formatDateFromString(day as DayOfWeek, startTime); +// endDate = formatDateFromString(day as DayOfWeek, endTime); +// } +// +// createAssignedTask({ +// variables: { +// participantId, +// taskName, +// taskType, +// startDate, +// endDate, +// marillacBucksAddition: Number(addition), +// marillacBucksDeduction: Number(deduction), +// goalName: goalName ?? undefined, +// goalDescription: goalDescription ?? undefined, +// comment: comments ?? undefined, +// }, +// }); +// } +// } +// } +// } +// +// return ( +// +// {loading ? ( +// +// ) : queryError ? ( +// Unable to fetch data. +// ) : initialState ? ( +// setSelectedTaskId(e.target.value)} +// mode="dropdown" +// value_options={Object.fromEntries( +// data?.getTasksByType?.map((task: any) => [ +// task.task_name, +// task.task_id, +// ]) ?? [] +// )} +// /> +// ) : ( +// <> +// +// +// Task Name +// +// {taskType === TaskType.INDIVIDUAL_GOAL ? ( +// +// Individual Goal +// +// ) : ( +// +// {taskName} +// +// )} +// +// +// +// +// {taskType === TaskType.INDIVIDUAL_GOAL && ( +// <> +// setGoalName(e.target.value)} +// type="text" +// /> +// setGoalDescription(e.target.value)} +// type="text" +// /> +// +// )} +// +// +// +// )} +// +// ); +// } diff --git a/frontend/src/admin/pages/schedule/components/CustomIcons.tsx b/frontend/src/admin/pages/schedule/components/CustomIcons.tsx index 07fa8456..3cec418e 100644 --- a/frontend/src/admin/pages/schedule/components/CustomIcons.tsx +++ b/frontend/src/admin/pages/schedule/components/CustomIcons.tsx @@ -1,103 +1,105 @@ -import React from "react"; - -interface IconProps { - size?: number; - color?: string; -} - -export const CalendarIcon: React.FC = ({ - size = 14, - color = "white", -}) => ( - - - -); - -export const ListIcon: React.FC = ({ - size = 10, - color = "#E67D4F", -}) => ( - - - - - - - - - -); - -export const CommentIcon: React.FC = ({ - size = 16, - color = "#255B9A", -}) => ( - - - -); +export {}; +// TODO: Refactor this component +// import React from "react"; +// +// interface IconProps { +// size?: number; +// color?: string; +// } +// +// export const CalendarIcon: React.FC = ({ +// size = 14, +// color = "white", +// }) => ( +// +// +// +// ); +// +// export const ListIcon: React.FC = ({ +// size = 10, +// color = "#E67D4F", +// }) => ( +// +// +// +// +// +// +// +// +// +// ); +// +// export const CommentIcon: React.FC = ({ +// size = 16, +// color = "#255B9A", +// }) => ( +// +// +// +// ); diff --git a/frontend/src/admin/pages/schedule/components/MarillacBalanceModal.tsx b/frontend/src/admin/pages/schedule/components/MarillacBalanceModal.tsx index 4bf16c8a..13c4b841 100644 --- a/frontend/src/admin/pages/schedule/components/MarillacBalanceModal.tsx +++ b/frontend/src/admin/pages/schedule/components/MarillacBalanceModal.tsx @@ -1,117 +1,119 @@ -import { Text, Flex } from "@chakra-ui/react"; -import React, { useState } from "react"; -import { useMutation } from "@apollo/client"; -import { UPDATE_MARILLAC_BUCKS } from "../../../../gql/mutations"; -import ModalContainer from "../../../common/form/ModalContainer"; -import SimpleButton from "../../../common/buttons/SimpleButton"; -import CoreInput from "../../../common/form/CoreInput"; -import SelectionInput from "../../../common/form/SelectionInput"; -import TextInput from "../../../common/form/TextInput"; - -type MarillacBalanceModalProps = { - currentBalance: number; - participantId: number; - roomNumber: number; - close: () => void; -}; - -export default function MarillacBalanceModal({ - currentBalance, - participantId, - roomNumber, - close, -}: MarillacBalanceModalProps) { - const [action, setAction] = useState("add"); - const [amount, setAmount] = useState(""); - const [reason, setReason] = useState(""); - const [error, setError] = useState(""); - - const [updateMarillacBucks] = useMutation(UPDATE_MARILLAC_BUCKS); - - async function handleSubmit() { - setError(""); - if (!reason || !amount || !action) { - setError("Missing fields"); - return; - } - const numericAmount = parseInt(amount, 10); - if (numericAmount <= 0) { - setError("Amount must be positive"); - } else if (numericAmount > currentBalance && action === "remove") { - setError("Cannot remove an amount greater than the current balance"); - } else { - let newBalance = currentBalance; - if (action === "add") { - newBalance += numericAmount; - } else if (action === "remove") { - newBalance -= numericAmount; - } - try { - await updateMarillacBucks({ - variables: { - participant_id: participantId, - marillac_bucks: newBalance, - reason, - }, - }); - } catch (err: any) { - setError(err.message); - } - - localStorage.setItem( - "notification", - "Updated Balance: $" + newBalance + " for Room " + roomNumber - ); - window.location.reload(); - } - } - - return ( - - - - Current Balance - - {}} - is_active - text_color="primary.700" - /> - - - - setAmount(e.target.value)} - type="number" - width="100%" - /> - setAction(act)} - mode="radio" - value_options={{ - Add: "add", - Remove: "remove", - }} - /> - - - setReason(e.target.value)} - width="300px" - /> - - ); -} +export {}; +// TODO: Refactor this component +// import { Text, Flex } from "@chakra-ui/react"; +// import React, { useState } from "react"; +// import { useMutation } from "@apollo/client"; +// import { UPDATE_MARILLAC_BUCKS } from "../../../../gql/mutations"; +// import ModalContainer from "../../../common/form/ModalContainer"; +// import SimpleButton from "../../../common/buttons/SimpleButton"; +// import CoreInput from "../../../common/form/CoreInput"; +// import SelectionInput from "../../../common/form/SelectionInput"; +// import TextInput from "../../../common/form/TextInput"; +// +// type MarillacBalanceModalProps = { +// currentBalance: number; +// participantId: number; +// roomNumber: number; +// close: () => void; +// }; +// +// export default function MarillacBalanceModal({ +// currentBalance, +// participantId, +// roomNumber, +// close, +// }: MarillacBalanceModalProps) { +// const [action, setAction] = useState("add"); +// const [amount, setAmount] = useState(""); +// const [reason, setReason] = useState(""); +// const [error, setError] = useState(""); +// +// const [updateMarillacBucks] = useMutation(UPDATE_MARILLAC_BUCKS); +// +// async function handleSubmit() { +// setError(""); +// if (!reason || !amount || !action) { +// setError("Missing fields"); +// return; +// } +// const numericAmount = parseInt(amount, 10); +// if (numericAmount <= 0) { +// setError("Amount must be positive"); +// } else if (numericAmount > currentBalance && action === "remove") { +// setError("Cannot remove an amount greater than the current balance"); +// } else { +// let newBalance = currentBalance; +// if (action === "add") { +// newBalance += numericAmount; +// } else if (action === "remove") { +// newBalance -= numericAmount; +// } +// try { +// await updateMarillacBucks({ +// variables: { +// participant_id: participantId, +// marillac_bucks: newBalance, +// reason, +// }, +// }); +// } catch (err: any) { +// setError(err.message); +// } +// +// localStorage.setItem( +// "notification", +// "Updated Balance: $" + newBalance + " for Room " + roomNumber +// ); +// window.location.reload(); +// } +// } +// +// return ( +// +// +// +// Current Balance +// +// {}} +// is_active +// text_color="primary.700" +// /> +// +// +// +// setAmount(e.target.value)} +// type="number" +// width="100%" +// /> +// setAction(act)} +// mode="radio" +// value_options={{ +// Add: "add", +// Remove: "remove", +// }} +// /> +// +// +// setReason(e.target.value)} +// width="300px" +// /> +// +// ); +// } diff --git a/frontend/src/admin/pages/schedule/components/RoomNavigation.tsx b/frontend/src/admin/pages/schedule/components/RoomNavigation.tsx index 6e306a74..12771f7d 100644 --- a/frontend/src/admin/pages/schedule/components/RoomNavigation.tsx +++ b/frontend/src/admin/pages/schedule/components/RoomNavigation.tsx @@ -1,43 +1,45 @@ -import React from "react"; -import { Flex, Text } from "@chakra-ui/react"; -import { ROOM_NUMBERS } from "../../../../constants/misc"; - -interface RoomNavigationProps { - selectedRoom: number; - onRoomChange: (room: number) => void; -} - -export default function RoomNavigation({ - selectedRoom, - onRoomChange, -}: RoomNavigationProps) { - return ( - - {ROOM_NUMBERS.map((num: number) => ( - onRoomChange(num)} - borderBottom={selectedRoom === num ? "3px solid" : "0"} - borderColor="primary.700" - px="12px" - pb="12px" - > - Room {num} - - ))} - - ); -} +export {}; +// TODO: Refactor this component +// import React from "react"; +// import { Flex, Text } from "@chakra-ui/react"; +// import { ROOM_NUMBERS } from "../../../../constants/misc"; +// +// interface RoomNavigationProps { +// selectedRoom: number; +// onRoomChange: (room: number) => void; +// } +// +// export default function RoomNavigation({ +// selectedRoom, +// onRoomChange, +// }: RoomNavigationProps) { +// return ( +// +// {ROOM_NUMBERS.map((num: number) => ( +// onRoomChange(num)} +// borderBottom={selectedRoom === num ? "3px solid" : "0"} +// borderColor="primary.700" +// px="12px" +// pb="12px" +// > +// Room {num} +// +// ))} +// +// ); +// } diff --git a/frontend/src/admin/pages/schedule/components/ScheduleCalendar.css b/frontend/src/admin/pages/schedule/components/ScheduleCalendar.css index 1d6da8a2..d7527c64 100644 --- a/frontend/src/admin/pages/schedule/components/ScheduleCalendar.css +++ b/frontend/src/admin/pages/schedule/components/ScheduleCalendar.css @@ -1,415 +1,416 @@ -/* Custom styles for React Big Calendar to match Chakra UI theme */ - -:root { - /* Color variables for consistency */ - --border-color: #c5c8d8; - - /* Status colors - these will be set from the theme */ - --status-complete: magenta; - --status-assigned: magenta; - --status-incomplete: magenta; - --status-excused: magenta; - - /* Status background colors - these will be set from the theme */ - --status-complete-bg: magenta; - --status-assigned-bg: magenta; - --status-incomplete-bg: magenta; - --status-excused-bg: magenta; - - /* Status text colors - these will be set from the theme */ - --status-complete-text: magenta; - --status-assigned-text: magenta; - --status-incomplete-text: magenta; - --status-excused-text: magenta; -} - -/* Base calendar styling */ -.rbc-calendar { - font-family: 'Nunito', sans-serif; - border-radius: 8px; - display: flex !important; - flex-direction: column !important; - flex: 1 !important; - height: 100% !important; - min-height: 0 !important; -} - -/* Hide default toolbar */ -.rbc-toolbar { - display: none !important; -} - -/* Time view container */ -.rbc-time-view { - border: none !important; - background-color: white; - display: flex !important; - flex-direction: column !important; - flex: 1 !important; - height: 100% !important; - min-height: 0 !important; -} - -/* Header styling */ -.rbc-header { - background-color: white; - font-weight: 600; - border: none !important; -} - -.rbc-day-bg { - border: none !important; -} - -.rbc-time-header { - background-color: white; - flex-shrink: 0; - margin: 0 !important; - padding: 0 !important; - position: sticky !important; - top: 0 !important; - z-index: 10 !important; - border: none !important; - /* box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1) !important; */ -} - -/* Target only the row that contains day headers, not all-day events */ -.rbc-time-header-cell { - min-height: 80px !important; -} - -/* Ensure individual day header cells have proper height */ -.rbc-time-header .rbc-row:first-child .rbc-header { - border-left: 1px solid var(--border-color); - border-bottom: 2px solid var(--border-color); - min-height: 80px !important; -} - -.rbc-time-header .rbc-row:first-child .rbc-header:first-child { - border-left: none; -} - -/* Fix React Big Calendar button wrapper centering */ -.rbc-button-link { - display: flex !important; - align-items: center !important; - justify-content: center !important; - width: 100% !important; - height: 100% !important; - text-align: center !important; - padding: 0 !important; - margin: 0 !important; -} - -/* Fix the inner CSS classes */ -.css-1f58b5e { - display: flex !important; - align-items: center !important; - justify-content: center !important; - width: 100% !important; - height: 100% !important; -} - -.css-sjh3h1 { - display: flex !important; - align-items: center !important; - justify-content: center !important; -} - -.rbc-time-header-gutter { - background-color: white; - border-bottom: 1px solid var(--border-color); - flex-shrink: 0; - border: none !important; -} - - -/* All-day event area */ -.rbc-allday-cell { - background-color: white; - border: none !important; - padding: 2px 0; - min-height: 24px; - display: flex; - flex-direction: column; - position: sticky !important; - top: 80px !important; - z-index: 9 !important; -} - -/* Remove borders from row segments (all-day events) */ -.rbc-row-segment { - border: none !important; -} - -.rbc-row-segment * { - border: none !important; -} - -.rbc-row-content { - padding: 2px 0; - min-height: 24px; -} - -.rbc-row-content:empty { - min-height: 0; - padding: 0; -} - -.rbc-row { - margin: 0 !important; -} - -/* Ensure all-day event rows can expand naturally */ -.rbc-time-header .rbc-row.rbc-row-segment { - min-height: 24px !important; -} - -/* Time content and columns */ -.rbc-time-content { - /* border-top: 1px solid var(--border-color); */ - border: none !important; - overflow-y: auto !important; - overflow-x: hidden !important; - flex: 1 !important; - height: 0 !important; - min-height: 0 !important; - max-height: none !important; -} - -/* Ensure the calendar container has proper height constraints */ -#react-big-calendar-container { - height: 100% !important; - min-height: 0 !important; - overflow: hidden !important; -} - -#react-big-calendar-container .rbc-calendar { - height: 100% !important; - min-height: 0 !important; -} - -.rbc-time-header-content { - border-bottom: 1px solid var(--border-color) !important; - border-left: none !important; - position: sticky !important; - top: 80px !important; - z-index: 9 !important; - background-color: white !important; -} - -.rbc-time-column { - height: auto !important; - overflow: visible !important; - border-left: 1px solid var(--border-color); -} - -.rbc-time-column:first-child { - border-left: none; -} - -/* Time gutter (left side with hours) */ -.rbc-time-view .rbc-time-gutter { - border: none !important; - position: sticky !important; - left: 0 !important; - z-index: 8 !important; -} - -.rbc-time-view .rbc-day-slot { - border: none !important; -} - -.rbc-time-view .rbc-time-gutter .rbc-time-slot { - font-size: 12px; - text-align: right; - padding-right: 8px; -} - -.rbc-events-container { - border-left: 1px solid var(--border-color); -} - -/* Remove all horizontal grid lines */ -.rbc-timeslot-group, -.rbc-time-slot, -.rbc-day-slot { - border-top: none !important; - border-bottom: none !important; -} - -/* Current time indicator - hidden */ -.rbc-current-time-indicator { - display: none !important; -} - -/* Today highlighting */ -.rbc-today { - background-color: transparent !important; -} - -/* Ensure today's date text is white when it has orange background */ -.rbc-header [style*="background"] [style*="color: white"] { - color: white !important; -} - -/* Alternative approach - target any orange background */ -.rbc-header [style*="background: rgb(237, 137, 54)"] *, -.rbc-header [style*="background: rgb(245, 130, 32)"] *, -.rbc-header [style*="background: orange"] * { - color: white !important; -} - -/* Base event styling */ -.rbc-event { - border-radius: 6px !important; - border: none !important; - box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); - font-size: 12px; - font-weight: 600; - padding: 2px 6px !important; -} - -.rbc-event-label { - font-size: 10px; - font-weight: 400; -} - -/* All-day events base styling */ -.rbc-event-allday, -.rbc-event.rbc-event-allday { - height: auto !important; - min-height: 20px !important; - margin: 1px 0 !important; - padding: 2px 6px !important; - border-radius: 4px !important; - font-size: 11px !important; - font-weight: 600 !important; - white-space: normal !important; - overflow: visible !important; - opacity: 1 !important; - visibility: visible !important; - position: relative !important; - z-index: 1 !important; -} - -/* Status-specific colors for all events (both timed and all-day) */ -.rbc-event.status-complete, -.rbc-event-allday.status-complete { - background-color: var(--status-complete-bg) !important; - color: var(--status-complete-text) !important; - border-left: 4px solid var(--status-complete) !important; -} - -.rbc-event.status-assigned, -.rbc-event-allday.status-assigned { - background-color: var(--status-assigned-bg) !important; - color: var(--status-assigned-text) !important; - border-left: 4px solid var(--status-assigned) !important; -} - -.rbc-event.status-incomplete, -.rbc-event-allday.status-incomplete { - background-color: var(--status-incomplete-bg) !important; - color: var(--status-incomplete-text) !important; - border-left: 4px solid var(--status-incomplete) !important; -} - -.rbc-event.status-excused, -.rbc-event-allday.status-excused { - background-color: var(--status-excused-bg) !important; - color: var(--status-excused-text) !important; - border-left: 4px solid var(--status-excused) !important; -} - -/* All-day specific status colors (for cases where [data-allday="true"] is used) */ -.rbc-event[data-allday="true"].status-complete { - background-color: var(--status-complete) !important; - color: white !important; -} - -.rbc-event[data-allday="true"].status-assigned { - background-color: var(--status-assigned) !important; - color: white !important; -} - -.rbc-event[data-allday="true"].status-incomplete { - background-color: var(--status-incomplete) !important; - color: white !important; -} - -.rbc-event[data-allday="true"].status-excused { - background-color: var(--status-excused) !important; - color: white !important; -} - -/* Event content text wrapping */ -.rbc-event-content, -.rbc-event .chakra-text { - white-space: normal !important; - overflow: visible !important; - text-overflow: none !important; - line-height: 1.2 !important; -} - -/* Row segments for proper all-day event display */ -.rbc-row-segment, -.rbc-row-content .rbc-row-segment { - height: auto !important; - min-height: 22px !important; - max-height: none !important; - display: flex; - align-items: flex-start; -} - -.rbc-row-content .rbc-row { - height: auto !important; - min-height: 22px !important; - margin: 1px 0 !important; -} - -/* Selected event highlighting */ -.rbc-event.rbc-selected { - box-shadow: 0 0 0 2px #e53e3e !important; - opacity: 0.9; -} - -/* Custom scrollbar styling */ -.rbc-time-content::-webkit-scrollbar { - width: 8px; -} - -.rbc-time-content::-webkit-scrollbar-track { - background-color: var(--bg-light); -} - -.rbc-time-content::-webkit-scrollbar-thumb { - background-color: #cbd5e0; - border-radius: 4px; -} - -.rbc-time-content::-webkit-scrollbar-thumb:hover { - background-color: #a0aec0; -} - -/* Responsive adjustments */ -@media (max-width: 768px) { - .rbc-toolbar { - flex-direction: column; - gap: 12px; - } - - .rbc-toolbar-label { - order: -1; - margin-bottom: 8px; - } - - .rbc-btn-group { - justify-content: center; - } - - .rbc-event { - font-size: 10px; - padding: 1px 4px !important; - } -} \ No newline at end of file +/* TODO: Refactor this component */ +/* /* Custom styles for React Big Calendar to match Chakra UI theme */ */ +/* */ +/* :root { */ +/* /* Color variables for consistency */ */ +/* --border-color: #c5c8d8; */ +/* */ +/* /* Status colors - these will be set from the theme */ */ +/* --status-complete: magenta; */ +/* --status-assigned: magenta; */ +/* --status-incomplete: magenta; */ +/* --status-excused: magenta; */ +/* */ +/* /* Status background colors - these will be set from the theme */ */ +/* --status-complete-bg: magenta; */ +/* --status-assigned-bg: magenta; */ +/* --status-incomplete-bg: magenta; */ +/* --status-excused-bg: magenta; */ +/* */ +/* /* Status text colors - these will be set from the theme */ */ +/* --status-complete-text: magenta; */ +/* --status-assigned-text: magenta; */ +/* --status-incomplete-text: magenta; */ +/* --status-excused-text: magenta; */ +/* } */ +/* */ +/* /* Base calendar styling */ */ +/* .rbc-calendar { */ +/* font-family: 'Nunito', sans-serif; */ +/* border-radius: 8px; */ +/* display: flex !important; */ +/* flex-direction: column !important; */ +/* flex: 1 !important; */ +/* height: 100% !important; */ +/* min-height: 0 !important; */ +/* } */ +/* */ +/* /* Hide default toolbar */ */ +/* .rbc-toolbar { */ +/* display: none !important; */ +/* } */ +/* */ +/* /* Time view container */ */ +/* .rbc-time-view { */ +/* border: none !important; */ +/* background-color: white; */ +/* display: flex !important; */ +/* flex-direction: column !important; */ +/* flex: 1 !important; */ +/* height: 100% !important; */ +/* min-height: 0 !important; */ +/* } */ +/* */ +/* /* Header styling */ */ +/* .rbc-header { */ +/* background-color: white; */ +/* font-weight: 600; */ +/* border: none !important; */ +/* } */ +/* */ +/* .rbc-day-bg { */ +/* border: none !important; */ +/* } */ +/* */ +/* .rbc-time-header { */ +/* background-color: white; */ +/* flex-shrink: 0; */ +/* margin: 0 !important; */ +/* padding: 0 !important; */ +/* position: sticky !important; */ +/* top: 0 !important; */ +/* z-index: 10 !important; */ +/* border: none !important; */ +/* /* box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1) !important; */ */ +/* } */ +/* */ +/* /* Target only the row that contains day headers, not all-day events */ */ +/* .rbc-time-header-cell { */ +/* min-height: 80px !important; */ +/* } */ +/* */ +/* /* Ensure individual day header cells have proper height */ */ +/* .rbc-time-header .rbc-row:first-child .rbc-header { */ +/* border-left: 1px solid var(--border-color); */ +/* border-bottom: 2px solid var(--border-color); */ +/* min-height: 80px !important; */ +/* } */ +/* */ +/* .rbc-time-header .rbc-row:first-child .rbc-header:first-child { */ +/* border-left: none; */ +/* } */ +/* */ +/* /* Fix React Big Calendar button wrapper centering */ */ +/* .rbc-button-link { */ +/* display: flex !important; */ +/* align-items: center !important; */ +/* justify-content: center !important; */ +/* width: 100% !important; */ +/* height: 100% !important; */ +/* text-align: center !important; */ +/* padding: 0 !important; */ +/* margin: 0 !important; */ +/* } */ +/* */ +/* /* Fix the inner CSS classes */ */ +/* .css-1f58b5e { */ +/* display: flex !important; */ +/* align-items: center !important; */ +/* justify-content: center !important; */ +/* width: 100% !important; */ +/* height: 100% !important; */ +/* } */ +/* */ +/* .css-sjh3h1 { */ +/* display: flex !important; */ +/* align-items: center !important; */ +/* justify-content: center !important; */ +/* } */ +/* */ +/* .rbc-time-header-gutter { */ +/* background-color: white; */ +/* border-bottom: 1px solid var(--border-color); */ +/* flex-shrink: 0; */ +/* border: none !important; */ +/* } */ +/* */ +/* */ +/* /* All-day event area */ */ +/* .rbc-allday-cell { */ +/* background-color: white; */ +/* border: none !important; */ +/* padding: 2px 0; */ +/* min-height: 24px; */ +/* display: flex; */ +/* flex-direction: column; */ +/* position: sticky !important; */ +/* top: 80px !important; */ +/* z-index: 9 !important; */ +/* } */ +/* */ +/* /* Remove borders from row segments (all-day events) */ */ +/* .rbc-row-segment { */ +/* border: none !important; */ +/* } */ +/* */ +/* .rbc-row-segment * { */ +/* border: none !important; */ +/* } */ +/* */ +/* .rbc-row-content { */ +/* padding: 2px 0; */ +/* min-height: 24px; */ +/* } */ +/* */ +/* .rbc-row-content:empty { */ +/* min-height: 0; */ +/* padding: 0; */ +/* } */ +/* */ +/* .rbc-row { */ +/* margin: 0 !important; */ +/* } */ +/* */ +/* /* Ensure all-day event rows can expand naturally */ */ +/* .rbc-time-header .rbc-row.rbc-row-segment { */ +/* min-height: 24px !important; */ +/* } */ +/* */ +/* /* Time content and columns */ */ +/* .rbc-time-content { */ +/* /* border-top: 1px solid var(--border-color); */ */ +/* border: none !important; */ +/* overflow-y: auto !important; */ +/* overflow-x: hidden !important; */ +/* flex: 1 !important; */ +/* height: 0 !important; */ +/* min-height: 0 !important; */ +/* max-height: none !important; */ +/* } */ +/* */ +/* /* Ensure the calendar container has proper height constraints */ */ +/* #react-big-calendar-container { */ +/* height: 100% !important; */ +/* min-height: 0 !important; */ +/* overflow: hidden !important; */ +/* } */ +/* */ +/* #react-big-calendar-container .rbc-calendar { */ +/* height: 100% !important; */ +/* min-height: 0 !important; */ +/* } */ +/* */ +/* .rbc-time-header-content { */ +/* border-bottom: 1px solid var(--border-color) !important; */ +/* border-left: none !important; */ +/* position: sticky !important; */ +/* top: 80px !important; */ +/* z-index: 9 !important; */ +/* background-color: white !important; */ +/* } */ +/* */ +/* .rbc-time-column { */ +/* height: auto !important; */ +/* overflow: visible !important; */ +/* border-left: 1px solid var(--border-color); */ +/* } */ +/* */ +/* .rbc-time-column:first-child { */ +/* border-left: none; */ +/* } */ +/* */ +/* /* Time gutter (left side with hours) */ */ +/* .rbc-time-view .rbc-time-gutter { */ +/* border: none !important; */ +/* position: sticky !important; */ +/* left: 0 !important; */ +/* z-index: 8 !important; */ +/* } */ +/* */ +/* .rbc-time-view .rbc-day-slot { */ +/* border: none !important; */ +/* } */ +/* */ +/* .rbc-time-view .rbc-time-gutter .rbc-time-slot { */ +/* font-size: 12px; */ +/* text-align: right; */ +/* padding-right: 8px; */ +/* } */ +/* */ +/* .rbc-events-container { */ +/* border-left: 1px solid var(--border-color); */ +/* } */ +/* */ +/* /* Remove all horizontal grid lines */ */ +/* .rbc-timeslot-group, */ +/* .rbc-time-slot, */ +/* .rbc-day-slot { */ +/* border-top: none !important; */ +/* border-bottom: none !important; */ +/* } */ +/* */ +/* /* Current time indicator - hidden */ */ +/* .rbc-current-time-indicator { */ +/* display: none !important; */ +/* } */ +/* */ +/* /* Today highlighting */ */ +/* .rbc-today { */ +/* background-color: transparent !important; */ +/* } */ +/* */ +/* /* Ensure today's date text is white when it has orange background */ */ +/* .rbc-header [style*="background"] [style*="color: white"] { */ +/* color: white !important; */ +/* } */ +/* */ +/* /* Alternative approach - target any orange background */ */ +/* .rbc-header [style*="background: rgb(237, 137, 54)"] *, */ +/* .rbc-header [style*="background: rgb(245, 130, 32)"] *, */ +/* .rbc-header [style*="background: orange"] * { */ +/* color: white !important; */ +/* } */ +/* */ +/* /* Base event styling */ */ +/* .rbc-event { */ +/* border-radius: 6px !important; */ +/* border: none !important; */ +/* box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); */ +/* font-size: 12px; */ +/* font-weight: 600; */ +/* padding: 2px 6px !important; */ +/* } */ +/* */ +/* .rbc-event-label { */ +/* font-size: 10px; */ +/* font-weight: 400; */ +/* } */ +/* */ +/* /* All-day events base styling */ */ +/* .rbc-event-allday, */ +/* .rbc-event.rbc-event-allday { */ +/* height: auto !important; */ +/* min-height: 20px !important; */ +/* margin: 1px 0 !important; */ +/* padding: 2px 6px !important; */ +/* border-radius: 4px !important; */ +/* font-size: 11px !important; */ +/* font-weight: 600 !important; */ +/* white-space: normal !important; */ +/* overflow: visible !important; */ +/* opacity: 1 !important; */ +/* visibility: visible !important; */ +/* position: relative !important; */ +/* z-index: 1 !important; */ +/* } */ +/* */ +/* /* Status-specific colors for all events (both timed and all-day) */ */ +/* .rbc-event.status-complete, */ +/* .rbc-event-allday.status-complete { */ +/* background-color: var(--status-complete-bg) !important; */ +/* color: var(--status-complete-text) !important; */ +/* border-left: 4px solid var(--status-complete) !important; */ +/* } */ +/* */ +/* .rbc-event.status-assigned, */ +/* .rbc-event-allday.status-assigned { */ +/* background-color: var(--status-assigned-bg) !important; */ +/* color: var(--status-assigned-text) !important; */ +/* border-left: 4px solid var(--status-assigned) !important; */ +/* } */ +/* */ +/* .rbc-event.status-incomplete, */ +/* .rbc-event-allday.status-incomplete { */ +/* background-color: var(--status-incomplete-bg) !important; */ +/* color: var(--status-incomplete-text) !important; */ +/* border-left: 4px solid var(--status-incomplete) !important; */ +/* } */ +/* */ +/* .rbc-event.status-excused, */ +/* .rbc-event-allday.status-excused { */ +/* background-color: var(--status-excused-bg) !important; */ +/* color: var(--status-excused-text) !important; */ +/* border-left: 4px solid var(--status-excused) !important; */ +/* } */ +/* */ +/* /* All-day specific status colors (for cases where [data-allday="true"] is used) */ */ +/* .rbc-event[data-allday="true"].status-complete { */ +/* background-color: var(--status-complete) !important; */ +/* color: white !important; */ +/* } */ +/* */ +/* .rbc-event[data-allday="true"].status-assigned { */ +/* background-color: var(--status-assigned) !important; */ +/* color: white !important; */ +/* } */ +/* */ +/* .rbc-event[data-allday="true"].status-incomplete { */ +/* background-color: var(--status-incomplete) !important; */ +/* color: white !important; */ +/* } */ +/* */ +/* .rbc-event[data-allday="true"].status-excused { */ +/* background-color: var(--status-excused) !important; */ +/* color: white !important; */ +/* } */ +/* */ +/* /* Event content text wrapping */ */ +/* .rbc-event-content, */ +/* .rbc-event .chakra-text { */ +/* white-space: normal !important; */ +/* overflow: visible !important; */ +/* text-overflow: none !important; */ +/* line-height: 1.2 !important; */ +/* } */ +/* */ +/* /* Row segments for proper all-day event display */ */ +/* .rbc-row-segment, */ +/* .rbc-row-content .rbc-row-segment { */ +/* height: auto !important; */ +/* min-height: 22px !important; */ +/* max-height: none !important; */ +/* display: flex; */ +/* align-items: flex-start; */ +/* } */ +/* */ +/* .rbc-row-content .rbc-row { */ +/* height: auto !important; */ +/* min-height: 22px !important; */ +/* margin: 1px 0 !important; */ +/* } */ +/* */ +/* /* Selected event highlighting */ */ +/* .rbc-event.rbc-selected { */ +/* box-shadow: 0 0 0 2px #e53e3e !important; */ +/* opacity: 0.9; */ +/* } */ +/* */ +/* /* Custom scrollbar styling */ */ +/* .rbc-time-content::-webkit-scrollbar { */ +/* width: 8px; */ +/* } */ +/* */ +/* .rbc-time-content::-webkit-scrollbar-track { */ +/* background-color: var(--bg-light); */ +/* } */ +/* */ +/* .rbc-time-content::-webkit-scrollbar-thumb { */ +/* background-color: #cbd5e0; */ +/* border-radius: 4px; */ +/* } */ +/* */ +/* .rbc-time-content::-webkit-scrollbar-thumb:hover { */ +/* background-color: #a0aec0; */ +/* } */ +/* */ +/* /* Responsive adjustments */ */ +/* @media (max-width: 768px) { */ +/* .rbc-toolbar { */ +/* flex-direction: column; */ +/* gap: 12px; */ +/* } */ +/* */ +/* .rbc-toolbar-label { */ +/* order: -1; */ +/* margin-bottom: 8px; */ +/* } */ +/* */ +/* .rbc-btn-group { */ +/* justify-content: center; */ +/* } */ +/* */ +/* .rbc-event { */ +/* font-size: 10px; */ +/* padding: 1px 4px !important; */ +/* } */ +/* } */ \ No newline at end of file diff --git a/frontend/src/admin/pages/schedule/components/ScheduleCalendar.tsx b/frontend/src/admin/pages/schedule/components/ScheduleCalendar.tsx index 938ba781..982759e3 100644 --- a/frontend/src/admin/pages/schedule/components/ScheduleCalendar.tsx +++ b/frontend/src/admin/pages/schedule/components/ScheduleCalendar.tsx @@ -1,233 +1,235 @@ -import React from "react"; -import { Box, Text, Flex } from "@chakra-ui/react"; -import { Calendar, momentLocalizer, Views } from "react-big-calendar"; -import moment from "moment"; -import "react-big-calendar/lib/css/react-big-calendar.css"; -import { CalendarEvent, TaskStatus } from "./ScheduleTypes"; -import { - getTaskStatusColor, - getTaskStatusBgColor, - getDayNameMapping, - formatEventTime, -} from "../../../../utils/scheduleUtils"; -import { CommentIcon } from "./CustomIcons"; -import colors from "../../../../theme/colors"; -import { TaskType } from "../../../../types/task"; - -const localizer = momentLocalizer(moment); - -interface ScheduleCalendarProps { - events: CalendarEvent[]; - allDayEvents: CalendarEvent[]; - currentDate: Date; - onNavigate: (date: Date) => void; - onSelectEvent?: (event: CalendarEvent) => void; - scrollToTime?: Date; -} - -// Custom header component for calendar -const CustomHeader: React.FC<{ date: Date }> = ({ date }) => { - const dayNames = getDayNameMapping(); - - const dayAbbr = moment(date).format("ddd").toUpperCase(); - const dayName = dayNames[dayAbbr] || dayAbbr; - const dayNumber = moment(date).format("D"); - const isToday = moment(date).isSame(moment(), "day"); - - return ( - - - {dayName} - - - - {dayNumber} - - - - ); -}; - -// Custom event component for calendar -const EventComponent: React.FC<{ - event: CalendarEvent; - onSelectEvent?: (event: CalendarEvent) => void; -}> = ({ event, onSelectEvent }) => { - // For all-day events, use simpler styling - if (event.allDay) { - return ( - - {event.task_type === TaskType.INDIVIDUAL_GOAL - ? event.goalName - : event.title} - - ); - } - - // For timed events, show name on top and time underneath - return ( - onSelectEvent?.(event)} - direction="column" - gap="2px" - > - - {event.title} - - - {formatEventTime(event.start, event.end)} - - {event.comment && ( -
- -
- )} -
- ); -}; - -export default function ScheduleCalendar({ - events, - allDayEvents, - currentDate, - onNavigate, - onSelectEvent, - scrollToTime = moment().hour(7).minute(0).toDate(), -}: ScheduleCalendarProps) { - // Combine regular events with all-day events - const allEvents = [...events, ...allDayEvents]; - - // Set CSS custom properties from theme colors - React.useEffect(() => { - const root = document.documentElement; - root.style.setProperty( - "--status-complete", - getTaskStatusColor(TaskStatus.COMPLETE) - ); - root.style.setProperty( - "--status-assigned", - getTaskStatusColor(TaskStatus.ASSIGNED) - ); - root.style.setProperty( - "--status-incomplete", - getTaskStatusColor(TaskStatus.INCOMPLETE) - ); - root.style.setProperty( - "--status-excused", - getTaskStatusColor(TaskStatus.EXCUSED) - ); - - root.style.setProperty("--status-complete-bg", colors.actionsLight.green); - root.style.setProperty("--status-assigned-bg", colors.actionsLight.blue); - root.style.setProperty("--status-incomplete-bg", colors.actionsLight.red); - root.style.setProperty("--status-excused-bg", colors.actionsLight.yellow); - - root.style.setProperty("--status-complete-text", colors.actionsDark.green); - root.style.setProperty("--status-assigned-text", colors.actionsDark.blue); - root.style.setProperty("--status-incomplete-text", colors.actionsDark.red); - root.style.setProperty("--status-excused-text", colors.actionsDark.yellow); - }, []); - - return ( - - onSelectEvent?.(event)} - formats={{ - eventTimeRangeFormat: () => "", - }} - components={{ - event: (props: { event: CalendarEvent }) => ( - - ), - week: { - header: CustomHeader, - }, - }} - style={{ - flex: 1, - height: "100%", - }} - eventPropGetter={(event) => { - const statusClass = `status-${event.task_status.toLowerCase()}`; - - if (event.allDay) { - return { - className: statusClass, - style: { - backgroundColor: getTaskStatusColor(event.task_status), - color: "white", - border: "none", - }, - }; - } - - return { - className: statusClass, - style: { - backgroundColor: getTaskStatusBgColor(event.task_status), - borderColor: getTaskStatusColor(event.task_status), - color: getTaskStatusColor(event.task_status), - }, - }; - }} - /> - - ); -} +export {}; +// TODO: Refactor this component +// import React from "react"; +// import { Box, Text, Flex } from "@chakra-ui/react"; +// import { Calendar, momentLocalizer, Views } from "react-big-calendar"; +// import moment from "moment"; +// import "react-big-calendar/lib/css/react-big-calendar.css"; +// import { CalendarEvent, TaskStatus } from "./ScheduleTypes"; +// import { +// getTaskStatusColor, +// getTaskStatusBgColor, +// getDayNameMapping, +// formatEventTime, +// } from "../../../../utils/scheduleUtils"; +// import { CommentIcon } from "./CustomIcons"; +// import colors from "../../../../theme/colors"; +// import { TaskType } from "../../../../types/task"; +// +// const localizer = momentLocalizer(moment); +// +// interface ScheduleCalendarProps { +// events: CalendarEvent[]; +// allDayEvents: CalendarEvent[]; +// currentDate: Date; +// onNavigate: (date: Date) => void; +// onSelectEvent?: (event: CalendarEvent) => void; +// scrollToTime?: Date; +// } +// +// // Custom header component for calendar +// const CustomHeader: React.FC<{ date: Date }> = ({ date }) => { +// const dayNames = getDayNameMapping(); +// +// const dayAbbr = moment(date).format("ddd").toUpperCase(); +// const dayName = dayNames[dayAbbr] || dayAbbr; +// const dayNumber = moment(date).format("D"); +// const isToday = moment(date).isSame(moment(), "day"); +// +// return ( +// +// +// {dayName} +// +// +// +// {dayNumber} +// +// +// +// ); +// }; +// +// // Custom event component for calendar +// const EventComponent: React.FC<{ +// event: CalendarEvent; +// onSelectEvent?: (event: CalendarEvent) => void; +// }> = ({ event, onSelectEvent }) => { +// // For all-day events, use simpler styling +// if (event.allDay) { +// return ( +// +// {event.task_type === TaskType.INDIVIDUAL_GOAL +// ? event.goalName +// : event.title} +// +// ); +// } +// +// // For timed events, show name on top and time underneath +// return ( +// onSelectEvent?.(event)} +// direction="column" +// gap="2px" +// > +// +// {event.title} +// +// +// {formatEventTime(event.start, event.end)} +// +// {event.comment && ( +//
+// +//
+// )} +//
+// ); +// }; +// +// export default function ScheduleCalendar({ +// events, +// allDayEvents, +// currentDate, +// onNavigate, +// onSelectEvent, +// scrollToTime = moment().hour(7).minute(0).toDate(), +// }: ScheduleCalendarProps) { +// // Combine regular events with all-day events +// const allEvents = [...events, ...allDayEvents]; +// +// // Set CSS custom properties from theme colors +// React.useEffect(() => { +// const root = document.documentElement; +// root.style.setProperty( +// "--status-complete", +// getTaskStatusColor(TaskStatus.COMPLETE) +// ); +// root.style.setProperty( +// "--status-assigned", +// getTaskStatusColor(TaskStatus.ASSIGNED) +// ); +// root.style.setProperty( +// "--status-incomplete", +// getTaskStatusColor(TaskStatus.INCOMPLETE) +// ); +// root.style.setProperty( +// "--status-excused", +// getTaskStatusColor(TaskStatus.EXCUSED) +// ); +// +// root.style.setProperty("--status-complete-bg", colors.actionsLight.green); +// root.style.setProperty("--status-assigned-bg", colors.actionsLight.blue); +// root.style.setProperty("--status-incomplete-bg", colors.actionsLight.red); +// root.style.setProperty("--status-excused-bg", colors.actionsLight.yellow); +// +// root.style.setProperty("--status-complete-text", colors.actionsDark.green); +// root.style.setProperty("--status-assigned-text", colors.actionsDark.blue); +// root.style.setProperty("--status-incomplete-text", colors.actionsDark.red); +// root.style.setProperty("--status-excused-text", colors.actionsDark.yellow); +// }, []); +// +// return ( +// +// onSelectEvent?.(event)} +// formats={{ +// eventTimeRangeFormat: () => "", +// }} +// components={{ +// event: (props: { event: CalendarEvent }) => ( +// +// ), +// week: { +// header: CustomHeader, +// }, +// }} +// style={{ +// flex: 1, +// height: "100%", +// }} +// eventPropGetter={(event) => { +// const statusClass = `status-${event.task_status.toLowerCase()}`; +// +// if (event.allDay) { +// return { +// className: statusClass, +// style: { +// backgroundColor: getTaskStatusColor(event.task_status), +// color: "white", +// border: "none", +// }, +// }; +// } +// +// return { +// className: statusClass, +// style: { +// backgroundColor: getTaskStatusBgColor(event.task_status), +// borderColor: getTaskStatusColor(event.task_status), +// color: getTaskStatusColor(event.task_status), +// }, +// }; +// }} +// /> +// +// ); +// } diff --git a/frontend/src/admin/pages/schedule/components/ScheduleListView.tsx b/frontend/src/admin/pages/schedule/components/ScheduleListView.tsx index 2f99b5b9..35f02e03 100644 --- a/frontend/src/admin/pages/schedule/components/ScheduleListView.tsx +++ b/frontend/src/admin/pages/schedule/components/ScheduleListView.tsx @@ -1,93 +1,95 @@ -import React, { useState } from "react"; -import { VStack, Box, Text, HStack, Button } from "@chakra-ui/react"; -import { CalendarEvent } from "./ScheduleTypes"; -import TaskTableTop from "./TaskTableTop"; -import TaskTableBottom from "./TaskTableBottom"; -import { DayOfWeek } from "../../../../types/task"; -import { isSameDay } from "../../../../utils/formatDateTime"; -import { weekdays } from "../../../../constants/misc"; -import { toTitleCase } from "../../../../utils/string_helpers"; - -interface ScheduleListViewProps { - specificTasks: CalendarEvent[]; - anytimeTasks: CalendarEvent[]; - anydayTasks: CalendarEvent[]; - onTaskSelect: (event: CalendarEvent) => void; -} - -export default function ScheduleListView({ - specificTasks, - anytimeTasks, - anydayTasks, - onTaskSelect, -}: ScheduleListViewProps) { - const [selectedDay, setSelectedDay] = useState(DayOfWeek.MONDAY); - - const getTasksForDay = (dayName: DayOfWeek): CalendarEvent[] => { - const specficTasksForDay = specificTasks.filter((task) => { - return isSameDay(dayName, task.start); - }); - const anytimeTasksForDay = anytimeTasks.filter((task) => { - return isSameDay(dayName, task.start); - }); - return [...specficTasksForDay, ...anytimeTasksForDay]; - }; - - return ( - - - - Daily - - - {weekdays.map((day, index) => ( - - ))} - - - - - - - - - - Any Day - - - - - - ); -} +export {}; +// TODO: Refactor this component +// import React, { useState } from "react"; +// import { VStack, Box, Text, HStack, Button } from "@chakra-ui/react"; +// import { CalendarEvent } from "./ScheduleTypes"; +// import TaskTableTop from "./TaskTableTop"; +// import TaskTableBottom from "./TaskTableBottom"; +// import { DayOfWeek } from "../../../../types/task"; +// import { isSameDay } from "../../../../utils/formatDateTime"; +// import { weekdays } from "../../../../constants/misc"; +// import { toTitleCase } from "../../../../utils/string_helpers"; +// +// interface ScheduleListViewProps { +// specificTasks: CalendarEvent[]; +// anytimeTasks: CalendarEvent[]; +// anydayTasks: CalendarEvent[]; +// onTaskSelect: (event: CalendarEvent) => void; +// } +// +// export default function ScheduleListView({ +// specificTasks, +// anytimeTasks, +// anydayTasks, +// onTaskSelect, +// }: ScheduleListViewProps) { +// const [selectedDay, setSelectedDay] = useState(DayOfWeek.MONDAY); +// +// const getTasksForDay = (dayName: DayOfWeek): CalendarEvent[] => { +// const specficTasksForDay = specificTasks.filter((task) => { +// return isSameDay(dayName, task.start); +// }); +// const anytimeTasksForDay = anytimeTasks.filter((task) => { +// return isSameDay(dayName, task.start); +// }); +// return [...specficTasksForDay, ...anytimeTasksForDay]; +// }; +// +// return ( +// +// +// +// Daily +// +// +// {weekdays.map((day, index) => ( +// +// ))} +// +// +// +// +// +// +// +// +// +// Any Day +// +// +// +// +// +// ); +// } diff --git a/frontend/src/admin/pages/schedule/components/ScheduleTypes.tsx b/frontend/src/admin/pages/schedule/components/ScheduleTypes.tsx index bd215f1a..1bc66702 100644 --- a/frontend/src/admin/pages/schedule/components/ScheduleTypes.tsx +++ b/frontend/src/admin/pages/schedule/components/ScheduleTypes.tsx @@ -1,80 +1,82 @@ -export interface AssignedTask { - assigned_task_id: number; - task_name: string; - task_status: TaskStatus; - task_type: TaskType; - goal_name?: string; - goal_description?: string; - start_date: string; - end_date: string; - marillac_bucks_addition: number; - marillac_bucks_deduction: number; - comment?: string; -} - -export interface ParticipantData { - participant_id: number; - marillac_bucks: number; - room_number: number; - assigned_tasks: CalendarEvent[]; -} - -export enum TaskStatus { - ASSIGNED = "ASSIGNED", - INCOMPLETE = "INCOMPLETE", - COMPLETE = "COMPLETE", - EXCUSED = "EXCUSED", -} - -export const TaskStatuses = [ - TaskStatus.ASSIGNED, - TaskStatus.COMPLETE, - TaskStatus.INCOMPLETE, - TaskStatus.EXCUSED, -]; - -export enum TaskType { - REQUIRED = "REQUIRED", - OPTIONAL = "OPTIONAL", - INDIVIDUAL_GOAL = "INDIVIDUAL_GOAL", -} - -export interface CalendarEvent { - id: number; - title: string; - start: Date; - end: Date; - allDay?: boolean; - task_status: TaskStatus; - task_type: TaskType; - goalName: string; - goalDescription: string; - marillacBucksAddition: number; - marillac_bucks_deduction: number; - comment?: string; -} - -export enum ScheduleView { - LIST = "LIST", - CALENDAR = "CALENDAR", -} - -export interface TaskSection { - title: string; - tasks: AssignedTask[]; -} - -// Legacy interfaces for backward compatibility -export interface Task { - title: string; - description: string; - creditValue: number; -} - -export interface CustomTask extends Task { - room: number; -} - -export interface ChoreTask extends Task { - location: string; -} +export {}; +// TODO: Refactor this component +// export interface AssignedTask { +// assigned_task_id: number; +// task_name: string; +// task_status: TaskStatus; +// task_type: TaskType; +// goal_name?: string; +// goal_description?: string; +// start_date: string; +// end_date: string; +// marillac_bucks_addition: number; +// marillac_bucks_deduction: number; +// comment?: string; +// } +// +// export interface ParticipantData { +// participant_id: number; +// marillac_bucks: number; +// room_number: number; +// assigned_tasks: CalendarEvent[]; +// } +// +// export enum TaskStatus { +// ASSIGNED = "ASSIGNED", +// INCOMPLETE = "INCOMPLETE", +// COMPLETE = "COMPLETE", +// EXCUSED = "EXCUSED", +// } +// +// export const TaskStatuses = [ +// TaskStatus.ASSIGNED, +// TaskStatus.COMPLETE, +// TaskStatus.INCOMPLETE, +// TaskStatus.EXCUSED, +// ]; +// +// export enum TaskType { +// REQUIRED = "REQUIRED", +// OPTIONAL = "OPTIONAL", +// INDIVIDUAL_GOAL = "INDIVIDUAL_GOAL", +// } +// +// export interface CalendarEvent { +// id: number; +// title: string; +// start: Date; +// end: Date; +// allDay?: boolean; +// task_status: TaskStatus; +// task_type: TaskType; +// goalName: string; +// goalDescription: string; +// marillacBucksAddition: number; +// marillac_bucks_deduction: number; +// comment?: string; +// } +// +// export enum ScheduleView { +// LIST = "LIST", +// CALENDAR = "CALENDAR", +// } +// +// export interface TaskSection { +// title: string; +// tasks: AssignedTask[]; +// } +// +// // Legacy interfaces for backward compatibility +// export interface Task { +// title: string; +// description: string; +// creditValue: number; +// } +// +// export interface CustomTask extends Task { +// room: number; +// } +// +// export interface ChoreTask extends Task { +// location: string; +// } diff --git a/frontend/src/admin/pages/schedule/components/TaskDetailsModal.tsx b/frontend/src/admin/pages/schedule/components/TaskDetailsModal.tsx index 5072b61c..698ee4ba 100644 --- a/frontend/src/admin/pages/schedule/components/TaskDetailsModal.tsx +++ b/frontend/src/admin/pages/schedule/components/TaskDetailsModal.tsx @@ -1,437 +1,439 @@ -import { - Modal, - ModalOverlay, - ModalContent, - Text, - Flex, -} from "@chakra-ui/react"; -import React, { useState } from "react"; -import { useMutation } from "@apollo/client"; -import { CalendarEvent, TaskStatus } from "./ScheduleTypes"; -import OrangeButton from "../../../common/buttons/OrangeButton"; -import SimpleButton from "../../../common/buttons/SimpleButton"; -import TextInput from "../../../common/form/TextInput"; -import { toTitleCase } from "../../../../utils/string_helpers"; -import { sendNotification } from "../../../../utils/sendNotification"; -import { - DELETE_ASSIGNED_TASK, - UPDATE_ASSIGNED_TASK, -} from "../../../../gql/mutations"; -import { DayOfWeek, TaskType, TimeOption } from "../../../../types/task"; -import { - convertToDaysListGivenRange, - displayDate, - formatDateFromString, - formatTimeString, - isAnytime, -} from "../../../../utils/formatDateTime"; -import { weekdays } from "../../../../constants/misc"; -import GreenButton from "../../../common/buttons/GreenButton"; -import SelectionInput from "../../../common/form/SelectionInput"; -import CoreInput from "../../../common/form/CoreInput"; - -interface TaskDetailsModalProps { - task: CalendarEvent; - onClose: () => void; -} - -export default function TaskDetailsModal({ - task, - onClose, -}: TaskDetailsModalProps) { - const [selectedStatus, setSelectedStatus] = useState( - task.task_status - ); - const [days, setDays] = useState( - convertToDaysListGivenRange(task.start, task.end) - ); - const [time, setTime] = useState( - isAnytime(task.start, task.end) ? TimeOption.ANYTIME : TimeOption.SPECIFIC - ); - const [startTime, setStartTime] = useState(formatTimeString(task.start)); - const [endTime, setEndTime] = useState(formatTimeString(task.end)); - const [addition, setAddition] = useState(task.marillacBucksAddition); - const [deduction, setDeduction] = useState(task.marillac_bucks_deduction); - const [comments, setComments] = useState(task.comment ?? ""); - - const [editDetails, setEditDetails] = useState(false); - const [error, setError] = useState(""); - - const [deleteAssignedTask] = useMutation(DELETE_ASSIGNED_TASK, { - onCompleted: () => { - sendNotification(`Task ${task.title} deleted.`); - }, - onError: (err: any) => { - setError(err.message); - }, - }); - - const [updateAssignedTask] = useMutation(UPDATE_ASSIGNED_TASK, { - onCompleted: () => { - sendNotification(`Task ${task.title} edited.`); - }, - onError: (err: any) => { - setError(err.message); - }, - }); - - const handleDelete = () => { - deleteAssignedTask({ - variables: { - assigned_task_id: task.id, - }, - }); - }; - - const handleSave = () => { - setError(""); - if ( - days.length === 0 || - (time === TimeOption.SPECIFIC && (startTime === "" || endTime === "")) - ) { - setError("Missing fields"); - } else if (addition < 0 || deduction < 0) { - setError("Invalid values for marillac bucks"); - } else if (time === TimeOption.SPECIFIC && startTime >= endTime) { - setError("Start time should be earlier than end time"); - } else if (days.length > 1 && time !== TimeOption.ANYTIME) { - setError("Tasks spanning over multiple days must be anytime tasks"); - } else { - let startDate = ""; - let endDate = ""; - if (days.length > 1) { - startDate = formatDateFromString(days[0]); - endDate = formatDateFromString(days[days.length - 1], "", true); - } else { - startDate = formatDateFromString(days[0] as DayOfWeek, startTime); - endDate = formatDateFromString(days[0] as DayOfWeek, endTime); - } - - updateAssignedTask({ - variables: { - id: task.id, - taskStatus: selectedStatus, - startDate, - endDate, - marillacBucksAddition: Number(addition), - marillacBucksDeduction: Number(deduction), - comment: comments, - }, - }); - } - }; - - function handleSelectDay(day: DayOfWeek) { - if (days.length === 0) { - setDays([day]); - } else if (!days.includes(day)) { - const a = weekdays.indexOf(day as string); - const b = weekdays.indexOf(days[0] as string); - const c = weekdays.indexOf(days[days.length - 1] as string); - if (a < b) { - setDays([...weekdays.slice(a, b), ...days] as DayOfWeek[]); - } else { - setDays([...days, ...weekdays.slice(c + 1, a + 1)] as DayOfWeek[]); - } - } else if (days.length === 1) { - setDays([]); - } else { - setDays([day]); - } - } - - return ( - - - - - {!editDetails ? ( - - {task.task_type === TaskType.INDIVIDUAL_GOAL - ? task.goalName - : task.title} - - ) : ( - Edit Assigned Task - )} - - {!editDetails && ( - { - setSelectedStatus(task.task_status); - setComments(task.comment ?? ""); - setEditDetails(true); - }} - is_active={false} - text_color="#0C727E" - /> - )} - - - - - {editDetails ? ( - - - - Task Name - - - {task.task_type === TaskType.INDIVIDUAL_GOAL - ? task.goalName - : task.title} - - - - - - - Select Days - - - {weekdays.map((day: string, index) => ( - handleSelectDay(day as DayOfWeek)} - is_active={days.includes(day as DayOfWeek)} - /> - ))} - - - { - if (opt === TimeOption.ANYTIME) { - setStartTime("00:00"); - setEndTime("23:59"); - } - setTime(opt); - }} - mode="radio" - value_options={{ - Anytime: TimeOption.ANYTIME, - "Select Time": TimeOption.SPECIFIC, - }} - /> - - {time === TimeOption.SPECIFIC && ( - - setStartTime(e.target.value)} - type="time" - width="90%" - /> - setEndTime(e.target.value)} - type="time" - width="90%" - /> - - )} - - - setAddition(e.target.value as number)} - type="number" - width="50%" - /> - setDeduction(e.target.value as number)} - type="number" - width="50%" - /> - - - setComments(e.target.value)} - /> - - ) : ( - - - - Task Type - - - {toTitleCase(task.task_type)} - - - - - Date - - - {(() => { - const startDate = displayDate(task.start); - const endDate = displayDate(task.end); - if (startDate === endDate) { - return startDate; - } - return `${startDate} to ${endDate}`; - })()} - - - - - Marillac Bucks - - - ${task.marillacBucksAddition} - - - - - Marillac Bucks Deduction - - - ${task.marillac_bucks_deduction} - - - - - - Status - - - setSelectedStatus(TaskStatus.ASSIGNED)} - is_active={selectedStatus === TaskStatus.ASSIGNED} - text_color="#000000" - icon={ - - - - } - /> - setSelectedStatus(TaskStatus.COMPLETE)} - is_active={selectedStatus === TaskStatus.COMPLETE} - text_color="#000000" - icon={ - - - - } - /> - setSelectedStatus(TaskStatus.EXCUSED)} - is_active={selectedStatus === TaskStatus.EXCUSED} - text_color="#000000" - icon={ - - - - } - /> - setSelectedStatus(TaskStatus.INCOMPLETE)} - is_active={selectedStatus === TaskStatus.INCOMPLETE} - text_color="#000000" - icon={ - - - - } - /> - - - - setComments(e.target.value)} - /> - - )} - - {error && ( - - {error} - - )} - - - - - - - - ); -} +export {}; +// TODO: Refactor this component +// import { +// Modal, +// ModalOverlay, +// ModalContent, +// Text, +// Flex, +// } from "@chakra-ui/react"; +// import React, { useState } from "react"; +// import { useMutation } from "@apollo/client"; +// import { CalendarEvent, TaskStatus } from "./ScheduleTypes"; +// import OrangeButton from "../../../common/buttons/OrangeButton"; +// import SimpleButton from "../../../common/buttons/SimpleButton"; +// import TextInput from "../../../common/form/TextInput"; +// import { toTitleCase } from "../../../../utils/string_helpers"; +// import { sendNotification } from "../../../../utils/sendNotification"; +// import { +// DELETE_ASSIGNED_TASK, +// UPDATE_ASSIGNED_TASK, +// } from "../../../../gql/mutations"; +// import { DayOfWeek, TaskType, TimeOption } from "../../../../types/task"; +// import { +// convertToDaysListGivenRange, +// displayDate, +// formatDateFromString, +// formatTimeString, +// isAnytime, +// } from "../../../../utils/formatDateTime"; +// import { weekdays } from "../../../../constants/misc"; +// import GreenButton from "../../../common/buttons/GreenButton"; +// import SelectionInput from "../../../common/form/SelectionInput"; +// import CoreInput from "../../../common/form/CoreInput"; +// +// interface TaskDetailsModalProps { +// task: CalendarEvent; +// onClose: () => void; +// } +// +// export default function TaskDetailsModal({ +// task, +// onClose, +// }: TaskDetailsModalProps) { +// const [selectedStatus, setSelectedStatus] = useState( +// task.task_status +// ); +// const [days, setDays] = useState( +// convertToDaysListGivenRange(task.start, task.end) +// ); +// const [time, setTime] = useState( +// isAnytime(task.start, task.end) ? TimeOption.ANYTIME : TimeOption.SPECIFIC +// ); +// const [startTime, setStartTime] = useState(formatTimeString(task.start)); +// const [endTime, setEndTime] = useState(formatTimeString(task.end)); +// const [addition, setAddition] = useState(task.marillacBucksAddition); +// const [deduction, setDeduction] = useState(task.marillac_bucks_deduction); +// const [comments, setComments] = useState(task.comment ?? ""); +// +// const [editDetails, setEditDetails] = useState(false); +// const [error, setError] = useState(""); +// +// const [deleteAssignedTask] = useMutation(DELETE_ASSIGNED_TASK, { +// onCompleted: () => { +// sendNotification(`Task ${task.title} deleted.`); +// }, +// onError: (err: any) => { +// setError(err.message); +// }, +// }); +// +// const [updateAssignedTask] = useMutation(UPDATE_ASSIGNED_TASK, { +// onCompleted: () => { +// sendNotification(`Task ${task.title} edited.`); +// }, +// onError: (err: any) => { +// setError(err.message); +// }, +// }); +// +// const handleDelete = () => { +// deleteAssignedTask({ +// variables: { +// assigned_task_id: task.id, +// }, +// }); +// }; +// +// const handleSave = () => { +// setError(""); +// if ( +// days.length === 0 || +// (time === TimeOption.SPECIFIC && (startTime === "" || endTime === "")) +// ) { +// setError("Missing fields"); +// } else if (addition < 0 || deduction < 0) { +// setError("Invalid values for marillac bucks"); +// } else if (time === TimeOption.SPECIFIC && startTime >= endTime) { +// setError("Start time should be earlier than end time"); +// } else if (days.length > 1 && time !== TimeOption.ANYTIME) { +// setError("Tasks spanning over multiple days must be anytime tasks"); +// } else { +// let startDate = ""; +// let endDate = ""; +// if (days.length > 1) { +// startDate = formatDateFromString(days[0]); +// endDate = formatDateFromString(days[days.length - 1], "", true); +// } else { +// startDate = formatDateFromString(days[0] as DayOfWeek, startTime); +// endDate = formatDateFromString(days[0] as DayOfWeek, endTime); +// } +// +// updateAssignedTask({ +// variables: { +// id: task.id, +// taskStatus: selectedStatus, +// startDate, +// endDate, +// marillacBucksAddition: Number(addition), +// marillacBucksDeduction: Number(deduction), +// comment: comments, +// }, +// }); +// } +// }; +// +// function handleSelectDay(day: DayOfWeek) { +// if (days.length === 0) { +// setDays([day]); +// } else if (!days.includes(day)) { +// const a = weekdays.indexOf(day as string); +// const b = weekdays.indexOf(days[0] as string); +// const c = weekdays.indexOf(days[days.length - 1] as string); +// if (a < b) { +// setDays([...weekdays.slice(a, b), ...days] as DayOfWeek[]); +// } else { +// setDays([...days, ...weekdays.slice(c + 1, a + 1)] as DayOfWeek[]); +// } +// } else if (days.length === 1) { +// setDays([]); +// } else { +// setDays([day]); +// } +// } +// +// return ( +// +// +// +// +// {!editDetails ? ( +// +// {task.task_type === TaskType.INDIVIDUAL_GOAL +// ? task.goalName +// : task.title} +// +// ) : ( +// Edit Assigned Task +// )} +// +// {!editDetails && ( +// { +// setSelectedStatus(task.task_status); +// setComments(task.comment ?? ""); +// setEditDetails(true); +// }} +// is_active={false} +// text_color="#0C727E" +// /> +// )} +// +// +// +// +// {editDetails ? ( +// +// +// +// Task Name +// +// +// {task.task_type === TaskType.INDIVIDUAL_GOAL +// ? task.goalName +// : task.title} +// +// +// +// +// +// +// Select Days +// +// +// {weekdays.map((day: string, index) => ( +// handleSelectDay(day as DayOfWeek)} +// is_active={days.includes(day as DayOfWeek)} +// /> +// ))} +// +// +// { +// if (opt === TimeOption.ANYTIME) { +// setStartTime("00:00"); +// setEndTime("23:59"); +// } +// setTime(opt); +// }} +// mode="radio" +// value_options={{ +// Anytime: TimeOption.ANYTIME, +// "Select Time": TimeOption.SPECIFIC, +// }} +// /> +// +// {time === TimeOption.SPECIFIC && ( +// +// setStartTime(e.target.value)} +// type="time" +// width="90%" +// /> +// setEndTime(e.target.value)} +// type="time" +// width="90%" +// /> +// +// )} +// +// +// setAddition(e.target.value as number)} +// type="number" +// width="50%" +// /> +// setDeduction(e.target.value as number)} +// type="number" +// width="50%" +// /> +// +// +// setComments(e.target.value)} +// /> +// +// ) : ( +// +// +// +// Task Type +// +// +// {toTitleCase(task.task_type)} +// +// +// +// +// Date +// +// +// {(() => { +// const startDate = displayDate(task.start); +// const endDate = displayDate(task.end); +// if (startDate === endDate) { +// return startDate; +// } +// return `${startDate} to ${endDate}`; +// })()} +// +// +// +// +// Marillac Bucks +// +// +// ${task.marillacBucksAddition} +// +// +// +// +// Marillac Bucks Deduction +// +// +// ${task.marillac_bucks_deduction} +// +// +// +// +// +// Status +// +// +// setSelectedStatus(TaskStatus.ASSIGNED)} +// is_active={selectedStatus === TaskStatus.ASSIGNED} +// text_color="#000000" +// icon={ +// +// +// +// } +// /> +// setSelectedStatus(TaskStatus.COMPLETE)} +// is_active={selectedStatus === TaskStatus.COMPLETE} +// text_color="#000000" +// icon={ +// +// +// +// } +// /> +// setSelectedStatus(TaskStatus.EXCUSED)} +// is_active={selectedStatus === TaskStatus.EXCUSED} +// text_color="#000000" +// icon={ +// +// +// +// } +// /> +// setSelectedStatus(TaskStatus.INCOMPLETE)} +// is_active={selectedStatus === TaskStatus.INCOMPLETE} +// text_color="#000000" +// icon={ +// +// +// +// } +// /> +// +// +// +// setComments(e.target.value)} +// /> +// +// )} +// +// {error && ( +// +// {error} +// +// )} +// +// +// +// +// +// +// +// ); +// } diff --git a/frontend/src/admin/pages/schedule/components/TaskTableBottom.tsx b/frontend/src/admin/pages/schedule/components/TaskTableBottom.tsx index f713c926..1d6a5069 100644 --- a/frontend/src/admin/pages/schedule/components/TaskTableBottom.tsx +++ b/frontend/src/admin/pages/schedule/components/TaskTableBottom.tsx @@ -1,129 +1,131 @@ -import React from "react"; -import { - Box, - Text, - Table, - Thead, - Tbody, - Tr, - Th, - Td, - TableContainer, - Flex, -} from "@chakra-ui/react"; -import CommentIcon from "@mui/icons-material/ModeCommentOutlined"; -import MoreHorizIcon from "@mui/icons-material/MoreHoriz"; -import { CalendarEvent } from "./ScheduleTypes"; -import { - getTaskStatusColor, - getTaskStatusBgColor, - getTaskStatusText, -} from "../../../../utils/scheduleUtils"; -import { TaskType } from "../../../../types/task"; - -interface TaskTableProps { - tasks: CalendarEvent[]; - onTaskSelect: (event: CalendarEvent) => void; -} - -export default function TaskTableBottom({ - tasks, - onTaskSelect, -}: TaskTableProps) { - return ( - - - - - - - - - - - - {tasks.map((event: any, index: number) => ( - - - - - - - ))} - -
- - Name - - - - Status - - - - Marillac Bucks - - -
- - {event.task_type === TaskType.INDIVIDUAL_GOAL - ? event.goalName - : event.title} - - {event.comment && ( - - - - )} - - - {getTaskStatusText(event.task_status)} - - - - ${event.marillacBucksAddition.toFixed(2)} - - - { - e.stopPropagation(); // Prevent row click - onTaskSelect(event); // Only open modal from here - }} - cursor="pointer" - > - - -
-
-
- ); -} +export {}; +// TODO: Refactor this component +// import React from "react"; +// import { +// Box, +// Text, +// Table, +// Thead, +// Tbody, +// Tr, +// Th, +// Td, +// TableContainer, +// Flex, +// } from "@chakra-ui/react"; +// import CommentIcon from "@mui/icons-material/ModeCommentOutlined"; +// import MoreHorizIcon from "@mui/icons-material/MoreHoriz"; +// import { CalendarEvent } from "./ScheduleTypes"; +// import { +// getTaskStatusColor, +// getTaskStatusBgColor, +// getTaskStatusText, +// } from "../../../../utils/scheduleUtils"; +// import { TaskType } from "../../../../types/task"; +// +// interface TaskTableProps { +// tasks: CalendarEvent[]; +// onTaskSelect: (event: CalendarEvent) => void; +// } +// +// export default function TaskTableBottom({ +// tasks, +// onTaskSelect, +// }: TaskTableProps) { +// return ( +// +// +// +// +// +// +// +// +// +// +// +// {tasks.map((event: any, index: number) => ( +// +// +// +// +// +// +// ))} +// +//
+// +// Name +// +// +// +// Status +// +// +// +// Marillac Bucks +// +// +//
+// +// {event.task_type === TaskType.INDIVIDUAL_GOAL +// ? event.goalName +// : event.title} +// +// {event.comment && ( +// +// +// +// )} +// +// +// {getTaskStatusText(event.task_status)} +// +// +// +// ${event.marillacBucksAddition.toFixed(2)} +// +// +// { +// e.stopPropagation(); // Prevent row click +// onTaskSelect(event); // Only open modal from here +// }} +// cursor="pointer" +// > +// +// +//
+//
+//
+// ); +// } diff --git a/frontend/src/admin/pages/schedule/components/TaskTableTop.tsx b/frontend/src/admin/pages/schedule/components/TaskTableTop.tsx index 0a7c4b0c..9f724cb7 100644 --- a/frontend/src/admin/pages/schedule/components/TaskTableTop.tsx +++ b/frontend/src/admin/pages/schedule/components/TaskTableTop.tsx @@ -1,138 +1,140 @@ -import React from "react"; -import { - Box, - Text, - Table, - Thead, - Tbody, - Tr, - Th, - Td, - TableContainer, - Flex, -} from "@chakra-ui/react"; -import CommentIcon from "@mui/icons-material/ModeCommentOutlined"; -import MoreHorizIcon from "@mui/icons-material/MoreHoriz"; -import { CalendarEvent } from "./ScheduleTypes"; -import { - getTaskStatusColor, - getTaskStatusBgColor, - getTaskStatusText, - formatEventTime, -} from "../../../../utils/scheduleUtils"; -import { TaskType } from "../../../../types/task"; - -interface TaskTableProps { - tasks: CalendarEvent[]; - onTaskSelect: (event: CalendarEvent) => void; -} - -export default function TaskTableTop({ tasks, onTaskSelect }: TaskTableProps) { - return ( - - - - - - - - - - - - - {tasks.map((event: any, index: number) => ( - - - - - - - - ))} - -
- - Name - - - - Status - - - - Time - - - - Marillac Bucks - - -
- - {event.task_type === TaskType.INDIVIDUAL_GOAL - ? event.goalName - : event.title} - - {event.comment && ( - - - - )} - - - {getTaskStatusText(event.task_status)} - - - - {event.allDay - ? "Anytime" - : formatEventTime(event.start, event.end)} - - - - ${event.marillacBucksAddition.toFixed(2)} - - - { - e.stopPropagation(); // Prevent row click - onTaskSelect(event); // Only open modal from here - }} - cursor="pointer" - > - - -
-
-
- ); -} +export {}; +// TODO: Refactor this component +// import React from "react"; +// import { +// Box, +// Text, +// Table, +// Thead, +// Tbody, +// Tr, +// Th, +// Td, +// TableContainer, +// Flex, +// } from "@chakra-ui/react"; +// import CommentIcon from "@mui/icons-material/ModeCommentOutlined"; +// import MoreHorizIcon from "@mui/icons-material/MoreHoriz"; +// import { CalendarEvent } from "./ScheduleTypes"; +// import { +// getTaskStatusColor, +// getTaskStatusBgColor, +// getTaskStatusText, +// formatEventTime, +// } from "../../../../utils/scheduleUtils"; +// import { TaskType } from "../../../../types/task"; +// +// interface TaskTableProps { +// tasks: CalendarEvent[]; +// onTaskSelect: (event: CalendarEvent) => void; +// } +// +// export default function TaskTableTop({ tasks, onTaskSelect }: TaskTableProps) { +// return ( +// +// +// +// +// +// +// +// +// +// +// +// +// {tasks.map((event: any, index: number) => ( +// +// +// +// +// +// +// +// ))} +// +//
+// +// Name +// +// +// +// Status +// +// +// +// Time +// +// +// +// Marillac Bucks +// +// +//
+// +// {event.task_type === TaskType.INDIVIDUAL_GOAL +// ? event.goalName +// : event.title} +// +// {event.comment && ( +// +// +// +// )} +// +// +// {getTaskStatusText(event.task_status)} +// +// +// +// {event.allDay +// ? "Anytime" +// : formatEventTime(event.start, event.end)} +// +// +// +// ${event.marillacBucksAddition.toFixed(2)} +// +// +// { +// e.stopPropagation(); // Prevent row click +// onTaskSelect(event); // Only open modal from here +// }} +// cursor="pointer" +// > +// +// +//
+//
+//
+// ); +// } diff --git a/frontend/src/admin/pages/schedule/components/useScheduleData.ts b/frontend/src/admin/pages/schedule/components/useScheduleData.ts index 98142e1c..e5fe3177 100644 --- a/frontend/src/admin/pages/schedule/components/useScheduleData.ts +++ b/frontend/src/admin/pages/schedule/components/useScheduleData.ts @@ -1,94 +1,96 @@ -import { useState, useEffect } from "react"; -import { useLazyQuery } from "@apollo/client"; -import { CalendarEvent, AssignedTask } from "./ScheduleTypes"; -import { GET_PARTICIPANT_BY_ROOM } from "../../../../gql/queries"; -import { - formatDateFromDateString, - getWeekBounds, -} from "../../../../utils/formatDateTime"; - -export const useScheduleData = (selectedRoom: number) => { - const [participantId, setParticipantId] = useState(null); - const [marillacBucks, setMarillacBucks] = useState(0); - const [specificTasks, setSpecificTasks] = useState([]); - const [anytimeTasks, setAnytimeTasks] = useState([]); - const [anydayTasks, setAnydayTasks] = useState([]); - - const [fetchData, { loading, error, data }] = useLazyQuery( - GET_PARTICIPANT_BY_ROOM - ); - - function groupTasks(tasks: AssignedTask[]) { - const { weekStart, weekEnd } = getWeekBounds(); - - const specific: CalendarEvent[] = []; - const anytime: CalendarEvent[] = []; - const anyday: CalendarEvent[] = []; - - for (const task of tasks) { - const start = formatDateFromDateString(task.start_date); - const end = formatDateFromDateString(task.end_date); - - if (task.start_date >= weekStart || task.start_date <= weekEnd) { - const isSameDay = start.toDateString() === end.toDateString(); - const isDayStart = start.getHours() === 0 && start.getMinutes() === 0; - const isDayEnd = end.getHours() === 23 && end.getMinutes() === 59; - - const event: CalendarEvent = { - id: task.assigned_task_id, - title: task.task_name, - start, - end, - allDay: !isSameDay || (isDayStart && isDayEnd), - task_status: task.task_status, - task_type: task.task_type, - goalName: task.goal_name ?? "", - goalDescription: task.goal_description ?? "", - marillacBucksAddition: task.marillac_bucks_addition, - marillac_bucks_deduction: task.marillac_bucks_deduction, - comment: task.comment, - }; - - if (!isSameDay) { - anyday.push(event); - } else if (isDayStart && isDayEnd) { - anytime.push(event); - } else { - specific.push(event); - } - } - } - - setSpecificTasks(specific); - setAnytimeTasks(anytime); - setAnydayTasks(anyday); - } - - useEffect(() => { - setParticipantId(null); - setMarillacBucks(0); - setSpecificTasks([]); - setAnytimeTasks([]); - setAnydayTasks([]); - fetchData({ variables: { room_number: selectedRoom } }); - }, [selectedRoom, fetchData]); - - useEffect(() => { - if (!loading && !error && data && data.getParticipantByRoom) { - const participant = data.getParticipantByRoom; - setParticipantId(participant.participant_id); - setMarillacBucks(participant.marillac_bucks); - groupTasks(participant.assigned_tasks); - } - }, [data, loading, error]); - - return { - loading, - error, - participantId, - marillacBucks, - specificTasks, - anytimeTasks, - anydayTasks, - }; -}; +export {}; +// TODO: Refactor this component +// import { useState, useEffect } from "react"; +// import { useLazyQuery } from "@apollo/client"; +// import { CalendarEvent, AssignedTask } from "./ScheduleTypes"; +// import { GET_PARTICIPANT_BY_ROOM } from "../../../../gql/queries"; +// import { +// formatDateFromDateString, +// getWeekBounds, +// } from "../../../../utils/formatDateTime"; +// +// export const useScheduleData = (selectedRoom: number) => { +// const [participantId, setParticipantId] = useState(null); +// const [marillacBucks, setMarillacBucks] = useState(0); +// const [specificTasks, setSpecificTasks] = useState([]); +// const [anytimeTasks, setAnytimeTasks] = useState([]); +// const [anydayTasks, setAnydayTasks] = useState([]); +// +// const [fetchData, { loading, error, data }] = useLazyQuery( +// GET_PARTICIPANT_BY_ROOM +// ); +// +// function groupTasks(tasks: AssignedTask[]) { +// const { weekStart, weekEnd } = getWeekBounds(); +// +// const specific: CalendarEvent[] = []; +// const anytime: CalendarEvent[] = []; +// const anyday: CalendarEvent[] = []; +// +// for (const task of tasks) { +// const start = formatDateFromDateString(task.start_date); +// const end = formatDateFromDateString(task.end_date); +// +// if (task.start_date >= weekStart || task.start_date <= weekEnd) { +// const isSameDay = start.toDateString() === end.toDateString(); +// const isDayStart = start.getHours() === 0 && start.getMinutes() === 0; +// const isDayEnd = end.getHours() === 23 && end.getMinutes() === 59; +// +// const event: CalendarEvent = { +// id: task.assigned_task_id, +// title: task.task_name, +// start, +// end, +// allDay: !isSameDay || (isDayStart && isDayEnd), +// task_status: task.task_status, +// task_type: task.task_type, +// goalName: task.goal_name ?? "", +// goalDescription: task.goal_description ?? "", +// marillacBucksAddition: task.marillac_bucks_addition, +// marillac_bucks_deduction: task.marillac_bucks_deduction, +// comment: task.comment, +// }; +// +// if (!isSameDay) { +// anyday.push(event); +// } else if (isDayStart && isDayEnd) { +// anytime.push(event); +// } else { +// specific.push(event); +// } +// } +// } +// +// setSpecificTasks(specific); +// setAnytimeTasks(anytime); +// setAnydayTasks(anyday); +// } +// +// useEffect(() => { +// setParticipantId(null); +// setMarillacBucks(0); +// setSpecificTasks([]); +// setAnytimeTasks([]); +// setAnydayTasks([]); +// fetchData({ variables: { room_number: selectedRoom } }); +// }, [selectedRoom, fetchData]); +// +// useEffect(() => { +// if (!loading && !error && data && data.getParticipantByRoom) { +// const participant = data.getParticipantByRoom; +// setParticipantId(participant.participant_id); +// setMarillacBucks(participant.marillac_bucks); +// groupTasks(participant.assigned_tasks); +// } +// }, [data, loading, error]); +// +// return { +// loading, +// error, +// participantId, +// marillacBucks, +// specificTasks, +// anytimeTasks, +// anydayTasks, +// }; +// }; diff --git a/frontend/src/admin/pages/tasks/Main.tsx b/frontend/src/admin/pages/tasks/Main.tsx index 694c3852..b23bd586 100644 --- a/frontend/src/admin/pages/tasks/Main.tsx +++ b/frontend/src/admin/pages/tasks/Main.tsx @@ -1,132 +1,134 @@ -import { - Flex, - Input, - InputGroup, - InputLeftElement, - Text, -} from "@chakra-ui/react"; -import SearchIcon from "@mui/icons-material/Search"; -import { useQuery } from "@apollo/client"; -import React, { useEffect, useState } from "react"; -import AddTaskModal from "./components/AddTaskModal"; -import TasksTable from "./components/TasksTable"; -import { GET_TASKS_BY_TYPE } from "../../../gql/queries"; -import OrangeButton from "../../common/buttons/OrangeButton"; -import { TaskType } from "../../../types/task"; - -export default function AdminTasksPage() { - const [addTask, setAddTask] = useState(false); - const [selectedTaskType, setSelectedTaskType] = useState(() => { - const type = localStorage.getItem("tasksSelectedType"); - if (!type || type === "required") return TaskType.REQUIRED; - return TaskType.OPTIONAL; - }); - const [taskFilter, setTaskFilter] = useState(""); - const [tasks, setTasks] = useState([]); - - const { loading, error, data } = useQuery(GET_TASKS_BY_TYPE, { - variables: { type: selectedTaskType.toUpperCase() }, - }); - - useEffect(() => { - if (!loading && !error && data) { - setTasks( - data.getTasksByType.filter( - (task: any) => - typeof task.task_name === "string" && - task.task_name.toLowerCase().includes(taskFilter.toLowerCase()) - ) - ); - } - }, [taskFilter, loading, error, data]); - - useEffect(() => { - localStorage.setItem("tasksSelectedType", selectedTaskType); - }, [selectedTaskType]); - - return ( - <> - - setSelectedTaskType(TaskType.REQUIRED)} - borderBottom={ - selectedTaskType === TaskType.REQUIRED ? "3px solid" : "0" - } - borderColor="primary.700" - px="12px" - pb="12px" - > - Required - - setSelectedTaskType(TaskType.OPTIONAL)} - borderBottom={ - selectedTaskType === TaskType.OPTIONAL ? "3px solid" : "0" - } - borderColor="primary.700" - px="12px" - pb="12px" - > - Optional - - - - - - - - - setTaskFilter(e.target.value)} - /> - - - setAddTask(true)} - is_active={addTask} - /> - - - - {addTask && ( - setAddTask(false)} - /> - )} - - ); -} +export {}; +// TODO: Refactor this component +// import { +// Flex, +// Input, +// InputGroup, +// InputLeftElement, +// Text, +// } from "@chakra-ui/react"; +// import SearchIcon from "@mui/icons-material/Search"; +// import { useQuery } from "@apollo/client"; +// import React, { useEffect, useState } from "react"; +// import AddTaskModal from "./components/AddTaskModal"; +// import TasksTable from "./components/TasksTable"; +// import { GET_TASKS_BY_TYPE } from "../../../gql/queries"; +// import OrangeButton from "../../common/buttons/OrangeButton"; +// import { TaskType } from "../../../types/task"; +// +// export default function AdminTasksPage() { +// const [addTask, setAddTask] = useState(false); +// const [selectedTaskType, setSelectedTaskType] = useState(() => { +// const type = localStorage.getItem("tasksSelectedType"); +// if (!type || type === "required") return TaskType.REQUIRED; +// return TaskType.OPTIONAL; +// }); +// const [taskFilter, setTaskFilter] = useState(""); +// const [tasks, setTasks] = useState([]); +// +// const { loading, error, data } = useQuery(GET_TASKS_BY_TYPE, { +// variables: { type: selectedTaskType.toUpperCase() }, +// }); +// +// useEffect(() => { +// if (!loading && !error && data) { +// setTasks( +// data.getTasksByType.filter( +// (task: any) => +// typeof task.task_name === "string" && +// task.task_name.toLowerCase().includes(taskFilter.toLowerCase()) +// ) +// ); +// } +// }, [taskFilter, loading, error, data]); +// +// useEffect(() => { +// localStorage.setItem("tasksSelectedType", selectedTaskType); +// }, [selectedTaskType]); +// +// return ( +// <> +// +// setSelectedTaskType(TaskType.REQUIRED)} +// borderBottom={ +// selectedTaskType === TaskType.REQUIRED ? "3px solid" : "0" +// } +// borderColor="primary.700" +// px="12px" +// pb="12px" +// > +// Required +// +// setSelectedTaskType(TaskType.OPTIONAL)} +// borderBottom={ +// selectedTaskType === TaskType.OPTIONAL ? "3px solid" : "0" +// } +// borderColor="primary.700" +// px="12px" +// pb="12px" +// > +// Optional +// +// +// +// +// +// +// +// +// setTaskFilter(e.target.value)} +// /> +// +// +// setAddTask(true)} +// is_active={addTask} +// /> +// +// +// +// {addTask && ( +// setAddTask(false)} +// /> +// )} +// +// ); +// } diff --git a/frontend/src/admin/pages/tasks/components/AddTaskModal.tsx b/frontend/src/admin/pages/tasks/components/AddTaskModal.tsx index 275eb577..d3e8b2d7 100644 --- a/frontend/src/admin/pages/tasks/components/AddTaskModal.tsx +++ b/frontend/src/admin/pages/tasks/components/AddTaskModal.tsx @@ -1,179 +1,181 @@ -import { Text, Flex, Checkbox } from "@chakra-ui/react"; -import React, { useState } from "react"; -import { useMutation } from "@apollo/client"; -import { CREATE_TASK } from "../../../../gql/mutations"; -import ModalContainer from "../../../common/form/ModalContainer"; -import CoreInput from "../../../common/form/CoreInput"; -import TextInput from "../../../common/form/TextInput"; -import TaskInput from "../../../common/form/TaskInput"; -import { - DayOfWeek, - RecurrenceFrequency, - TaskType, - TimeOption, -} from "../../../../types/task"; -import { toTitleCase } from "../../../../utils/string_helpers"; -import { sendNotification } from "../../../../utils/sendNotification"; - -type AddTaskModalProps = { - taskType: TaskType; - close: () => void; -}; - -export default function AddTaskModal({ taskType, close }: AddTaskModalProps) { - const [taskName, setTaskName] = useState(""); - const [participantPreference, setParticipantPreference] = useState(false); - const [recurrence, setRecurrence] = useState(""); - const [days, setDays] = useState([]); - const [time, setTime] = useState(""); - const [startTime, setStartTime] = useState(""); - const [endTime, setEndTime] = useState(""); - const [addition, setAddition] = useState(0); - const [deduction, setDeduction] = useState(0); - const [comments, setComments] = useState(""); - const [error, setError] = useState(""); - - const [createTask] = useMutation(CREATE_TASK, { - onCompleted: () => { - sendNotification(`Task ${taskName} added.`); - }, - onError: (err) => { - setError(err.message); - }, - }); - - function handleSubmit() { - if ( - !taskName || - (!participantPreference && - (recurrence === "" || - days.length === 0 || - time === "" || - (time === TimeOption.SPECIFIC && - (startTime === "" || endTime === "")))) - ) { - setError("Missing fields"); - } else if (addition < 0 || deduction < 0) { - setError("Invalid values for marillac bucks"); - } else if (time === TimeOption.SPECIFIC && startTime >= endTime) { - setError("Start time should be earlier than end time"); - } else if ( - recurrence === RecurrenceFrequency.ANY_SELECTED_DAYS && - days.length <= 1 - ) { - setError( - "If the task can only be completed on a specific day, please choose 'Every selected day'" - ); - } else if ( - recurrence === RecurrenceFrequency.ANY_SELECTED_DAYS && - time !== TimeOption.ANYTIME - ) { - setError("Anyday tasks must also be anytime tasks"); - } else { - createTask({ - variables: { - type: taskType.toUpperCase(), - name: taskName, - recurrencePreference: recurrence, - repeatDays: days, - timePreference: time, - marillacBucks: Number(addition), - deduction: Number(deduction), - startTime: startTime !== "" ? startTime : undefined, - endTime: endTime !== "" ? endTime : undefined, - comment: comments !== "" ? comments : undefined, - }, - }); - } - } - - return ( - - - - Task Type - - - {toTitleCase(taskType as string)} - - - - setTaskName(e.target.value)} - type="text" - /> - - {taskType !== TaskType.REQUIRED && ( - { - setRecurrence(RecurrenceFrequency.PARTICIPANT_PREFERENCE); - setDays([]); - setTime(TimeOption.PARTICIPANT_PREFERENCE); - setStartTime(""); - setEndTime(""); - setParticipantPreference(e.target.checked); - }} - > - - Participant Preference? - - - )} - - {participantPreference ? ( - <> - - setAddition(e.target.value as number)} - type="number" - width="50%" - /> - setDeduction(e.target.value as number)} - type="number" - width="50%" - /> - - - setComments(e.target.value)} - /> - - ) : ( - - )} - - ); -} +export {}; +// TODO: Refactor this component +// import { Text, Flex, Checkbox } from "@chakra-ui/react"; +// import React, { useState } from "react"; +// import { useMutation } from "@apollo/client"; +// import { CREATE_TASK } from "../../../../gql/mutations"; +// import ModalContainer from "../../../common/form/ModalContainer"; +// import CoreInput from "../../../common/form/CoreInput"; +// import TextInput from "../../../common/form/TextInput"; +// import TaskInput from "../../../common/form/TaskInput"; +// import { +// DayOfWeek, +// RecurrenceFrequency, +// TaskType, +// TimeOption, +// } from "../../../../types/task"; +// import { toTitleCase } from "../../../../utils/string_helpers"; +// import { sendNotification } from "../../../../utils/sendNotification"; +// +// type AddTaskModalProps = { +// taskType: TaskType; +// close: () => void; +// }; +// +// export default function AddTaskModal({ taskType, close }: AddTaskModalProps) { +// const [taskName, setTaskName] = useState(""); +// const [participantPreference, setParticipantPreference] = useState(false); +// const [recurrence, setRecurrence] = useState(""); +// const [days, setDays] = useState([]); +// const [time, setTime] = useState(""); +// const [startTime, setStartTime] = useState(""); +// const [endTime, setEndTime] = useState(""); +// const [addition, setAddition] = useState(0); +// const [deduction, setDeduction] = useState(0); +// const [comments, setComments] = useState(""); +// const [error, setError] = useState(""); +// +// const [createTask] = useMutation(CREATE_TASK, { +// onCompleted: () => { +// sendNotification(`Task ${taskName} added.`); +// }, +// onError: (err) => { +// setError(err.message); +// }, +// }); +// +// function handleSubmit() { +// if ( +// !taskName || +// (!participantPreference && +// (recurrence === "" || +// days.length === 0 || +// time === "" || +// (time === TimeOption.SPECIFIC && +// (startTime === "" || endTime === "")))) +// ) { +// setError("Missing fields"); +// } else if (addition < 0 || deduction < 0) { +// setError("Invalid values for marillac bucks"); +// } else if (time === TimeOption.SPECIFIC && startTime >= endTime) { +// setError("Start time should be earlier than end time"); +// } else if ( +// recurrence === RecurrenceFrequency.ANY_SELECTED_DAYS && +// days.length <= 1 +// ) { +// setError( +// "If the task can only be completed on a specific day, please choose 'Every selected day'" +// ); +// } else if ( +// recurrence === RecurrenceFrequency.ANY_SELECTED_DAYS && +// time !== TimeOption.ANYTIME +// ) { +// setError("Anyday tasks must also be anytime tasks"); +// } else { +// createTask({ +// variables: { +// type: taskType.toUpperCase(), +// name: taskName, +// recurrencePreference: recurrence, +// repeatDays: days, +// timePreference: time, +// marillacBucks: Number(addition), +// deduction: Number(deduction), +// startTime: startTime !== "" ? startTime : undefined, +// endTime: endTime !== "" ? endTime : undefined, +// comment: comments !== "" ? comments : undefined, +// }, +// }); +// } +// } +// +// return ( +// +// +// +// Task Type +// +// +// {toTitleCase(taskType as string)} +// +// +// +// setTaskName(e.target.value)} +// type="text" +// /> +// +// {taskType !== TaskType.REQUIRED && ( +// { +// setRecurrence(RecurrenceFrequency.PARTICIPANT_PREFERENCE); +// setDays([]); +// setTime(TimeOption.PARTICIPANT_PREFERENCE); +// setStartTime(""); +// setEndTime(""); +// setParticipantPreference(e.target.checked); +// }} +// > +// +// Participant Preference? +// +// +// )} +// +// {participantPreference ? ( +// <> +// +// setAddition(e.target.value as number)} +// type="number" +// width="50%" +// /> +// setDeduction(e.target.value as number)} +// type="number" +// width="50%" +// /> +// +// +// setComments(e.target.value)} +// /> +// +// ) : ( +// +// )} +// +// ); +// } diff --git a/frontend/src/admin/pages/tasks/components/EditTaskModal.tsx b/frontend/src/admin/pages/tasks/components/EditTaskModal.tsx index 13a97eb5..634811df 100644 --- a/frontend/src/admin/pages/tasks/components/EditTaskModal.tsx +++ b/frontend/src/admin/pages/tasks/components/EditTaskModal.tsx @@ -1,184 +1,186 @@ -import { Text, Flex, Checkbox } from "@chakra-ui/react"; -import React, { useState } from "react"; -import { useMutation } from "@apollo/client"; -import { UPDATE_TASK } from "../../../../gql/mutations"; -import ModalContainer from "../../../common/form/ModalContainer"; -import CoreInput from "../../../common/form/CoreInput"; -import TextInput from "../../../common/form/TextInput"; -import { toTitleCase } from "../../../../utils/string_helpers"; -import TaskInput from "../../../common/form/TaskInput"; -import { - DayOfWeek, - RecurrenceFrequency, - TaskInfo, - TaskType, - TimeOption, -} from "../../../../types/task"; -import { sendNotification } from "../../../../utils/sendNotification"; - -type EditTaskModalProps = { - selected: TaskInfo; - close: () => void; -}; - -export default function EditTaskModal({ selected, close }: EditTaskModalProps) { - console.info(selected); - const [taskName, setTaskName] = useState(selected.task_name); - const [participantPreference, setParticipantPreference] = useState( - selected.recurrence_preference === "PARTICIPANT_PREFERENCE" - ); - const [recurrence, setRecurrence] = useState( - selected.recurrence_preference - ); - const [days, setDays] = useState(selected.repeat_days); - const [time, setTime] = useState(selected.time_preference); - const [startTime, setStartTime] = useState(selected.start_time ?? ""); - const [endTime, setEndTime] = useState(selected.end_time ?? ""); - const [addition, setAddition] = useState(selected.marillac_bucks_addition); - const [deduction, setDeduction] = useState(selected.marillac_bucks_deduction); - const [comments, setComments] = useState(selected.comment ?? ""); - const [error, setError] = useState(""); - - const [updateTask] = useMutation(UPDATE_TASK, { - onCompleted: () => { - sendNotification(`Task ${taskName} updated.`); - }, - onError: (err) => { - setError(err.message); - }, - }); - - function handleSubmit() { - if ( - !taskName || - (!participantPreference && - (days.length === 0 || - (time === TimeOption.SPECIFIC && - (startTime === "" || endTime === "")))) - ) { - setError("Missing fields"); - } else if (addition < 0 || deduction < 0) { - setError("Invalid values for marillac bucks"); - } else if (time === TimeOption.SPECIFIC && startTime >= endTime) { - setError("Start time should be earlier than end time"); - } else if ( - recurrence === RecurrenceFrequency.ANY_SELECTED_DAYS && - days.length <= 1 - ) { - setError( - "If the task can only be completed on a specific day, please choose 'Every selected day'" - ); - } else if ( - recurrence === RecurrenceFrequency.ANY_SELECTED_DAYS && - time !== TimeOption.ANYTIME - ) { - setError("Anyday tasks must also be anytime tasks"); - } else { - updateTask({ - variables: { - id: selected.task_id, - type: selected.task_type, - name: taskName, - recurrencePreference: recurrence, - repeatDays: days, - timePreference: time, - marillacBucks: Number(addition), - deduction: Number(deduction), - startTime: startTime !== "" ? startTime : undefined, - endTime: endTime !== "" ? endTime : undefined, - comment: comments !== "" ? comments : undefined, - }, - }); - } - } - - return ( - - - - Task Type - - - {toTitleCase(selected.task_type as string)} - - - - setTaskName(e.target.value)} - type="text" - /> - - {selected.task_type !== TaskType.REQUIRED && ( - { - setRecurrence(RecurrenceFrequency.PARTICIPANT_PREFERENCE); - setDays([]); - setTime(TimeOption.PARTICIPANT_PREFERENCE); - setStartTime(""); - setEndTime(""); - setParticipantPreference(e.target.checked); - }} - > - - Participant Preference? - - - )} - - {participantPreference ? ( - <> - - setAddition(e.target.value as number)} - type="number" - width="50%" - /> - setDeduction(e.target.value as number)} - type="number" - width="50%" - /> - - - setComments(e.target.value)} - /> - - ) : ( - - )} - - ); -} +export {}; +// TODO: Refactor this component +// import { Text, Flex, Checkbox } from "@chakra-ui/react"; +// import React, { useState } from "react"; +// import { useMutation } from "@apollo/client"; +// import { UPDATE_TASK } from "../../../../gql/mutations"; +// import ModalContainer from "../../../common/form/ModalContainer"; +// import CoreInput from "../../../common/form/CoreInput"; +// import TextInput from "../../../common/form/TextInput"; +// import { toTitleCase } from "../../../../utils/string_helpers"; +// import TaskInput from "../../../common/form/TaskInput"; +// import { +// DayOfWeek, +// RecurrenceFrequency, +// TaskInfo, +// TaskType, +// TimeOption, +// } from "../../../../types/task"; +// import { sendNotification } from "../../../../utils/sendNotification"; +// +// type EditTaskModalProps = { +// selected: TaskInfo; +// close: () => void; +// }; +// +// export default function EditTaskModal({ selected, close }: EditTaskModalProps) { +// console.info(selected); +// const [taskName, setTaskName] = useState(selected.task_name); +// const [participantPreference, setParticipantPreference] = useState( +// selected.recurrence_preference === "PARTICIPANT_PREFERENCE" +// ); +// const [recurrence, setRecurrence] = useState( +// selected.recurrence_preference +// ); +// const [days, setDays] = useState(selected.repeat_days); +// const [time, setTime] = useState(selected.time_preference); +// const [startTime, setStartTime] = useState(selected.start_time ?? ""); +// const [endTime, setEndTime] = useState(selected.end_time ?? ""); +// const [addition, setAddition] = useState(selected.marillac_bucks_addition); +// const [deduction, setDeduction] = useState(selected.marillac_bucks_deduction); +// const [comments, setComments] = useState(selected.comment ?? ""); +// const [error, setError] = useState(""); +// +// const [updateTask] = useMutation(UPDATE_TASK, { +// onCompleted: () => { +// sendNotification(`Task ${taskName} updated.`); +// }, +// onError: (err) => { +// setError(err.message); +// }, +// }); +// +// function handleSubmit() { +// if ( +// !taskName || +// (!participantPreference && +// (days.length === 0 || +// (time === TimeOption.SPECIFIC && +// (startTime === "" || endTime === "")))) +// ) { +// setError("Missing fields"); +// } else if (addition < 0 || deduction < 0) { +// setError("Invalid values for marillac bucks"); +// } else if (time === TimeOption.SPECIFIC && startTime >= endTime) { +// setError("Start time should be earlier than end time"); +// } else if ( +// recurrence === RecurrenceFrequency.ANY_SELECTED_DAYS && +// days.length <= 1 +// ) { +// setError( +// "If the task can only be completed on a specific day, please choose 'Every selected day'" +// ); +// } else if ( +// recurrence === RecurrenceFrequency.ANY_SELECTED_DAYS && +// time !== TimeOption.ANYTIME +// ) { +// setError("Anyday tasks must also be anytime tasks"); +// } else { +// updateTask({ +// variables: { +// id: selected.task_id, +// type: selected.task_type, +// name: taskName, +// recurrencePreference: recurrence, +// repeatDays: days, +// timePreference: time, +// marillacBucks: Number(addition), +// deduction: Number(deduction), +// startTime: startTime !== "" ? startTime : undefined, +// endTime: endTime !== "" ? endTime : undefined, +// comment: comments !== "" ? comments : undefined, +// }, +// }); +// } +// } +// +// return ( +// +// +// +// Task Type +// +// +// {toTitleCase(selected.task_type as string)} +// +// +// +// setTaskName(e.target.value)} +// type="text" +// /> +// +// {selected.task_type !== TaskType.REQUIRED && ( +// { +// setRecurrence(RecurrenceFrequency.PARTICIPANT_PREFERENCE); +// setDays([]); +// setTime(TimeOption.PARTICIPANT_PREFERENCE); +// setStartTime(""); +// setEndTime(""); +// setParticipantPreference(e.target.checked); +// }} +// > +// +// Participant Preference? +// +// +// )} +// +// {participantPreference ? ( +// <> +// +// setAddition(e.target.value as number)} +// type="number" +// width="50%" +// /> +// setDeduction(e.target.value as number)} +// type="number" +// width="50%" +// /> +// +// +// setComments(e.target.value)} +// /> +// +// ) : ( +// +// )} +// +// ); +// } diff --git a/frontend/src/admin/pages/tasks/components/TasksTable.tsx b/frontend/src/admin/pages/tasks/components/TasksTable.tsx index 952c8443..14b75f07 100644 --- a/frontend/src/admin/pages/tasks/components/TasksTable.tsx +++ b/frontend/src/admin/pages/tasks/components/TasksTable.tsx @@ -1,163 +1,165 @@ -import { Text, Flex } from "@chakra-ui/react"; -import EditIcon from "@mui/icons-material/Edit"; -import DeleteOutlineIcon from "@mui/icons-material/DeleteOutline"; -import React, { useState } from "react"; -import { useMutation } from "@apollo/client"; -import { DELETE_TASK } from "../../../../gql/mutations"; -import EditTaskModal from "./EditTaskModal"; -import DataTable from "../../../common/misc/DataTable"; - -type TasksTableProps = { - loading: boolean; - error: any; - tasks: any[]; -}; - -const TasksTable = ({ loading, error, tasks }: TasksTableProps) => { - const days: Record = { - MONDAY: "M", - TUESDAY: "T", - WEDNESDAY: "W", - THURSDAY: "Th", - FRIDAY: "F", - SATURDAY: "Sa", - SUNDAY: "Su", - }; - - const [edit, setEdit] = useState(false); - const [selected, setSelected] = useState(null); - - const [deleteTask] = useMutation(DELETE_TASK); - - function formatTime(t: string) { - // const [h, m] = t.split(":").map(Number); - // return `${(h % 12 || 12)}:${m.toString().padStart(2, "0")} ${h < 12 ? "AM" : "PM"}`; - return t; - } - - async function handleDeleteTask(id: number) { - try { - await deleteTask({ - variables: { - taskId: id, - }, - }); - } catch (err: any) { - console.log(err); - } - window.location.reload(); - } - - const columns = [ - { header: "Name", width: "22%" }, - { header: "Assigned Days", width: "22%" }, - { header: "Assigned Times", width: "22%" }, - { header: "Marillac Bucks", width: "22%" }, - { header: "Actions", width: "12%" }, - ]; - - const rows: JSX.Element[][] = tasks.length - ? tasks.map((task: any) => { - const cells: JSX.Element[] = [ - - {task.task_name} - , - - {task.recurrence_preference === "PARTICIPANT_PREFERENCE" - ? "Participant Preference" - : task.recurrence_preference === "DAILY" - ? "Daily" - : (task.recurrence_preference === "EVERY_SELECTED_DAYS" - ? "Every" - : "Any") + - (task.repeat_days.length === 7 - ? "day" - : (task.recurrence_preference === "ANY_SELECTED_DAYS" - ? " of " - : " ") + - task.repeat_days - .map((day: string) => days[day]) - .join(", "))} - , - - {task.time_preference === "PARTICIPANT_PREFERENCE" - ? "Participant Preference" - : task.time_preference === "ANYTIME" - ? "Anytime" - : formatTime(task.start_time) + " - " + formatTime(task.end_time)} - , - - {new Intl.NumberFormat("en-US", { - style: "currency", - currency: "USD", - }).format(task.marillac_bucks_addition)} - , - - { - setSelected(task); - setEdit(true); - }} - > - - - handleDeleteTask(task.task_id)} - > - - - , - ]; - - return cells; - }) - : []; - - const editModal = selected && ( - setEdit(false)} /> - ); - - return ( - <> - - - ); -}; - -export default TasksTable; +export {}; +// TODO: Refactor this component +// import { Text, Flex } from "@chakra-ui/react"; +// import EditIcon from "@mui/icons-material/Edit"; +// import DeleteOutlineIcon from "@mui/icons-material/DeleteOutline"; +// import React, { useState } from "react"; +// import { useMutation } from "@apollo/client"; +// import { DELETE_TASK } from "../../../../gql/mutations"; +// import EditTaskModal from "./EditTaskModal"; +// import DataTable from "../../../common/misc/DataTable"; +// +// type TasksTableProps = { +// loading: boolean; +// error: any; +// tasks: any[]; +// }; +// +// const TasksTable = ({ loading, error, tasks }: TasksTableProps) => { +// const days: Record = { +// MONDAY: "M", +// TUESDAY: "T", +// WEDNESDAY: "W", +// THURSDAY: "Th", +// FRIDAY: "F", +// SATURDAY: "Sa", +// SUNDAY: "Su", +// }; +// +// const [edit, setEdit] = useState(false); +// const [selected, setSelected] = useState(null); +// +// const [deleteTask] = useMutation(DELETE_TASK); +// +// function formatTime(t: string) { +// // const [h, m] = t.split(":").map(Number); +// // return `${(h % 12 || 12)}:${m.toString().padStart(2, "0")} ${h < 12 ? "AM" : "PM"}`; +// return t; +// } +// +// async function handleDeleteTask(id: number) { +// try { +// await deleteTask({ +// variables: { +// taskId: id, +// }, +// }); +// } catch (err: any) { +// console.log(err); +// } +// window.location.reload(); +// } +// +// const columns = [ +// { header: "Name", width: "22%" }, +// { header: "Assigned Days", width: "22%" }, +// { header: "Assigned Times", width: "22%" }, +// { header: "Marillac Bucks", width: "22%" }, +// { header: "Actions", width: "12%" }, +// ]; +// +// const rows: JSX.Element[][] = tasks.length +// ? tasks.map((task: any) => { +// const cells: JSX.Element[] = [ +// +// {task.task_name} +// , +// +// {task.recurrence_preference === "PARTICIPANT_PREFERENCE" +// ? "Participant Preference" +// : task.recurrence_preference === "DAILY" +// ? "Daily" +// : (task.recurrence_preference === "EVERY_SELECTED_DAYS" +// ? "Every" +// : "Any") + +// (task.repeat_days.length === 7 +// ? "day" +// : (task.recurrence_preference === "ANY_SELECTED_DAYS" +// ? " of " +// : " ") + +// task.repeat_days +// .map((day: string) => days[day]) +// .join(", "))} +// , +// +// {task.time_preference === "PARTICIPANT_PREFERENCE" +// ? "Participant Preference" +// : task.time_preference === "ANYTIME" +// ? "Anytime" +// : formatTime(task.start_time) + " - " + formatTime(task.end_time)} +// , +// +// {new Intl.NumberFormat("en-US", { +// style: "currency", +// currency: "USD", +// }).format(task.marillac_bucks_addition)} +// , +// +// { +// setSelected(task); +// setEdit(true); +// }} +// > +// +// +// handleDeleteTask(task.task_id)} +// > +// +// +// , +// ]; +// +// return cells; +// }) +// : []; +// +// const editModal = selected && ( +// setEdit(false)} /> +// ); +// +// return ( +// <> +// +// +// ); +// }; +// +// export default TasksTable; diff --git a/frontend/src/constants/days.ts b/frontend/src/constants/days.ts new file mode 100644 index 00000000..2b5ac3a8 --- /dev/null +++ b/frontend/src/constants/days.ts @@ -0,0 +1,11 @@ +import { DayOfWeek } from "../types/enums"; + +export const DAYS = [ + DayOfWeek.SUNDAY, + DayOfWeek.MONDAY, + DayOfWeek.TUESDAY, + DayOfWeek.WEDNESDAY, + DayOfWeek.THURSDAY, + DayOfWeek.FRIDAY, + DayOfWeek.SATURDAY, +]; diff --git a/frontend/src/constants/icons.ts b/frontend/src/constants/icons.ts index 01edcce0..bb891da2 100644 --- a/frontend/src/constants/icons.ts +++ b/frontend/src/constants/icons.ts @@ -1,25 +1,36 @@ -// Enum for badge icon options -export enum Icon { - FIVE_STAR = "five_star", - FOUR_STAR = "four_star", - GROUP = "group", - HEART = "heart", - HOME = "home", - BABY = "baby", - WINGS = "wings", - FLOWER = "flower", - MONEY = "money", - GEMSTONE = "gemstone", - DIAMOND = "diamond", - PENCIL = "pencil", - TOOL = "tool", -} +import { ComponentType } from "react"; +import { Icon } from "../types/enums"; +import { IconProps } from "../types/component"; +import { + Baby, + Diamond, + DollarSign, + FiveStar, + Flower, + FourStar, + Group, + Heart, + Hexagon, + Home, + Pencil, + Plant, + Tools, + Wings, +} from "../ui/icons/BadgeIcons"; -export const iconList = [ - Icon.FIVE_STAR, - Icon.GROUP, - Icon.HEART, - Icon.HOME, - Icon.BABY, - Icon.WINGS, -]; +export const ICON_MAP: Record> = { + [Icon.BABY]: Baby, + [Icon.DIAMOND]: Diamond, + [Icon.FIVE_STAR]: FiveStar, + [Icon.FLOWER]: Flower, + [Icon.FOUR_STAR]: FourStar, + [Icon.GEMSTONE]: Hexagon, + [Icon.GROUP]: Group, + [Icon.HEART]: Heart, + [Icon.HOME]: Home, + [Icon.MONEY]: DollarSign, + [Icon.PENCIL]: Pencil, + [Icon.TOOL]: Tools, + [Icon.WINGS]: Wings, + [Icon.PLANT]: Plant, +}; diff --git a/frontend/src/constants/levels.ts b/frontend/src/constants/levels.ts new file mode 100644 index 00000000..567a08d7 --- /dev/null +++ b/frontend/src/constants/levels.ts @@ -0,0 +1,17 @@ +import { Level } from "../types/enums"; + +export const LEVEL_ORDER: Level[] = [ + Level.NOVICE, + Level.BRONZE, + Level.SILVER, + Level.GOLD, + Level.DIAMOND, +]; + +export const LEVEL_ABBREVIATION: Record = { + [Level.NOVICE]: "N", + [Level.BRONZE]: "B", + [Level.SILVER]: "S", + [Level.GOLD]: "G", + [Level.DIAMOND]: "D", +}; diff --git a/frontend/src/constants/misc.ts b/frontend/src/constants/misc.ts deleted file mode 100644 index 32c25a86..00000000 --- a/frontend/src/constants/misc.ts +++ /dev/null @@ -1,11 +0,0 @@ -export const ROOM_NUMBERS = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; - -export const weekdays = [ - "MONDAY", - "TUESDAY", - "WEDNESDAY", - "THURSDAY", - "FRIDAY", - "SATURDAY", - "SUNDAY", -]; diff --git a/frontend/src/constants/roles.ts b/frontend/src/constants/roles.ts new file mode 100644 index 00000000..d035cb9c --- /dev/null +++ b/frontend/src/constants/roles.ts @@ -0,0 +1,3 @@ +export const ADMIN = "admin"; +export const RELIEF = "relief"; +export const PARTICIPANT = "participant"; diff --git a/frontend/src/constants/rooms.ts b/frontend/src/constants/rooms.ts new file mode 100644 index 00000000..848df1d5 --- /dev/null +++ b/frontend/src/constants/rooms.ts @@ -0,0 +1 @@ +export const ROOM_NUMBERS = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; diff --git a/frontend/src/gql/achievedBadgeLevelRequests.ts b/frontend/src/gql/achievedBadgeLevelRequests.ts new file mode 100644 index 00000000..077b4b9c --- /dev/null +++ b/frontend/src/gql/achievedBadgeLevelRequests.ts @@ -0,0 +1,41 @@ +import { gql } from "@apollo/client"; + +export const GET_ACHIEVED_BADGE_LEVELS = gql` + query getAchievedBadgeLevels($pid: Int!) { + getAchievedBadgeLevels(pid: $pid) { + name + level + pid + notified + date + badge_level { + system_badge { + name + icon + description + is_active + } + } + } + } +`; + +export const FETCH_NEW_ACHIEVED_BADGE_LEVELS = gql` + mutation fetchNewAchievedBadgeLevels($pid: Int!) { + fetchNewAchievedBadgeLevels(pid: $pid) { + name + level + pid + notified + date + badge_level { + system_badge { + name + icon + description + is_active + } + } + } + } +`; diff --git a/frontend/src/gql/announcementRequests.ts b/frontend/src/gql/announcementRequests.ts new file mode 100644 index 00000000..61f15b0d --- /dev/null +++ b/frontend/src/gql/announcementRequests.ts @@ -0,0 +1,76 @@ +import { gql } from "@apollo/client"; + +export const GET_ANNOUNCEMENTS_FROM_TODAY = gql` + query getAnnouncementsFromToday { + getAnnouncementsFromToday { + aid + date + message + priority + ReceivedAnnouncement { + pid + participant { + room + } + } + } + } +`; + +export const GET_ANNOUNCEMENTS_SENT_TO_PARTICIPANTS = gql` + query getAnnouncementsSentToParticipants($pids: [Int!]!) { + getAnnouncementsSentToParticipants(pids: $pids) { + aid + date + message + priority + ReceivedAnnouncement { + pid + participant { + room + } + } + } + } +`; + +export const CREATE_ANNOUNCEMENT = gql` + mutation createAnnouncement( + $priority: Priority! + $pids: [Int!]! + $message: String! + ) { + createAnnouncement(priority: $priority, pids: $pids, message: $message) { + aid + date + message + priority + } + } +`; + +export const UPDATE_ANNOUNCEMENT = gql` + mutation updateAnnouncement( + $aid: Int! + $priority: Priority + $message: String + ) { + updateAnnouncement(aid: $aid, priority: $priority, message: $message) { + aid + date + message + priority + } + } +`; + +export const DELETE_ANNOUNCEMENT = gql` + mutation deleteAnnouncement($aid: Int!) { + deleteAnnouncement(aid: $aid) { + aid + date + message + priority + } + } +`; diff --git a/frontend/src/gql/assignedTaskRequests.ts b/frontend/src/gql/assignedTaskRequests.ts new file mode 100644 index 00000000..6ec59b4d --- /dev/null +++ b/frontend/src/gql/assignedTaskRequests.ts @@ -0,0 +1,156 @@ +import { gql } from "@apollo/client"; + +export const GET_NUMBER_OF_ASSIGNED_TASKS_BY_ROOM = gql` + query getNumberOfAssignedTasksByRoom { + getNumberOfAssignedTasksByRoom + } +`; + +export const GET_ASSIGNED_TASKS_FOR_TODAY = gql` + query getAssignedTasksForToday($pid: Int!) { + getAssignedTasksForToday(pid: $pid) { + aid + pid + name + type + status + value + penalty + comment + start_date + end_date + } + } +`; + +export const GET_ASSIGNED_TASKS_BY_WEEK = gql` + query getAssignedTasksByWeek($pid: Int!, $weekStart: Date!) { + getAssignedTasksByWeek(pid: $pid, weekStart: $weekStart) { + aid + pid + name + type + status + value + penalty + comment + start_date + end_date + } + } +`; + +export const HAS_COMPLETED_ALL_REQUIRED_TASKS = gql` + query hasCompletedAllRequiredTasks($pid: Int!) { + hasCompletedAllRequiredTasks(pid: $pid) + } +`; + +export const CREATE_ASSIGNED_TASK = gql` + mutation createAssignedTask( + $pid: Int! + $tid: Int! + $name: String! + $type: TaskType! + $value: Int! + $penalty: Int! + $startDate: Date! + $endDate: Date! + $comment: String + ) { + createAssignedTask( + pid: $pid + tid: $tid + name: $name + type: $type + value: $value + penalty: $penalty + start_date: $startDate + end_date: $endDate + comment: $comment + ) { + aid + tid + pid + name + type + status + value + penalty + comment + start_date + end_date + } + } +`; + +export const UPDATE_ASSIGNED_TASK = gql` + mutation updateAssignedTask( + $aid: Int! + $pid: Int + $name: String + $type: TaskType + $value: Int + $penalty: Int + $startDate: Date + $endDate: Date + $comment: String + ) { + updateAssignedTask( + aid: $aid + pid: $pid + name: $name + type: $type + value: $value + penalty: $penalty + start_date: $startDate + end_date: $endDate + comment: $comment + ) { + aid + pid + name + type + status + value + penalty + comment + start_date + end_date + } + } +`; + +export const UPDATE_ASSIGNED_TASK_STATUS = gql` + mutation updateAssignedTaskStatus($aid: Int!, $status: TaskStatus!) { + updateAssignedTaskStatus(aid: $aid, status: $status) { + aid + pid + name + type + status + value + penalty + comment + start_date + end_date + } + } +`; + +export const DELETE_ASSIGNED_TASK = gql` + mutation deleteAssignedTask($aid: Int!) { + deleteAssignedTask(aid: $aid) { + aid + pid + name + type + status + value + penalty + comment + start_date + end_date + } + } +`; diff --git a/frontend/src/gql/badgeLevelProgressRequests.ts b/frontend/src/gql/badgeLevelProgressRequests.ts new file mode 100644 index 00000000..c467d556 --- /dev/null +++ b/frontend/src/gql/badgeLevelProgressRequests.ts @@ -0,0 +1,19 @@ +import { gql } from "@apollo/client"; + +export const GET_BADGE_LEVEL_PROGRESS = gql` + getBadgeLevelProgress(pid: $pid) { + name + level + pid + progress + badge_level { + value + benchmark + system_badge { + icon + description + is_active + } + } + } +`; diff --git a/frontend/src/gql/badgeLevelRequests.ts b/frontend/src/gql/badgeLevelRequests.ts new file mode 100644 index 00000000..b90a6c57 --- /dev/null +++ b/frontend/src/gql/badgeLevelRequests.ts @@ -0,0 +1,22 @@ +import { gql } from "@apollo/client"; + +export const UPDATE_BADGE_LEVEL = gql` + mutation updateBadgeLevel( + $name: String! + $level: Level! + $benchmark: Int + $value: Int + ) { + updateBadgeLevel( + name: $name + level: $level + benchmark: $benchmark + value: $value + ) { + name + level + value + benchmark + } + } +`; diff --git a/frontend/src/gql/customBadgeRequests.ts b/frontend/src/gql/customBadgeRequests.ts new file mode 100644 index 00000000..8852db6f --- /dev/null +++ b/frontend/src/gql/customBadgeRequests.ts @@ -0,0 +1,59 @@ +import { gql } from "@apollo/client"; + +export const GET_CUSTOM_BADGES = gql` + query getCustomBadges { + getCustomBadges { + cid + name + description + icon + } + } +`; + +export const CREATE_CUSTOM_BADGE = gql` + mutation createCustomBadge( + $name: String! + $description: String! + $icon: Icon! + ) { + createCustomBadge(name: $name, description: $description, icon: $icon) { + cid + name + description + icon + } + } +`; + +export const UPDATE_CUSTOM_BADGE = gql` + mutation updateCustomBadge( + $cid: Int! + $name: String + $description: String + $icon: Icon + ) { + updateCustomBadge( + cid: $cid + name: $name + description: $description + icon: $icon + ) { + cid + name + description + icon + } + } +`; + +export const DELETE_CUSTOM_BADGE = gql` + mutation deleteCustomBadge($cid: Int!) { + deleteCustomBadge(cid: $cid) { + cid + name + description + icon + } + } +`; diff --git a/frontend/src/gql/earnedCustomBadgeRequests.ts b/frontend/src/gql/earnedCustomBadgeRequests.ts new file mode 100644 index 00000000..b91f87d1 --- /dev/null +++ b/frontend/src/gql/earnedCustomBadgeRequests.ts @@ -0,0 +1,52 @@ +import { gql } from "@apollo/client"; + +export const GET_EARNED_CUSTOM_BADGES = gql` + query getEarnedCustomBadges($pid: Int!) { + getEarnedCustomBadges(pid: $pid) { + eid + pid + name + icon + description + notified + } + } +`; + +export const FETCH_NEW_EARNED_CUSTOM_BADGES = gql` + mutation fetchNewEarnedCustomBadges($pid: Int!) { + fetchNewEarnedCustomBadges(pid: $pid) { + eid + pid + name + icon + description + notified + } + } +`; + +export const CREATE_EARNED_CUSTOM_BADGE = gql` + mutation createEarnedCustomBadge( + $pid: Int! + $name: String! + $icon: Icon! + $description: String! + $value: Int! + ) { + createEarnedCustomBadge( + pid: $pid + name: $name + icon: $icon + description: $description + value: $value + ) { + eid + pid + name + icon + description + notified + } + } +`; diff --git a/frontend/src/gql/earningGoalRequests.ts b/frontend/src/gql/earningGoalRequests.ts new file mode 100644 index 00000000..77036dbc --- /dev/null +++ b/frontend/src/gql/earningGoalRequests.ts @@ -0,0 +1,34 @@ +import { gql } from "@apollo/client"; + +export const GET_EARNING_GOAL = gql` + query getEarningGoal($pid: Int!) { + getEarningGoal(pid: $pid) { + pid + action + date + value + } + } +`; + +export const CREATE_EARNING_GOAL = gql` + mutation createEarningGoal($pid: Int!, $action: GoalAction!, $value: Int!) { + createEarningGoal(pid: $pid, action: $action, value: $value) { + pid + action + date + value + } + } +`; + +export const UPDATE_EARNING_GOAL = gql` + mutation updateEarningGoal($pid: Int!, $date: Date!, $value: Int!) { + updateEarningGoal(pid: $pid, date: $date, value: $value) { + pid + action + date + value + } + } +`; diff --git a/frontend/src/gql/loginRequests.ts b/frontend/src/gql/loginRequests.ts new file mode 100644 index 00000000..25ac0be3 --- /dev/null +++ b/frontend/src/gql/loginRequests.ts @@ -0,0 +1,17 @@ +import { gql } from "@apollo/client"; + +export const ADMIN_LOGIN = gql` + mutation adminLogin($role: String!, $password: String!) { + adminLogin(role: $role, password: $password) { + token + } + } +`; + +export const PARTICIPANT_LOGIN = gql` + mutation participantLogin($pid: Int!, $password: String!) { + participantLogin(pid: $pid, password: $password) { + token + } + } +`; diff --git a/frontend/src/gql/mutations.ts b/frontend/src/gql/mutations.ts deleted file mode 100644 index 487f4f9b..00000000 --- a/frontend/src/gql/mutations.ts +++ /dev/null @@ -1,401 +0,0 @@ -import { gql } from "@apollo/client"; - -export const UPDATE_BADGE_STATUS = gql` - mutation updateBadgeStatus($badge_id: Int!, $is_active: Boolean!) { - updateBadgeStatus(badge_id: $badge_id, is_active: $is_active) - } -`; - -export const ADMIN_LOGIN = gql` - mutation adminLogin($role: String!, $password: String!) { - adminLogin(role: $role, password: $password) { - token - } - } -`; - -export const PARTICIPANT_LOGIN = gql` - mutation participantLogin($id: Int!, $password: String!) { - participantLogin(id: $id, password: $password) { - token - } - } -`; - -export const CREATE_PARTICIPANT = gql` - mutation createParticipant( - $participant_id: Int! - $room_number: Int! - $arrival_date: String! - $password: String! - ) { - createParticipant( - participant_id: $participant_id - room_number: $room_number - arrival_date: $arrival_date - password: $password - ) - } -`; - -export const UPDATE_PARTICIPANT = gql` - mutation updateParticipant( - $participant_id: Int! - $room_number: Int - $arrival_date: String - $departure_date: String - $account_creation_date: String - $account_removal_date: String - $marillac_bucks: Int - $marillac_bucks_goal: Int - $password: String - ) { - updateParticipant( - participant_id: $participant_id - room_number: $room_number - arrival_date: $arrival_date - departure_date: $departure_date - account_creation_date: $account_creation_date - account_removal_date: $account_removal_date - marillac_bucks: $marillac_bucks - marillac_bucks_goal: $marillac_bucks_goal - password: $password - ) - } -`; - -export const UPDATE_MARILLAC_BUCKS = gql` - mutation updateMarillacBucks( - $participant_id: Int! - $marillac_bucks: Int! - $reason: String! - ) { - updateMarillacBucks( - participant_id: $participant_id - marillac_bucks: $marillac_bucks - reason: $reason - ) - } -`; - -export const CREATE_ANNOUNCEMENT = gql` - mutation createAnnouncement( - $priority: Priority! - $participants: [Int!]! - $message: String! - ) { - createAnnouncement( - priority: $priority - participants: $participants - message: $message - ) - } -`; - -export const CREATE_ASSIGNED_TASK = gql` - mutation createAssignedTask( - $participantId: Int! - $taskName: String! - $startDate: String! - $endDate: String! - $marillacBucksAddition: Int! - $marillacBucksDeduction: Int! - $taskType: TaskType! - $goalName: String - $goalDescription: String - $comment: String - ) { - createAssignedTask( - participantId: $participantId - taskName: $taskName - startDate: $startDate - endDate: $endDate - marillacBucksAddition: $marillacBucksAddition - marillacBucksDeduction: $marillacBucksDeduction - taskType: $taskType - goalName: $goalName - goalDescription: $goalDescription - comment: $comment - ) - } -`; - -export const EDIT_ANNOUNCEMENT = gql` - mutation editAnnouncement( - $announcement_id: Int! - $priority: Priority - $message: String - ) { - editAnnouncement( - announcement_id: $announcement_id - priority: $priority - message: $message - ) - } -`; - -export const DELETE_ANNOUNCEMENT = gql` - mutation DeleteAnnouncement($announcement_id: Int!) { - deleteAnnouncement(announcement_id: $announcement_id) - } -`; - -export const EDIT_MARILLAC_BUCKS = gql` - mutation EditMarillacBucks($participantId: String, $credit: Int) { - editMarillacBucks(participantId: $participantId, credit: $credit) - } -`; - -export const CREATE_NOTE = gql` - mutation createNote($message: String!) { - createNote(message: $message) - } -`; - -export const DELETE_NOTE = gql` - mutation deleteNote($note_id: Int!) { - deleteNote(note_id: $note_id) - } -`; - -export const CREATE_TASK = gql` - mutation CreateTask( - $type: TaskType! - $name: String! - $recurrencePreference: RecurrenceFrequency! - $repeatDays: [DayOfWeek!]! - $timePreference: TimeOption! - $marillacBucks: Int! - $deduction: Int! - $startTime: String - $endTime: String - $comment: String - ) { - createTask( - type: $type - name: $name - recurrencePreference: $recurrencePreference - repeatDays: $repeatDays - timePreference: $timePreference - marillacBucks: $marillacBucks - deduction: $deduction - startTime: $startTime - endTime: $endTime - comment: $comment - ) - } -`; - -export const DELETE_ASSIGNED_TASK = gql` - mutation DeleteAssignedTask($assigned_task_id: Int!) { - deleteAssignedTask(assigned_task_id: $assigned_task_id) - } -`; - -export const UPDATE_TASK = gql` - mutation updateTask( - $id: Int! - $type: TaskType - $name: String - $recurrencePreference: RecurrenceFrequency - $repeatDays: [DayOfWeek!] - $timePreference: TimeOption - $marillacBucks: Int - $deduction: Int - $startTime: String - $endTime: String - $comment: String - ) { - updateTask( - id: $id - type: $type - name: $name - recurrencePreference: $recurrencePreference - repeatDays: $repeatDays - timePreference: $timePreference - marillacBucks: $marillacBucks - deduction: $deduction - startTime: $startTime - endTime: $endTime - comment: $comment - ) - } -`; - -export const DELETE_TASK = gql` - mutation deleteTaskById($taskId: Int!) { - deleteTaskById(taskId: $taskId) - } -`; - -export const DELETE_CUSTOM_BADGE = gql` - mutation deleteCustomBadge($badge_id: Int!) { - deleteCustomBadge(badge_id: $badge_id) - } -`; - -export const CREATE_CUSTOM_BADGE = gql` - mutation createCustomBadge( - $name: String! - $description: String! - $icon: Icon! - ) { - createCustomBadge(name: $name, description: $description, icon: $icon) - } -`; - -export const EDIT_CUSTOM_BADGE = gql` - mutation editCustomBadge( - $custom_badge_id: Int! - $new_custom_badge_name: String - $new_custom_badge_description: String - ) { - editCustomBadge( - custom_badge_id: $custom_badge_id - new_custom_badge_name: $new_custom_badge_name - new_custom_badge_description: $new_custom_badge_description - ) - } -`; - -export const EDIT_BADGE_LEVEL = gql` - mutation editBadgeLevel( - $badge_id: Int! - $badge_level: Int! - $benchmark: Int! - $marillac_bucks: Int! - ) { - editBadgeLevel( - badge_id: $badge_id - badge_level: $badge_level - benchmark: $benchmark - marillac_bucks: $marillac_bucks - ) - } -`; - -export const EDIT_SYSTEM_BADGE = gql` - mutation editSystemBadge( - $system_badge_id: Int! - $system_badge_name: String! - $system_badge_criteria: String - ) { - editSystemBadge( - system_badge_id: $system_badge_id - system_badge_name: $system_badge_name - system_badge_criteria: $system_badge_criteria - ) - } -`; - -export const ASSIGN_CUSTOM_BADGE = gql` - mutation assignCustomBadge( - $badge_id: Int! - $marillac_bucks: Int! - $participant_ids: [Int!]! - ) { - assignCustomBadge( - badge_id: $badge_id - marillac_bucks: $marillac_bucks - participant_ids: $participant_ids - ) - } -`; -export const SET_MARILLAC_BUCKS_GOAL = gql` - mutation setMarillacBucksGoal($participant_id: Int!, $goal_value: Int!) { - setMarillacBucksGoal( - participant_id: $participant_id - goal_value: $goal_value - ) - } -`; - -export const UPDATE_PIN_READ_ANNOUNCEMENTS = gql` - mutation UpdatePinReadAnnouncement( - $announcement_id: Int! - $participant_id: Int! - $pinned: Boolean - $read: Boolean - ) { - updatePinReadAnnouncement( - announcement_id: $announcement_id - participant_id: $participant_id - pinned: $pinned - read: $read - ) - } -`; - -export const UPDATE_MARILLAC_BUCKS_GOAL = gql` - mutation updateMarillacBucksGoal( - $participant_id: Int! - $new_goal_value: Int! - ) { - updateMarillacBucksGoal( - participant_id: $participant_id - new_goal_value: $new_goal_value - ) - } -`; - -export const UPDATE_ASSIGNED_TASK = gql` - mutation UpdateAssignedTask( - $id: Int! - $taskName: String - $taskStatus: Status - $taskType: TaskType - $goalName: String - $goalDescription: String - $startDate: String - $endDate: String - $marillacBucksAddition: Int - $marillacBucksDeduction: Int - $comment: String - ) { - updateAssignedTask( - id: $id - taskName: $taskName - taskStatus: $taskStatus - taskType: $taskType - goalName: $goalName - goalDescription: $goalDescription - startDate: $startDate - endDate: $endDate - marillacBucksAddition: $marillacBucksAddition - marillacBucksDeduction: $marillacBucksDeduction - comment: $comment - ) - } -`; - -export const CREATE_REPORT_RECIPIENT = gql` - mutation createReportRecipient( - $email: String! - $weekly: Boolean! - $monthly: Boolean! - ) { - createReportRecipient(email: $email, weekly: $weekly, monthly: $monthly) - } -`; - -export const UPDATE_REPORT_RECIPIENT = gql` - mutation updateReportRecipient( - $report_recipient_id: Int! - $email: String - $weekly: Boolean - $monthly: Boolean - ) { - updateReportRecipient( - report_recipient_id: $report_recipient_id - email: $email - weekly: $weekly - monthly: $monthly - ) - } -`; - -export const DELETE_REPORT_RECIPIENT = gql` - mutation deleteReportRecipient($report_recipient_id: Int!) { - deleteReportRecipient(report_recipient_id: $report_recipient_id) - } -`; diff --git a/frontend/src/gql/noteRequests.ts b/frontend/src/gql/noteRequests.ts new file mode 100644 index 00000000..f30de8ea --- /dev/null +++ b/frontend/src/gql/noteRequests.ts @@ -0,0 +1,31 @@ +import { gql } from "@apollo/client"; + +export const GET_NOTES = gql` + query getNotes { + getNotes { + nid + message + date + } + } +`; + +export const CREATE_NOTE = gql` + mutation createNote($message: String!) { + createNote(message: $message) { + nid + message + date + } + } +`; + +export const DELETE_NOTE = gql` + mutation deleteNote($nid: Int!) { + deleteNote(nid: $nid) { + nid + message + date + } + } +`; diff --git a/frontend/src/gql/participantRequests.ts b/frontend/src/gql/participantRequests.ts new file mode 100644 index 00000000..7d09d83d --- /dev/null +++ b/frontend/src/gql/participantRequests.ts @@ -0,0 +1,93 @@ +import { gql } from "@apollo/client"; + +export const GET_CURRENT_PARTICIPANTS = gql` + query getCurrentParticipants { + getCurrentParticipants { + pid + room + arrival + departure + password + balance + total_earnings + } + } +`; + +export const GET_PAST_PARTICIPANTS = gql` + query getPastParticipants { + getPastParticipants { + pid + room + arrival + departure + password + balance + total_earnings + } + } +`; + +export const GET_PARTICIPANT_BY_PID = gql` + query getParticipantByPid($pid: Int!) { + getParticipantByPid(pid: $pid) { + pid + room + balance + total_earnings + arrival + departure + password + } + } +`; + +export const CREATE_PARTICIPANT = gql` + mutation createParticipant( + $pid: Int! + $password: String! + $room: Int! + $arrival: Date! + ) { + createParticipant( + pid: $pid + password: $password + room: $room + arrival: $arrival + ) { + pid + room + arrival + departure + password + balance + total_earnings + } + } +`; + +export const UPDATE_PARTICIPANT = gql` + mutation updateParticipant( + $pid: Int! + $password: String + $room: Int + $arrival: Date + $departure: Date + ) { + updateParticipant( + pid: $pid + password: $password + room: $room + arrival: $arrival + departure: $departure + ) { + pid + room + arrival + departure + password + balance + total_earnings + } + } +`; diff --git a/frontend/src/gql/queries.ts b/frontend/src/gql/queries.ts deleted file mode 100644 index 3bb88aca..00000000 --- a/frontend/src/gql/queries.ts +++ /dev/null @@ -1,371 +0,0 @@ -import { gql } from "@apollo/client"; - -export const GET_AVAILABLE_ROOMS = gql` - query getAvailableRooms { - getAvailableRooms - } -`; - -export const GET_PAST_PARTICIPANTS = gql` - query getPastParticipants { - getPastParticipants { - participant_id - arrival_date - departure_date - } - } -`; - -export const GET_SYSTEM_BADGES = gql` - query { - getSystemBadges { - badge_id - name - description - icon - is_active - badge_level { - level - benchmark - marillac_bucks - } - } - } -`; - -export const GET_CURRENT_PARTICIPANTS = gql` - query getCurrentParticipants { - getCurrentParticipants { - participant_id - room_number - arrival_date - password - } - } -`; -export const GET_MARILLAC_BUCKS = gql` - query getMarillacBucks($participantId: Int!) { - getParticipantById(participantId: $participantId) { - marillac_bucks - } - } -`; - -export const GET_PARTICIPANT_GOAL = gql` - query getParticipantGoal($participantId: Int!) { - getParticipantById(participantId: $participantId) { - marillac_bucks - marillac_bucks_goal - } - } -`; - -export const GET_PARTICIPANT_BY_ROOM = gql` - query getParticipantByRoom($room_number: Int!) { - getParticipantByRoom(room_number: $room_number) { - participant_id - marillac_bucks - room_number - assigned_tasks { - assigned_task_id - task_name - task_status - task_type - goal_name - goal_description - start_date - end_date - marillac_bucks_addition - marillac_bucks_deduction - comment - } - } - } -`; - -export const HAS_COMPLETED_ALL_REQUIRED_TASKS = gql` - query hasCompletedAllRequiredTasks($participantId: Int!) { - hasCompletedAllRequiredTasks(participantId: $participantId) - } -`; - -export const GET_PARTICIPANTS_BY_ROOMS = gql` - query getParticipantsByRooms($room_numbers: [Int!]!) { - getParticipantsByRooms(room_numbers: $room_numbers) { - participant_id - room_number - } - } -`; - -export const GET_PARTICIPANT_BY_ID = gql` - query getParticipantById($participantId: Int!) { - getParticipantById(participantId: $participantId) { - participant_id - marillac_bucks - marillac_bucks_goal - room_number - } - } -`; - -export const GET_ALL_ANNOUNCEMENTS = gql` - query getAllAnnouncements { - getAllAnnouncements { - announcement_id - priority - creation_date - message - user_announcements { - participant_id - read - pinned - } - } - } -`; - -export const GET_ANNOUNCEMENTS_IN_DATE_RANGE = gql` - query getAnnouncementsInDateRange($start: String!, $end: String!) { - getAnnouncementsInDateRange(start: $start, end: $end) { - announcement_id - creation_date - message - user_announcements { - participant { - room_number - } - } - } - } -`; - -export const GET_ANNOUNCEMENTS_BY_PARTICIPANTS = gql` - query getAnnouncementsByParticipants($participant_ids: [Int!]!) { - getAnnouncementsByParticipants(participant_ids: $participant_ids) { - announcement_id - priority - creation_date - message - user_announcements { - participant_id - read - pinned - } - } - } -`; - -export const GET_ANNOUNCEMENTS_BY_PARTICIPANT_ID = gql` - query getAnnouncementsByParticipantId($participant_id: Int!) { - getAnnouncementsByParticipantId(participant_id: $participant_id) { - announcement_id - participant_id - read - pinned - announcement { - priority - creation_date - message - } - } - } -`; - -export const GET_ANNOUNCEMENT_BY_ROOMS = gql` - query getAnnouncementByRooms($rooms: [Int]) { - getAnnouncementByRooms(rooms: $rooms) { - announcementId - from - to - createdAt - message - } - } -`; - -export const GET_NOTES = gql` - query getNotes { - getNotes { - note_id - message - creation_date - } - } -`; - -export const GET_TASK_BY_ID = gql` - query getTaskById($taskId: Int!) { - getTaskById(taskId: $taskId) { - taskId - type - name - recurrencePreference - repeatDays - timePreference - start - end - credit - deduction - comment - } - } -`; - -export const GET_TASKS_BY_TYPE = gql` - query getTasksByType($type: [TaskType!]!) { - getTasksByType(type: $type) { - task_id - task_name - task_type - recurrence_preference - repeat_days - time_preference - start_time - end_time - marillac_bucks_addition - marillac_bucks_deduction - comment - } - } -`; - -export const GET_PARTICIPANT_FILTERED_ANNOUNCEMENTS = gql` - query getParticipantFilteredAnnouncements( - $participantId: Int! - $filter: AnnouncementFilter! - ) { - getParticipantAnnouncements( - participantId: $participantId - filter: $filter - ) { - participant_id - announcement_id - read - pinned - announcement { - message - priority - creation_date - } - } - } -`; - -export const GET_TASKS_BY_RECURRENCE_FREQUENCY = gql` - query GetTasksByRecurrenceFrequency( - $recurrencePreference: RecurrenceFrequency! - ) { - getTasksByRecurrenceFrequency(recurrencePreference: $recurrencePreference) { - taskId - type - name - recurrencePreference - repeatDays - timePreference - start - end - credit - deduction - comment - } - } -`; - -export const GET_CUSTOM_BADGES = gql` - query getCustomBadges { - getCustomBadges { - badge_id - name - description - is_active - icon - badge_level { - level - benchmark - marillac_bucks - } - } - } -`; - -export const GET_ASSIGNED_TASKS_BY_PARTICIPANT_ID_AND_DATE = gql` - query getAssignedTasksByParticipantIdAndDate( - $participantId: Int! - $date: String! - ) { - getAssignedTasksByParticipantIdAndDate( - participantId: $participantId - date: $date - ) { - assigned_task_id - task_name - task_status - task_type - start_date - end_date - comment - } - } -`; - -export const GET_ASSIGNED_TASKS = gql` - query getAssignedTasks($participant_id: Int!) { - getAssignedTasks(participant_id: $participant_id) { - SPECIFIC { - id - title - start - end - allDay - task_status - task_type - marillacBucksAddition - marillac_bucks_deduction - comment - } - ANYTIME { - id - title - start - end - allDay - task_status - task_type - marillacBucksAddition - marillac_bucks_deduction - comment - } - ANYDAY { - id - title - start - end - allDay - task_status - task_type - marillacBucksAddition - marillac_bucks_deduction - comment - } - } - } -`; - -export const GET_WEEKLY_EARNINGS = gql` - query GetWeeklyEarnings($participant_id: Int!) { - getWeeklyEarnings(participant_id: $participant_id) - } -`; - -export const GET_REPORT_RECIPIENTS = gql` - query getReportRecipients { - getReportRecipients { - report_recipient_id - email - weekly - monthly - last_report_sent - } - } -`; diff --git a/frontend/src/gql/receivedAnnouncementRequests.ts b/frontend/src/gql/receivedAnnouncementRequests.ts new file mode 100644 index 00000000..81810478 --- /dev/null +++ b/frontend/src/gql/receivedAnnouncementRequests.ts @@ -0,0 +1,49 @@ +import { gql } from "@apollo/client"; + +export const GET_RECEIVED_ANNOUNCEMENTS = gql` + query getReceivedAnnouncements( + $pid: Int! + $unread: Boolean + $pinned: Boolean + $important: Boolean + ) { + getReceivedAnnouncements( + pid: $pid + unread: $unread + pinned: $pinned + important: $important + ) { + aid + pid + read + pinned + announcement { + aid + date + message + priority + } + } + } +`; + +export const UPDATE_RECEIVED_ANNOUNCEMENT = gql` + mutation updateReceivedAnnouncement( + $aid: Int! + $pid: Int! + $pinned: Boolean + $read: Boolean + ) { + updateReceivedAnnouncement( + aid: $aid + pid: $pid + pinned: $pinned + read: $read + ) { + aid + pid + read + pinned + } + } +`; diff --git a/frontend/src/gql/reportRecipientRequests.ts b/frontend/src/gql/reportRecipientRequests.ts new file mode 100644 index 00000000..896769b0 --- /dev/null +++ b/frontend/src/gql/reportRecipientRequests.ts @@ -0,0 +1,49 @@ +import { gql } from "@apollo/client"; + +export const GET_REPORT_RECIPIENTS = gql` + query getReportRecipients { + getReportRecipients { + email + weekly + monthly + } + } +`; + +export const CREATE_REPORT_RECIPIENT = gql` + mutation createReportRecipient( + $email: String! + $weekly: Boolean! + $monthly: Boolean! + ) { + createReportRecipient(email: $email, weekly: $weekly, monthly: $monthly) { + email + weekly + monthly + } + } +`; + +export const UPDATE_REPORT_RECIPIENT = gql` + mutation updateReportRecipient( + $email: String! + $weekly: Boolean + $monthly: Boolean + ) { + updateReportRecipient(email: $email, weekly: $weekly, monthly: $monthly) { + email + weekly + monthly + } + } +`; + +export const DELETE_REPORT_RECIPIENT = gql` + mutation deleteReportRecipient($email: String!) { + deleteReportRecipient(email: $email) { + email + weekly + monthly + } + } +`; diff --git a/frontend/src/gql/systemBadgeRequests.ts b/frontend/src/gql/systemBadgeRequests.ts new file mode 100644 index 00000000..88554765 --- /dev/null +++ b/frontend/src/gql/systemBadgeRequests.ts @@ -0,0 +1,37 @@ +import { gql } from "@apollo/client"; + +export const GET_SYSTEM_BADGES = gql` + query getSystemBadges { + getSystemBadges { + name + icon + description + is_active + BadgeLevel { + name + level + value + benchmark + } + } + } +`; + +export const UPDATE_SYSTEM_BADGE = gql` + mutation updateSystemBadge( + $name: String! + $description: String + $isActive: Boolean + ) { + updateSystemBadge( + name: $name + description: $description + is_active: $isActive + ) { + name + icon + description + is_active + } + } +`; diff --git a/frontend/src/gql/taskRequests.ts b/frontend/src/gql/taskRequests.ts new file mode 100644 index 00000000..7114e19b --- /dev/null +++ b/frontend/src/gql/taskRequests.ts @@ -0,0 +1,119 @@ +import { gql } from "@apollo/client"; + +export const GET_TASKS_BY_TYPE = gql` + query getTasksByType($type: TaskType!) { + getTasksByType(type: $type) { + tid + type + name + day_preference + days + time_preference + start_time + end_time + value + penalty + comment + } + } +`; + +export const CREATE_TASK = gql` + mutation createTask( + $type: TaskType! + $name: String + $dayPreference: DayPreference! + $days: [DayOfWeek!]! + $timePreference: TimePreference! + $value: Int! + $penalty: Int! + $startTime: Date + $endTime: Date + $comment: String + ) { + createTask( + type: $type + name: $name + value: $value + penalty: $penalty + day_preference: $dayPreference + days: $days + time_preference: $timePreference + start_time: $startTime + end_time: $endTime + comment: $comment + ) { + tid + type + name + day_preference + days + time_preference + start_time + end_time + value + penalty + comment + } + } +`; + +export const UPDATE_TASK = gql` + mutation updateTask( + $id: Int! + $type: TaskType + $name: String + $dayPreference: DayPreference + $days: [DayOfWeek!] + $timePreference: TimePreference + $value: Int + $penalty: Int + $startTime: Date + $endTime: Date + $comment: String + ) { + updateTask( + tid: $id + type: $type + name: $name + day_preference: $dayPreference + days: $days + time_preference: $timePreference + value: $value + penalty: $penalty + start_time: $startTime + end_time: $endTime + comment: $comment + ) { + tid + type + name + day_preference + days + time_preference + start_time + end_time + value + penalty + comment + } + } +`; + +export const DELETE_TASK = gql` + mutation deleteTask($tid: Int!) { + deleteTask(tid: $tid) { + tid + type + name + day_preference + days + time_preference + start_time + end_time + value + penalty + comment + } + } +`; diff --git a/frontend/src/gql/transactionRequests.ts b/frontend/src/gql/transactionRequests.ts new file mode 100644 index 00000000..0006fa7b --- /dev/null +++ b/frontend/src/gql/transactionRequests.ts @@ -0,0 +1,27 @@ +import { gql } from "@apollo/client"; + +export const GET_WEEKLY_EARNINGS = gql` + query getWeeklyEarnings($pid: Int!) { + getWeeklyEarnings(pid: $pid) { + SUNDAY + MONDAY + TUESDAY + WEDNESDAY + THURSDAY + FRIDAY + SATURDAY + } + } +`; + +export const UPDATE_BALANCE = gql` + mutation updateBalance($pid: Int!, $amount: Int!, $reason: String!) { + updateBalance(pid: $pid, amount: $amount, reason: $reason) { + pid + date + amount + type + reason + } + } +`; diff --git a/frontend/src/helpers/formatDateTime.ts b/frontend/src/helpers/formatDateTime.ts new file mode 100644 index 00000000..31dd1ef9 --- /dev/null +++ b/frontend/src/helpers/formatDateTime.ts @@ -0,0 +1,194 @@ +import { format } from "date-fns"; + +// ============================================================================ +// UTC Date Object to Local Timezone Strings +// ============================================================================ + +/** + * Converts a Date object to a string in the format "YYYY-MM-DD" for use with . + * The date is formatted in the local timezone. + * + * @param date - The Date object to format + * @returns A string in "YYYY-MM-DD" format (e.g., "2025-01-15") + * @example + * ```ts + * const date = new Date(2025, 0, 15); + * const formatted = formatDateInputValue(date); // "2025-01-15" + * ``` + */ +export function formatDateInputValue(date: Date): string { + return date.toLocaleDateString("en-CA", { + year: "numeric", + month: "2-digit", + day: "2-digit", + }); +} + +/** + * Converts a Date object to a string in the format "HH:mm" for use with . + * The time is formatted in the local timezone using 24-hour format. + * + * @param date - The Date object to format + * @returns A string in "HH:mm" format (e.g., "14:30") + * @example + * ```ts + * const date = new Date(2025, 0, 15, 14, 30); + * const formatted = formatTimeInputValue(date); // "14:30" + * ``` + */ +export function formatTimeInputValue(date: Date): string { + return date.toLocaleTimeString("en-CA", { + hour: "2-digit", + minute: "2-digit", + hour12: false, + }); +} + +/** + * Converts today's date into a human-readable format "January 1, 2025" in the local timezone. + * + * @returns A string representing today's date (e.g., "January 15, 2025") + * @example + * ```ts + * const today = getTodayDateString(); // "January 15, 2025" + * ``` + */ +export function getTodayDateString(): string { + return new Date().toLocaleDateString("en-CA", { + year: "numeric", + month: "long", + day: "numeric", + }); +} + +/** + * Converts a UTC string date (typically from a GraphQL response) into a formatted string + * with date and time: "Jan 1, 12:00 AM" in the local timezone. + * + * @param date - A UTC date string (ISO format) or Date object + * @returns A formatted string (e.g., "Jan 15, 2:30 PM") + * @example + * ```ts + * const utcString = "2025-01-15T14:30:00Z"; + * const formatted = formatDateTimeString(utcString); // "Jan 15, 2:30 PM" (in local timezone) + * ``` + */ +export function formatDateTimeString(date: string): string { + const dateObj = new Date(date); + const formatted = dateObj.toLocaleString("en-CA", { + hour: "numeric", + minute: "2-digit", + hour12: true, + month: "short", + day: "numeric", + }); + return formatted.replace("a.m.", "AM").replace("p.m.", "PM"); +} + +/** + * Converts a UTC string date (typically from a GraphQL response) into a formatted time string + * "12:00 AM" in the local timezone. + * + * @param date - A UTC date string (ISO format) or Date object + * @returns A formatted time string (e.g., "2:30 PM") + * @example + * ```ts + * const utcString = "2025-01-15T14:30:00Z"; + * const formatted = formatTimeString(utcString); // "2:30 PM" (in local timezone) + * ``` + */ +export function formatTimeString(date: string): string { + const dateObj = new Date(date); + return dateObj.toLocaleTimeString("en-CA", { + hour: "numeric", + minute: "2-digit", + hour12: true, + }); +} + +/** + * Converts a Date object to a day abbreviation in uppercase format (e.g., "MON", "TUE", "WED"). + * Uses date-fns for consistent formatting. + * + * @param date - The Date object to format + * @returns A string representing the day abbreviation in uppercase (e.g., "MON") + * @example + * ```ts + * const date = new Date(2025, 0, 15); // Wednesday + * const dayAbbr = formatDayAbbreviation(date); // "WED" + * ``` + */ +export function formatDayAbbreviation(date: Date): string { + return format(date, "EEE").toUpperCase(); +} + +/** + * Converts a Date object to just the day number (1-31) as a string. + * Uses date-fns for consistent formatting. + * + * @param date - The Date object to format + * @returns A string representing the day number (e.g., "15") + * @example + * ```ts + * const date = new Date(2025, 0, 15); + * const dayNumber = formatDayNumber(date); // "15" + * ``` + */ +export function formatDayNumber(date: Date): string { + return format(date, "d"); +} + +/** + * Converts a Date object to the format "MONDAY 1" (full day name + day number) in uppercase. + * Uses date-fns for consistent formatting. + * + * @param date - The Date object to format + * @returns A string in the format "MONDAY 1" (e.g., "WEDNESDAY 15") + * @example + * ```ts + * const date = new Date(2025, 0, 15); // Wednesday + * const formatted = formatDayNameAndNumber(date); // "WEDNESDAY 15" + * ``` + */ +export function formatDayNameAndNumber(date: Date): string { + return format(date, "EEEE d").toUpperCase(); +} + +// ============================================================================ +// Local Timezone Strings to UTC Date Objects +// ============================================================================ + +/** + * Converts a string in the format "YYYY-MM-DD" (from ) to a Date object. + * The date string is interpreted as midnight in the local timezone. + * + * @param date - A string in "YYYY-MM-DD" format (e.g., "2025-01-15") + * @returns A Date object representing midnight on the specified date in local timezone + * @example + * ```ts + * const dateString = "2025-01-15"; + * const date = parseDateInputValue(dateString); // Date object for Jan 15, 2025 at 00:00:00 local time + * ``` + */ +export function parseDateInputValue(date: string): Date { + const [year, month, day] = date.split("-"); + return new Date(Number(year), Number(month) - 1, Number(day)); +} + +/** + * Converts a string in the format "HH:mm" (from ) to a Date object. + * Since only time is provided, the date is set to January 1, 1970 (epoch date). + * Use this when only the time portion matters. + * + * @param time - A string in "HH:mm" format (e.g., "14:30") + * @returns A Date object with the specified time on January 1, 1970 + * @example + * ```ts + * const timeString = "14:30"; + * const date = parseTimeInputValue(timeString); // Date object for Jan 1, 1970 at 14:30:00 + * ``` + */ +export function parseTimeInputValue(time: string): Date { + const [hour, minute] = time.split(":"); + return new Date(0, 0, 0, Number(hour), Number(minute)); +} \ No newline at end of file diff --git a/frontend/src/utils/string_helpers.ts b/frontend/src/helpers/stringUtils.ts similarity index 100% rename from frontend/src/utils/string_helpers.ts rename to frontend/src/helpers/stringUtils.ts diff --git a/frontend/src/helpers/verifyRole.ts b/frontend/src/helpers/verifyRole.ts new file mode 100644 index 00000000..039eafc0 --- /dev/null +++ b/frontend/src/helpers/verifyRole.ts @@ -0,0 +1,34 @@ +import { jwtVerify } from "jose"; + +export async function verifyRole(validRoles: string[]): Promise { + const token = localStorage.getItem("token") ?? ""; + try { + const secret = new TextEncoder().encode(process.env.REACT_APP_JWT_SECRET); + const { payload } = await jwtVerify(token, secret, { + algorithms: ["HS256"], + }); + if (!payload || !validRoles.includes(payload.role as string)) { + return false; + } + return true; + } catch (err) { + return false; + } +} + +export async function getParticipantId() { + const token = localStorage.getItem("token") ?? ""; + try { + const secret = new TextEncoder().encode(process.env.REACT_APP_JWT_SECRET); + const { payload } = await jwtVerify(token, secret, { + algorithms: ["HS256"], + }); + + if (!payload || !payload.pid) { + return null; + } + return Number(payload.pid); + } catch (err) { + return null; + } +} diff --git a/frontend/src/hooks/useChakraColor.tsx b/frontend/src/hooks/useChakraColor.tsx new file mode 100644 index 00000000..4faba8f5 --- /dev/null +++ b/frontend/src/hooks/useChakraColor.tsx @@ -0,0 +1,8 @@ +import { useToken } from "@chakra-ui/react"; + +const useChakraColor = (color: string) => { + const [resolvedColor] = useToken("colors", [color]); + return resolvedColor ?? color; +}; + +export default useChakraColor; \ No newline at end of file diff --git a/frontend/src/hooks/useLocalStorage.tsx b/frontend/src/hooks/useLocalStorage.tsx new file mode 100644 index 00000000..cc0e0dcd --- /dev/null +++ b/frontend/src/hooks/useLocalStorage.tsx @@ -0,0 +1,19 @@ +import { useState, useEffect } from "react"; + +// TODO: Apply this hook for all local storage operations in this project +export function useLocalStorage(key: string, initialValue: T) { + const [value, setValue] = useState(() => { + try { + const json = localStorage.getItem(key); + return json != null ? JSON.parse(json) : initialValue; + } catch { + return initialValue; + } + }); + + useEffect(() => { + localStorage.setItem(key, JSON.stringify(value)); + }, [key, value]); + + return [value, setValue] as const; +} diff --git a/frontend/src/hooks/useNotification.tsx b/frontend/src/hooks/useNotification.tsx new file mode 100644 index 00000000..be80fdad --- /dev/null +++ b/frontend/src/hooks/useNotification.tsx @@ -0,0 +1,20 @@ +import { useToast } from "@chakra-ui/react"; + +// TODO: Customize toast to match Figma design +// https://www.figma.com/design/Ts9QxCIXFe4l9h6GKOLOIq/Admin-Application?node-id=5530-38022&t=d0D0hBm1Lo6YUL70-4 +// Apply this hook for all successful create / update / delete operations in this project +export default function useNotification() { + const toast = useToast(); + + const sendNotification = (message: string) => { + toast({ + description: message, + status: "success", + position: "top", + duration: 3000, + variant: "left-accent", + }); + }; + + return { sendNotification }; +} diff --git a/frontend/src/index.css b/frontend/src/index.css index ecd3510d..dae3de01 100644 --- a/frontend/src/index.css +++ b/frontend/src/index.css @@ -2,4 +2,400 @@ box-sizing: border-box; margin: 0; padding: 0; -} \ No newline at end of file +} + +:root { + --border-color: #C5C8D8; + + --status-complete: #0D8312; + --status-assigned: #255B9A; + --status-excused: #B07D18; + --status-incomplete: #B21D2F; + + --status-complete-bg: #CDEECE; + --status-incomplete-bg: #F8D7DB; + --status-assigned-bg: #C5DCF8; + --status-excused-bg: #FFE5B2; + + --status-complete-text: #0D8312; + --status-assigned-text: #255B9A; + --status-excused-text: #B07D18; + --status-incomplete-text: #B21D2F; +} + +.rbc-calendar { + font-family: 'Nunito', sans-serif; + border-radius: 8px; + display: flex !important; + flex-direction: column !important; + flex: 1 !important; + height: 100% !important; + min-height: 0 !important; +} + +.rbc-toolbar { + display: none !important; +} + +.rbc-time-view { + border: none !important; + background-color: white; + display: flex !important; + flex-direction: column !important; + flex: 1 !important; + height: 100% !important; + min-height: 0 !important; +} + +.rbc-header { + background-color: white; + font-weight: 600; + border: none !important; +} + +.rbc-day-bg { + border: none !important; +} + +.rbc-time-header { + background-color: white; + flex-shrink: 0; + margin: 0 !important; + padding: 0 !important; + position: sticky !important; + top: 0 !important; + z-index: 10 !important; + border: none !important; +} + +.rbc-time-gutter .rbc-label { + font-family: "Nunito", sans-serif !important; + font-weight: 400 !important; + color: black !important; +} + +.rbc-time-gutter .rbc-time-column { + background-color: transparent !important; +} + +.rbc-events-container { + margin-right: 0 !important; +} + +.rbc-time-header-cell { + min-height: 80px !important; +} + +.rbc-events-container { + border-bottom: 1px solid var(--border-color); +} + + +.rbc-time-header .rbc-row:first-child .rbc-header { + min-height: 80px !important; +} + +.rbc-time-header .rbc-row:first-child .rbc-header:first-child { + border-left: none; +} + +.rbc-time-content { + border-right: 1px solid var(--border-color) !important; + border-top: none !important; +} + +.rbc-button-link { + display: flex !important; + align-items: center !important; + justify-content: center !important; + width: 100% !important; + height: 100% !important; + text-align: center !important; + padding: 0 !important; + margin: 0 !important; +} + +.css-1f58b5e { + display: flex !important; + align-items: center !important; + justify-content: center !important; + width: 100% !important; + height: 100% !important; +} + +.css-sjh3h1 { + display: flex !important; + align-items: center !important; + justify-content: center !important; +} + +.rbc-time-header-gutter { + background-color: white; + border-bottom: 1px solid var(--border-color); + flex-shrink: 0; + border: none !important; +} + +.rbc-allday-cell { + background-color: white; + border: none !important; + padding: 2px 0; + min-height: 24px; + display: flex; + flex-direction: column; + position: sticky !important; + top: 80px !important; + z-index: 9 !important; +} + +.rbc-row-segment { + border: none; +} + +.rbc-row-content { + padding: 2px 0; + min-height: 24px; +} + +.rbc-row-content:empty { + min-height: 0; + padding: 0; +} + +.rbc-row { + margin: 0 !important; +} + +.rbc-time-header .rbc-row.rbc-row-segment { + min-height: 24px !important; +} + +.rbc-time-content { + border: none; + overflow-y: auto !important; + overflow-x: hidden !important; + flex: 1 !important; + height: 0 !important; + min-height: 0 !important; + max-height: none !important; +} + +#react-big-calendar-container { + height: 100% !important; + min-height: 0 !important; + overflow: hidden !important; +} + +#react-big-calendar-container .rbc-calendar { + height: 100% !important; + min-height: 0 !important; +} + +.rbc-time-header-content { + border-bottom: 1px solid var(--border-color) !important; + border-left: none !important; + position: sticky !important; + + z-index: 9 !important; + background-color: white !important; +} + +.rbc-time-column { + height: auto !important; + overflow: visible !important; +} + +.rbc-time-column:first-child { + border-left: none; +} + +.rbc-time-view .rbc-time-gutter { + border: none !important; + position: sticky !important; + left: 0 !important; + z-index: 8 !important; +} + +.rbc-time-view .rbc-day-slot { + border: none !important; +} + +.rbc-time-view .rbc-time-gutter .rbc-time-slot { + font-size: 12px; + text-align: right; + padding-right: 8px; +} + +.rbc-events-container { + border-left: 1px solid var(--border-color); +} + +.rbc-timeslot-group, +.rbc-time-slot, +.rbc-day-slot { + border-top: none !important; + border-bottom: none !important; +} + +.rbc-current-time-indicator { + display: none !important; +} + +.rbc-today { + background-color: transparent !important; +} + +.rbc-header [style*="background"] [style*="color: white"] { + color: white !important; +} + +.rbc-header [style*="background: rgb(237, 137, 54)"] *, +.rbc-header [style*="background: rgb(245, 130, 32)"] *, +.rbc-header [style*="background: orange"] * { + color: white !important; +} + +.rbc-event { + border-radius: 6px !important; + border: none !important; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); + font-size: 12px; + font-weight: 600; + padding: 2px 6px !important; +} + +.rbc-event-label { + font-size: 10px; + font-weight: 400; +} + +.rbc-event-allday, +.rbc-event.rbc-event-allday { + height: auto !important; + min-height: 20px !important; + margin: 1px 0 !important; + padding: 2px 6px !important; + border-radius: 4px !important; + font-size: 11px !important; + font-weight: 600 !important; + white-space: normal !important; + overflow: visible !important; + opacity: 1 !important; + visibility: visible !important; + position: relative !important; + z-index: 1 !important; +} + +.rbc-event.status-complete, +.rbc-event-allday.status-complete { + background-color: var(--status-complete-bg) !important; + color: var(--status-complete-text) !important; + border-left: 4px solid var(--status-complete) !important; +} + +.rbc-event.status-assigned, +.rbc-event-allday.status-assigned { + background-color: var(--status-assigned-bg) !important; + color: var(--status-assigned-text) !important; + border-left: 4px solid var(--status-assigned) !important; +} + +.rbc-event.status-incomplete, +.rbc-event-allday.status-incomplete { + background-color: var(--status-incomplete-bg) !important; + color: var(--status-incomplete-text) !important; + border-left: 4px solid var(--status-incomplete) !important; +} + +.rbc-event.status-excused, +.rbc-event-allday.status-excused { + background-color: var(--status-excused-bg) !important; + color: var(--status-excused-text) !important; + border-left: 4px solid var(--status-excused) !important; +} + +.rbc-event[data-allday="true"].status-complete { + background-color: var(--status-complete) !important; + color: white !important; +} + +.rbc-event[data-allday="true"].status-assigned { + background-color: var(--status-assigned) !important; + color: white !important; +} + +.rbc-event[data-allday="true"].status-incomplete { + background-color: var(--status-incomplete) !important; + color: white !important; +} + +.rbc-event[data-allday="true"].status-excused { + background-color: var(--status-excused) !important; + color: white !important; +} + +.rbc-event-content, +.rbc-event .chakra-text { + white-space: normal !important; + overflow: visible !important; + text-overflow: none !important; + line-height: 1.2 !important; +} + +.rbc-row-segment, +.rbc-row-content .rbc-row-segment { + height: auto !important; + min-height: 22px !important; + max-height: none !important; + display: flex; + align-items: flex-start; +} + +.rbc-row-content .rbc-row { + height: auto !important; + min-height: 22px !important; + margin: 1px 0 !important; +} + +.rbc-event.rbc-selected { + box-shadow: 0 0 0 2px #e53e3e !important; + opacity: 0.9; +} + +.rbc-time-content::-webkit-scrollbar { + width: 8px; +} + +.rbc-time-content::-webkit-scrollbar-track { + background-color: var(--bg-light); +} + +.rbc-time-content::-webkit-scrollbar-thumb { + background-color: #cbd5e0; + border-radius: 4px; +} + +.rbc-time-content::-webkit-scrollbar-thumb:hover { + background-color: #a0aec0; +} + +@media (max-width: 768px) { + .rbc-toolbar { + flex-direction: column; + gap: 12px; + } + + .rbc-toolbar-label { + order: -1; + margin-bottom: 8px; + } + + .rbc-btn-group { + justify-content: center; + } + + .rbc-event { + font-size: 10px; + padding: 1px 4px !important; + } +} \ No newline at end of file diff --git a/frontend/src/participant/ParticipantContext.tsx b/frontend/src/participant/ParticipantContext.tsx new file mode 100644 index 00000000..3ca51b58 --- /dev/null +++ b/frontend/src/participant/ParticipantContext.tsx @@ -0,0 +1,41 @@ +import React, { createContext, ReactNode, useState } from "react"; + +type ParticipantContextType = { + pid: number | null; + setPid: (pid: number) => void; + room: number | null; + setRoom: (room: number) => void; + balance: number | null; + setBalance: (balance: number) => void; +}; + +export const ParticipantContext = createContext( + null +); + +interface ParticipantProviderProps { + children: ReactNode; +} + +export const ParticipantProvider: React.FC = ({ + children, +}) => { + const [pid, setPid] = useState(null); + const [room, setRoom] = useState(null); + const [balance, setBalance] = useState(null); + + return ( + + {children} + + ); +}; diff --git a/frontend/src/participant/ParticipantMenu.tsx b/frontend/src/participant/ParticipantMenu.tsx new file mode 100644 index 00000000..7a36c5be --- /dev/null +++ b/frontend/src/participant/ParticipantMenu.tsx @@ -0,0 +1,166 @@ +import { Flex, Text, Image, Tab, TabList, Tabs } from "@chakra-ui/react"; +import MenuIcon from "@mui/icons-material/Menu"; +import CloseIcon from "@mui/icons-material/Close"; +import React, { useContext, useState } from "react"; +import { useNavigate } from "react-router-dom"; +import { ParticipantContext } from "./ParticipantContext"; +import * as ROUTES from "../constants/routes"; +import ErrorScreen from "../ui/screens/ErrorScreen"; + +type Page = { + label: string; + route: string; +}; + +type ExpandedParticipantMenuProps = { + room: number; + currentPageIndex: number; + pages: Page[]; + collapseMenu: () => void; +}; + +function ExpandedParticipantMenu({ + room, + currentPageIndex, + pages, + collapseMenu, +}: ExpandedParticipantMenuProps) { + const navigate = useNavigate(); + + const handleSignOut = () => { + localStorage.removeItem("token"); + return navigate(ROUTES.PARTICIPANTS_LOGIN_PAGE); + }; + + return ( + + + Room {room} + + + + {pages.map((page) => ( + { + navigate(page.route); + collapseMenu(); + }} + _selected={{ + fontWeight: 700, + color: "neutral.0", + bg: "secondary.700", + }} + > + {page.label} + + ))} + + + + handleSignOut()} + > + Sign Out + + + ); +} + +export default function ParticipantMenu() { + const pages = [ + { label: "Home", route: ROUTES.PARTICIPANTS_HOME_PAGE }, + { label: "Schedule", route: ROUTES.PARTICIPANTS_SCHEDULE_PAGE }, + { label: "Announcements", route: ROUTES.PARTICIPANTS_ANNOUNCEMENTS_PAGE }, + { label: "Progress", route: ROUTES.PARTICIPANTS_PROGRESS_PAGE }, + ]; + + const [expandMenu, setExpandMenu] = useState(false); + const currentPageIndex = pages.findIndex( + (page) => page.route === window.location.pathname + ); + + const participant = useContext(ParticipantContext); + const room = participant?.room; + const balance = participant?.balance; + + const error = !participant || !room || !balance; + if (error) { + return ( + + ); + } + + return ( + + {!expandMenu && ( + setExpandMenu(true)} cursor="pointer"> + + + )} + {expandMenu && ( + <> + setExpandMenu(false)} cursor="pointer"> + + + setExpandMenu(false)} + /> + + )} + {pages[currentPageIndex].label} + + $ + {balance} + + + ); +} diff --git a/frontend/src/participant/ParticipantRoute.tsx b/frontend/src/participant/ParticipantRoute.tsx new file mode 100644 index 00000000..360430a8 --- /dev/null +++ b/frontend/src/participant/ParticipantRoute.tsx @@ -0,0 +1,94 @@ +import React, { useEffect, useState, useContext } from "react"; +import { Navigate } from "react-router-dom"; +import { Flex } from "@chakra-ui/react"; +import { useLazyQuery } from "@apollo/client"; +import { verifyRole } from "../helpers/verifyRole"; +import { PARTICIPANT } from "../constants/roles"; +import LoadingScreen from "../ui/screens/LoadingScreen"; +import { PARTICIPANTS_LOGIN_PAGE } from "../constants/routes"; +import { ParticipantContext } from "./ParticipantContext"; +import { GET_PARTICIPANT_BY_PID } from "../gql/participantRequests"; +import ErrorScreen from "../ui/screens/ErrorScreen"; +import ParticipantMenu from "./ParticipantMenu"; + +type ParticipantRouteProps = { + children: React.ReactElement; +}; + +export default function ParticipantRoute({ children }: ParticipantRouteProps) { + const participantContext = useContext(ParticipantContext); + const [authorized, setAuthorized] = useState(false); + const [loading, setLoading] = useState(true); + const [error, setError] = useState(""); + + const [getParticipantByPid] = useLazyQuery(GET_PARTICIPANT_BY_PID, { + onCompleted: (data) => { + if (!data || !data.getParticipantByPid || !participantContext) { + setError("error fetching participant for context"); + return; + } + participantContext.setRoom(data.getParticipantByPid.room); + participantContext.setBalance(data.getParticipantByPid.balance); + }, + onError: (err: Error) => { + console.error(err.message); + }, + }); + + useEffect(() => { + const authorize = async () => { + const isParticipant = await verifyRole([PARTICIPANT]); + if (isParticipant) { + setAuthorized(true); + } + setLoading(false); + }; + authorize(); + }, []); + + useEffect(() => { + const fetchParticipantData = async () => { + if (authorized && participantContext) { + setLoading(true); + getParticipantByPid({ variables: { pid: participantContext.pid } }); + setLoading(false); + } + }; + fetchParticipantData(); + }, [authorized, participantContext]); + + if (loading) { + return ; + } + + if (error) { + return ; + } + + if (!authorized) { + return ; + } + + return ( + + + + + {children} + + + + ); +} diff --git a/frontend/src/participant/common/Badge.tsx b/frontend/src/participant/common/Badge.tsx deleted file mode 100644 index 04eea570..00000000 --- a/frontend/src/participant/common/Badge.tsx +++ /dev/null @@ -1,193 +0,0 @@ -import React from "react"; -import { Box, Image } from "@chakra-ui/react"; - -export type BadgeRarity = "green" | "bronze" | "silver" | "gold" | "diamond"; -export type BadgeSize = "small" | "medium" | "large"; - -interface BadgeProps { - icon: string; // icon name (e.g., "diamond", "five_star", "tool") - rarity: BadgeRarity; - size?: BadgeSize | number | string; // this takes a preset, number (px), or CSS string - percentComplete?: number; // 0-100 - customColors?: { - fill?: string; - shadow?: string; - strokeColor?: string; - }; -} - -const Badge: React.FC = ({ - icon, - rarity, - size = "medium", - percentComplete = 100, - customColors, -}) => { - // Preset sizes - const presetSizes = { - small: { - container: "40px", - icon: "24px", - shadowBlur: "8px", - shadowOffset: "2px", - }, - medium: { - container: "60px", - icon: "36px", - shadowBlur: "12px", - shadowOffset: "3px", - }, - large: { - container: "80px", - icon: "48px", - shadowBlur: "16px", - shadowOffset: "4px", - }, - }; - - // Function to get size configuration based on input - const getSizeConfig = (sizeInput: BadgeSize | number | string) => { - if ( - typeof sizeInput === "string" && - ["small", "medium", "large"].includes(sizeInput) - ) { - return presetSizes[sizeInput as BadgeSize]; - } - - if (typeof sizeInput === "number") { - return { - container: `${sizeInput}px`, - icon: `${Math.round(sizeInput * 0.6)}px`, - shadowBlur: `${Math.round(sizeInput * 0.2)}px`, - shadowOffset: `${Math.round(sizeInput * 0.05)}px`, - }; - } - - // If it's a CSS string - if (typeof sizeInput === "string") { - return { - container: sizeInput, - icon: `calc(${sizeInput} * 0.6)`, - shadowBlur: `calc(${sizeInput} * 0.2)`, - shadowOffset: `calc(${sizeInput} * 0.05)`, - }; - } - - return presetSizes.medium; - }; - - // Rarity color configurations based on image - const rarityConfig = { - green: { - fill: "linear-gradient(135deg, #20C125 0%, #008905 100%)", - shadow: "#BAFFBD", - strokeColor: "#008905", - }, - bronze: { - fill: "linear-gradient(135deg, #E54E29 0%, #BB2406 100%)", - shadow: "#FFD5C6", - strokeColor: "#BB2406", - }, - silver: { - fill: "linear-gradient(135deg, #BDBEC2 0%, #95969B 100%)", - shadow: "#F4F4FC", - strokeColor: "#95969B", - }, - gold: { - fill: "linear-gradient(135deg, #EEA80A 0%, #E88108 100%)", - shadow: "#FFFADA", - strokeColor: "#E88108", - }, - diamond: { - fill: "linear-gradient(135deg, #52C2E0 0%, #048BC3 100%)", - shadow: "#C9F2FF", - strokeColor: "#048BC3", - }, - }; - - const config = getSizeConfig(size); - const colors = customColors || rarityConfig[rarity]; - - const overlayOpacity = Math.max( - 0, - Math.min(1, (100 - percentComplete) / 100) - ); - - return ( - - - {`${rarity} - - {percentComplete < 100 && ( - - )} - - {percentComplete > 0 && percentComplete < 100 && ( - - )} - - - {/* Optional progress ring for partial completion */} - {percentComplete >= 0 && percentComplete < 100 && ( - - )} - - ); -}; - -export default Badge; diff --git a/frontend/src/participant/common/GreenButton.tsx b/frontend/src/participant/common/GreenButton.tsx deleted file mode 100644 index 4f990329..00000000 --- a/frontend/src/participant/common/GreenButton.tsx +++ /dev/null @@ -1,46 +0,0 @@ -import React from "react"; -import { Button, Flex, Text } from "@chakra-ui/react"; -import { ButtonProps } from "../../types/component"; - -type GreenButtonProps = ButtonProps & { - icon?: JSX.Element; -}; - -export default function GreenButton({ - text, - action, - is_active, - icon, -}: GreenButtonProps) { - return ( - - ); -} diff --git a/frontend/src/participant/common/Icon.tsx b/frontend/src/participant/common/Icon.tsx deleted file mode 100644 index d7c2977a..00000000 --- a/frontend/src/participant/common/Icon.tsx +++ /dev/null @@ -1,13 +0,0 @@ -import React from "react"; - -type IconProps = { - icon: string; - width: string; - height: string; -}; - -const Icon = ({ icon, width, height }: IconProps) => ( - icon -); - -export default Icon; diff --git a/frontend/src/participant/common/PageHeader.tsx b/frontend/src/participant/common/PageHeader.tsx deleted file mode 100644 index 38b24344..00000000 --- a/frontend/src/participant/common/PageHeader.tsx +++ /dev/null @@ -1,87 +0,0 @@ -import { Flex, Text, Image, Spinner } from "@chakra-ui/react"; -import MenuIcon from "@mui/icons-material/Menu"; -import CloseIcon from "@mui/icons-material/Close"; -import React, { useContext, useState } from "react"; -import { useQuery } from "@apollo/client"; -import TaskBar from "./TaskBar"; -import { ParticipantContext } from "./ParticipantContext"; -import { GET_MARILLAC_BUCKS } from "../../gql/queries"; -import * as ROUTES from "../../constants/routes"; - -function ParticipantPageHeader() { - const pages = [ - { label: "Home", route: ROUTES.PARTICIPANTS_HOME_PAGE }, - { label: "Schedule", route: ROUTES.PARTICIPANTS_SCHEDULE_PAGE }, - { label: "Announcements", route: ROUTES.PARTICIPANTS_ANNOUNCEMENTS_PAGE }, - { label: "Progress", route: ROUTES.PARTICIPANTS_PROGRESS_PAGE }, - ]; - - const currentPageIndex = pages.findIndex( - (page) => page.route === window.location.pathname - ); - - const participant = useContext(ParticipantContext); - const [showTaskBar, setShowTaskBar] = useState(false); - - const participantId = participant?.id ?? ""; - - const { loading, error, data } = useQuery(GET_MARILLAC_BUCKS, { - variables: { participantId }, - skip: !participant, - }); - - if (error) { - return Something went wrong.; - } - - if (!participant || loading) { - return ; - } - - return ( - - {!showTaskBar && ( - setShowTaskBar(true)} cursor="pointer"> - - - )} - {showTaskBar && ( - <> - setShowTaskBar(false)} cursor="pointer"> - - - setShowTaskBar(false)} - /> - - )} - {pages[currentPageIndex].label} - - $ - - {data.getParticipantById.marillac_bucks} - - - - ); -} - -export default ParticipantPageHeader; diff --git a/frontend/src/participant/common/ParticipantContext.tsx b/frontend/src/participant/common/ParticipantContext.tsx deleted file mode 100644 index a82e9713..00000000 --- a/frontend/src/participant/common/ParticipantContext.tsx +++ /dev/null @@ -1,9 +0,0 @@ -import { createContext } from "react"; - -type ParticipantContextType = { - id: number; -}; - -export const ParticipantContext = createContext< - ParticipantContextType | undefined ->(undefined); diff --git a/frontend/src/participant/common/ParticipantRoute.tsx b/frontend/src/participant/common/ParticipantRoute.tsx deleted file mode 100644 index 75997946..00000000 --- a/frontend/src/participant/common/ParticipantRoute.tsx +++ /dev/null @@ -1,68 +0,0 @@ -import React, { useEffect, useState } from "react"; -import { Navigate } from "react-router-dom"; -import { Flex } from "@chakra-ui/react"; -import * as ROUTES from "../../constants/routes"; -import { isParticipant, getParticipantId } from "../../utils/checkRole"; -import Loading from "../../Loading"; -import { ParticipantContext } from "./ParticipantContext"; -import ParticipantPageHeader from "./PageHeader"; - -type ParticipantRouteProps = { - children: React.ReactElement; -}; - -export default function ParticipantRoute({ children }: ParticipantRouteProps) { - const [authorized, setAuthorized] = useState(false); - const [participantId, setParticipantId] = useState(null); - const [loading, setLoading] = useState(true); - - useEffect(() => { - const checkRole = async () => { - const user = await isParticipant(); - if (user) { - setAuthorized(true); - } - const id = await getParticipantId(); - setParticipantId(id); - setLoading(false); - }; - checkRole(); - }, []); - - if (loading) { - return ; - } - - if (!authorized) { - return ; - } - - if (!participantId) { - return Something went wrong. ID # is missing.; - } - - return ( - - - - - - {children} - - - - - ); -} diff --git a/frontend/src/participant/common/TaskBar.tsx b/frontend/src/participant/common/TaskBar.tsx deleted file mode 100644 index 5fdb3ac6..00000000 --- a/frontend/src/participant/common/TaskBar.tsx +++ /dev/null @@ -1,94 +0,0 @@ -import { Flex, Tab, TabList, Tabs, Text } from "@chakra-ui/react"; -import React from "react"; -import { useNavigate } from "react-router-dom"; -import * as ROUTES from "../../constants/routes"; - -type Page = { - label: string; - route: string; -}; - -type TaskBarProps = { - participantId: number | undefined; - currentPageIndex: number; - pages: Page[]; - closeTaskBar: () => void; -}; - -export default function TaskBar({ - participantId, - currentPageIndex, - pages, - closeTaskBar, -}: TaskBarProps) { - const navigate = useNavigate(); - - const handleSignOut = () => { - localStorage.removeItem("participant_token"); - return navigate(ROUTES.PARTICIPANTS_LOGIN_PAGE); - }; - - return ( - - - ID #{participantId} - - - - {pages.map((page) => ( - { - navigate(page.route); - closeTaskBar(); - }} - _selected={{ - fontWeight: 700, - color: "neutral.0", - bg: "secondary.700", - }} - > - {page.label} - - ))} - - - - handleSignOut()} - > - Sign Out - - - ); -} diff --git a/frontend/src/participant/common/WidgetContainer.tsx b/frontend/src/participant/common/WidgetContainer.tsx deleted file mode 100644 index 8fcaec94..00000000 --- a/frontend/src/participant/common/WidgetContainer.tsx +++ /dev/null @@ -1,23 +0,0 @@ -import { Flex } from "@chakra-ui/react"; -import React from "react"; - -type WidgetContainerProps = { - children: React.ReactElement; -}; - -export default function WidgetContainer({ children }: WidgetContainerProps) { - return ( - - {children} - - ); -} diff --git a/frontend/src/participant/icons/announcements/greenpin.svg b/frontend/src/participant/icons/announcements/greenpin.svg deleted file mode 100644 index c2da3eab..00000000 --- a/frontend/src/participant/icons/announcements/greenpin.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/frontend/src/participant/icons/announcements/group.svg b/frontend/src/participant/icons/announcements/group.svg deleted file mode 100644 index 4bf6eb1c..00000000 --- a/frontend/src/participant/icons/announcements/group.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/frontend/src/participant/icons/announcements/important.svg b/frontend/src/participant/icons/announcements/important.svg deleted file mode 100644 index 28fd4155..00000000 --- a/frontend/src/participant/icons/announcements/important.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/frontend/src/participant/icons/announcements/notification.svg b/frontend/src/participant/icons/announcements/notification.svg deleted file mode 100644 index 3d3a6ae1..00000000 --- a/frontend/src/participant/icons/announcements/notification.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/frontend/src/participant/icons/announcements/orangepin.svg b/frontend/src/participant/icons/announcements/orangepin.svg deleted file mode 100644 index dcfeb555..00000000 --- a/frontend/src/participant/icons/announcements/orangepin.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/frontend/src/participant/icons/announcements/profile.svg b/frontend/src/participant/icons/announcements/profile.svg deleted file mode 100644 index 071f8713..00000000 --- a/frontend/src/participant/icons/announcements/profile.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/frontend/src/participant/icons/announcements/unread.svg b/frontend/src/participant/icons/announcements/unread.svg deleted file mode 100644 index 3e865625..00000000 --- a/frontend/src/participant/icons/announcements/unread.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/frontend/src/participant/icons/misc/comment b/frontend/src/participant/icons/misc/comment deleted file mode 100644 index bcff133c..00000000 --- a/frontend/src/participant/icons/misc/comment +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/frontend/src/participant/icons/misc/comment.svg b/frontend/src/participant/icons/misc/comment.svg deleted file mode 100644 index bcff133c..00000000 --- a/frontend/src/participant/icons/misc/comment.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/frontend/src/participant/icons/status/assigned.svg b/frontend/src/participant/icons/status/assigned.svg deleted file mode 100644 index 3cede24b..00000000 --- a/frontend/src/participant/icons/status/assigned.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/frontend/src/participant/icons/status/complete.svg b/frontend/src/participant/icons/status/complete.svg deleted file mode 100644 index 1e63791e..00000000 --- a/frontend/src/participant/icons/status/complete.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/frontend/src/participant/icons/status/excused.svg b/frontend/src/participant/icons/status/excused.svg deleted file mode 100644 index 67912421..00000000 --- a/frontend/src/participant/icons/status/excused.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/frontend/src/participant/icons/status/incomplete.svg b/frontend/src/participant/icons/status/incomplete.svg deleted file mode 100644 index cc9b3b4d..00000000 --- a/frontend/src/participant/icons/status/incomplete.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/frontend/src/participant/pages/announcements/Main.tsx b/frontend/src/participant/pages/announcements/Main.tsx index 9fe09259..291fda1d 100644 --- a/frontend/src/participant/pages/announcements/Main.tsx +++ b/frontend/src/participant/pages/announcements/Main.tsx @@ -1,150 +1,152 @@ -import React, { useContext, useState } from "react"; -import { Flex, Text } from "@chakra-ui/react"; -import { useQuery } from "@apollo/client"; -import ParticipantAnnouncementCard from "./components/ParticipantAnnouncementCard"; -import { - GET_ANNOUNCEMENTS_BY_PARTICIPANT_ID, - GET_PARTICIPANT_FILTERED_ANNOUNCEMENTS, -} from "../../../gql/queries"; -import { ParticipantContext } from "../../common/ParticipantContext"; -import { Priority } from "../../../types/AnnouncementTypes"; -import GreenButton from "../../common/GreenButton"; -import AnnouncementsExpandedView from "./components/AnnouncementsExpandedView"; - -const FILTER_LABELS = ["ALL", "UNREAD", "PINNED", "IMPORTANT"] as const; - -export default function ParticipantsAnnouncementsPage() { - const participant = useContext(ParticipantContext); - const participantId = participant?.id; - - const [expandedView, setExpandedView] = useState(false); - const [selected, setSelected] = useState({ - uaid: -1, - allRooms: false, - message: "", - importance: -1, - read: false, - pinned: false, - date: "", - }); - - const [filter, setFilter] = useState(0); - const isAll = filter === 0; - - const { - data: allData, - loading: allLoading, - error: allError, - } = useQuery(GET_ANNOUNCEMENTS_BY_PARTICIPANT_ID, { - variables: { participant_id: participantId }, - skip: !participantId || !isAll, - fetchPolicy: "network-only", - nextFetchPolicy: "cache-first", - notifyOnNetworkStatusChange: true, - }); - - const { - data: filteredData, - loading: filteredLoading, - error: filteredError, - } = useQuery(GET_PARTICIPANT_FILTERED_ANNOUNCEMENTS, { - variables: { - participantId, - filter: FILTER_LABELS[filter], - }, - skip: !participantId || isAll, - fetchPolicy: "network-only", - nextFetchPolicy: "cache-first", - notifyOnNetworkStatusChange: true, - }); - - const loading = isAll ? allLoading : filteredLoading; - const error = isAll ? allError : filteredError; - const data = isAll - ? allData?.getAnnouncementsByParticipantId ?? [] - : filteredData?.getParticipantAnnouncements ?? []; - - if (loading) return Loading announcements…; - if (error) return Error loading announcements.; - - if (expandedView && selected) { - return ; - } - - return ( - <> - - setFilter(0)} - is_active={filter === 0} - /> - setFilter(1)} - is_active={filter === 1} - /> - setFilter(2)} - is_active={filter === 2} - /> - setFilter(3)} - is_active={filter === 3} - /> - - - {!data || data.length === 0 ? ( - No announcements. - ) : ( - <> - - Most Recent - - {data.map((a: any, i: number) => { - const { - announcement_id: uaid, - read, - pinned, - announcement: { message, priority, creation_date: date }, - } = a; - - const allRooms = false; - const importance = Object.values(Priority).indexOf(priority); - - return ( - { - setSelected({ - uaid, - allRooms, - message, - importance, - read, - pinned, - date, - }); - setExpandedView(true); - }} - > - - - ); - })} - - )} - - ); -} +export {}; +// TODO: Refactor this component +// import React, { useContext, useState } from "react"; +// import { Flex, Text } from "@chakra-ui/react"; +// import { useQuery } from "@apollo/client"; +// import ParticipantAnnouncementCard from "./components/ParticipantAnnouncementCard"; +// import { +// GET_ANNOUNCEMENTS_BY_PARTICIPANT_ID, +// GET_PARTICIPANT_FILTERED_ANNOUNCEMENTS, +// } from "../../../gql/queries"; +// import { ParticipantContext } from "../../common/ParticipantContext"; +// import { Priority } from "../../../types/AnnouncementTypes"; +// import GreenButton from "../../common/GreenButton"; +// import AnnouncementsExpandedView from "./components/AnnouncementsExpandedView"; +// +// const FILTER_LABELS = ["ALL", "UNREAD", "PINNED", "IMPORTANT"] as const; +// +// export default function ParticipantsAnnouncementsPage() { +// const participant = useContext(ParticipantContext); +// const participantId = participant?.id; +// +// const [expandedView, setExpandedView] = useState(false); +// const [selected, setSelected] = useState({ +// uaid: -1, +// allRooms: false, +// message: "", +// importance: -1, +// read: false, +// pinned: false, +// date: "", +// }); +// +// const [filter, setFilter] = useState(0); +// const isAll = filter === 0; +// +// const { +// data: allData, +// loading: allLoading, +// error: allError, +// } = useQuery(GET_ANNOUNCEMENTS_BY_PARTICIPANT_ID, { +// variables: { participant_id: participantId }, +// skip: !participantId || !isAll, +// fetchPolicy: "network-only", +// nextFetchPolicy: "cache-first", +// notifyOnNetworkStatusChange: true, +// }); +// +// const { +// data: filteredData, +// loading: filteredLoading, +// error: filteredError, +// } = useQuery(GET_PARTICIPANT_FILTERED_ANNOUNCEMENTS, { +// variables: { +// participantId, +// filter: FILTER_LABELS[filter], +// }, +// skip: !participantId || isAll, +// fetchPolicy: "network-only", +// nextFetchPolicy: "cache-first", +// notifyOnNetworkStatusChange: true, +// }); +// +// const loading = isAll ? allLoading : filteredLoading; +// const error = isAll ? allError : filteredError; +// const data = isAll +// ? allData?.getAnnouncementsByParticipantId ?? [] +// : filteredData?.getParticipantAnnouncements ?? []; +// +// if (loading) return Loading announcements…; +// if (error) return Error loading announcements.; +// +// if (expandedView && selected) { +// return ; +// } +// +// return ( +// <> +// +// setFilter(0)} +// is_active={filter === 0} +// /> +// setFilter(1)} +// is_active={filter === 1} +// /> +// setFilter(2)} +// is_active={filter === 2} +// /> +// setFilter(3)} +// is_active={filter === 3} +// /> +// +// +// {!data || data.length === 0 ? ( +// No announcements. +// ) : ( +// <> +// +// Most Recent +// +// {data.map((a: any, i: number) => { +// const { +// announcement_id: uaid, +// read, +// pinned, +// announcement: { message, priority, creation_date: date }, +// } = a; +// +// const allRooms = false; +// const importance = Object.values(Priority).indexOf(priority); +// +// return ( +// { +// setSelected({ +// uaid, +// allRooms, +// message, +// importance, +// read, +// pinned, +// date, +// }); +// setExpandedView(true); +// }} +// > +// +// +// ); +// })} +// +// )} +// +// ); +// } diff --git a/frontend/src/participant/pages/announcements/components/AnnouncementsExpandedView.tsx b/frontend/src/participant/pages/announcements/components/AnnouncementsExpandedView.tsx index 8281dcce..b83470e4 100644 --- a/frontend/src/participant/pages/announcements/components/AnnouncementsExpandedView.tsx +++ b/frontend/src/participant/pages/announcements/components/AnnouncementsExpandedView.tsx @@ -1,194 +1,196 @@ -import { Divider, Flex, Text } from "@chakra-ui/react"; -import React, { useContext, useEffect, useRef, useState } from "react"; -import { useMutation } from "@apollo/client"; -import { displayDate2 } from "../../../../utils/formatDateTime"; -import Icon from "../../../common/Icon"; -import important from "../../../icons/announcements/important.svg"; -import orangepin from "../../../icons/announcements/orangepin.svg"; -import greenpin from "../../../icons/announcements/greenpin.svg"; -import unread from "../../../icons/announcements/unread.svg"; -import GreenButton from "../../../common/GreenButton"; -import { UPDATE_PIN_READ_ANNOUNCEMENTS } from "../../../../gql/mutations"; -import { ParticipantContext } from "../../../common/ParticipantContext"; - -type AnnouncementInfo = { - uaid: number; - allRooms: boolean; - message: string; - importance: number; - read: boolean; - pinned: boolean; - date: string; -}; - -type AnnouncementsExpandedViewProps = { - announcement: AnnouncementInfo; -}; - -export default function AnnouncementsExpandedView({ - announcement, -}: AnnouncementsExpandedViewProps) { - const participant = useContext(ParticipantContext); - const participantId = participant?.id; - - const [pinned, setPinned] = useState(announcement.pinned); - const prevPinnedRef = useRef(announcement.pinned); - const [updating, setUpdating] = useState(false); - const [error, setError] = useState(""); - - const [updatePinRead] = useMutation(UPDATE_PIN_READ_ANNOUNCEMENTS); - - useEffect(() => { - let active = true; - const cleanup = () => { - active = false; - }; - - if (!participantId || pinned === prevPinnedRef.current) { - return cleanup; - } - - setUpdating(true); - (async () => { - try { - await updatePinRead({ - variables: { - announcement_id: announcement.uaid, - participant_id: participantId, - pinned, - }, - }); - - if (active) { - prevPinnedRef.current = pinned; - } - } catch (err) { - if (active) setPinned(prevPinnedRef.current); - } finally { - if (active) setUpdating(false); - } - })(); - - return cleanup; - }, [announcement.uaid, participantId, pinned, updatePinRead]); - - useEffect(() => { - let active = true; - const cleanup = () => { - active = false; - }; - - if (!participantId || announcement.read) { - return cleanup; - } - - setUpdating(true); - (async () => { - try { - await updatePinRead({ - variables: { - announcement_id: announcement.uaid, - participant_id: participantId, - read: true, - }, - }); - } catch (err) { - if (active) setError("Unable to mark as read"); - } finally { - if (active) setUpdating(false); - } - })(); - - return cleanup; - }, []); - - const handleMarkAsUnread = async () => { - if (!participantId || updating) return; - try { - setUpdating(true); - await updatePinRead({ - variables: { - announcement_id: announcement.uaid, - participant_id: participantId, - read: false, - }, - }); - } catch (err) { - setError("Unable to mark as unread"); - } finally { - setUpdating(false); - window.location.reload(); - } - }; - - return ( - <> - - - {announcement.allRooms ? "Admin To All Rooms" : "Admin To Your Room"} - - window.location.reload()} - textStyle="mobile.b1" - textDecoration="underline" - cursor="pointer" - _hover={{ - textDecoration: "none", - }} - > - Back to Announcements - - - - - - {announcement.importance !== 0 && ( - - - - Priority - - - )} - - {pinned && ( - - - - Pinned - - - )} - - - {displayDate2(new Date(announcement.date))} - - - - - - {announcement.message} - - - handleMarkAsUnread()} - icon={} - /> - setPinned(!pinned)} - icon={ - - } - /> - - - ); -} +export {}; +// TODO: Refactor this component +// import { Divider, Flex, Text } from "@chakra-ui/react"; +// import React, { useContext, useEffect, useRef, useState } from "react"; +// import { useMutation } from "@apollo/client"; +// import { displayDate2 } from "../../../../utils/formatDateTime"; +// import Icon from "../../../common/Icon"; +// import important from "../../../icons/announcements/important.svg"; +// import orangepin from "../../../icons/announcements/orangepin.svg"; +// import greenpin from "../../../icons/announcements/greenpin.svg"; +// import unread from "../../../icons/announcements/unread.svg"; +// import GreenButton from "../../../common/GreenButton"; +// import { UPDATE_PIN_READ_ANNOUNCEMENTS } from "../../../../gql/mutations"; +// import { ParticipantContext } from "../../../common/ParticipantContext"; +// +// type AnnouncementInfo = { +// uaid: number; +// allRooms: boolean; +// message: string; +// importance: number; +// read: boolean; +// pinned: boolean; +// date: string; +// }; +// +// type AnnouncementsExpandedViewProps = { +// announcement: AnnouncementInfo; +// }; +// +// export default function AnnouncementsExpandedView({ +// announcement, +// }: AnnouncementsExpandedViewProps) { +// const participant = useContext(ParticipantContext); +// const participantId = participant?.id; +// +// const [pinned, setPinned] = useState(announcement.pinned); +// const prevPinnedRef = useRef(announcement.pinned); +// const [updating, setUpdating] = useState(false); +// const [error, setError] = useState(""); +// +// const [updatePinRead] = useMutation(UPDATE_PIN_READ_ANNOUNCEMENTS); +// +// useEffect(() => { +// let active = true; +// const cleanup = () => { +// active = false; +// }; +// +// if (!participantId || pinned === prevPinnedRef.current) { +// return cleanup; +// } +// +// setUpdating(true); +// (async () => { +// try { +// await updatePinRead({ +// variables: { +// announcement_id: announcement.uaid, +// participant_id: participantId, +// pinned, +// }, +// }); +// +// if (active) { +// prevPinnedRef.current = pinned; +// } +// } catch (err) { +// if (active) setPinned(prevPinnedRef.current); +// } finally { +// if (active) setUpdating(false); +// } +// })(); +// +// return cleanup; +// }, [announcement.uaid, participantId, pinned, updatePinRead]); +// +// useEffect(() => { +// let active = true; +// const cleanup = () => { +// active = false; +// }; +// +// if (!participantId || announcement.read) { +// return cleanup; +// } +// +// setUpdating(true); +// (async () => { +// try { +// await updatePinRead({ +// variables: { +// announcement_id: announcement.uaid, +// participant_id: participantId, +// read: true, +// }, +// }); +// } catch (err) { +// if (active) setError("Unable to mark as read"); +// } finally { +// if (active) setUpdating(false); +// } +// })(); +// +// return cleanup; +// }, []); +// +// const handleMarkAsUnread = async () => { +// if (!participantId || updating) return; +// try { +// setUpdating(true); +// await updatePinRead({ +// variables: { +// announcement_id: announcement.uaid, +// participant_id: participantId, +// read: false, +// }, +// }); +// } catch (err) { +// setError("Unable to mark as unread"); +// } finally { +// setUpdating(false); +// window.location.reload(); +// } +// }; +// +// return ( +// <> +// +// +// {announcement.allRooms ? "Admin To All Rooms" : "Admin To Your Room"} +// +// window.location.reload()} +// textStyle="mobile.b1" +// textDecoration="underline" +// cursor="pointer" +// _hover={{ +// textDecoration: "none", +// }} +// > +// Back to Announcements +// +// +// +// +// +// {announcement.importance !== 0 && ( +// +// +// +// Priority +// +// +// )} +// +// {pinned && ( +// +// +// +// Pinned +// +// +// )} +// +// +// {displayDate2(new Date(announcement.date))} +// +// +// +// +// +// {announcement.message} +// +// +// handleMarkAsUnread()} +// icon={} +// /> +// setPinned(!pinned)} +// icon={ +// +// } +// /> +// +// +// ); +// } diff --git a/frontend/src/participant/pages/announcements/components/ParticipantAnnouncementCard.tsx b/frontend/src/participant/pages/announcements/components/ParticipantAnnouncementCard.tsx index 6d4de9f6..ed8af7e1 100644 --- a/frontend/src/participant/pages/announcements/components/ParticipantAnnouncementCard.tsx +++ b/frontend/src/participant/pages/announcements/components/ParticipantAnnouncementCard.tsx @@ -1,83 +1,85 @@ -import { Flex, Text } from "@chakra-ui/react"; -import React from "react"; -import notification from "../../../icons/announcements/notification.svg"; -import group from "../../../icons/announcements/group.svg"; -import profile from "../../../icons/announcements/profile.svg"; -import important from "../../../icons/announcements/important.svg"; -import orangepin from "../../../icons/announcements/orangepin.svg"; -import Icon from "../../../common/Icon"; -import { displayDate2 } from "../../../../utils/formatDateTime"; - -type ParticipantAnnouncementCardProps = { - allRooms: boolean; - message: string; - importance: number; - hasRead: boolean; - isPinned: boolean; - time: string; - userAnnouncementId: number; -}; - -export default function ParticipantAnnouncementCard({ - userAnnouncementId, - allRooms, - message, - importance, - hasRead, - isPinned, - time, -}: ParticipantAnnouncementCardProps) { - return ( - - {!hasRead && ( - - - - )} - - - - {allRooms ? ( - <> - - All Rooms - - ) : ( - <> - - Your Room - - )} - - {displayDate2(new Date(time))} - - - - - {importance !== 0 && ( - - )} - {isPinned && } - - - - - {message} - - - ); -} +export {}; +// TODO: Refactor this component +// import { Flex, Text } from "@chakra-ui/react"; +// import React from "react"; +// import notification from "../../../icons/announcements/notification.svg"; +// import group from "../../../icons/announcements/group.svg"; +// import profile from "../../../icons/announcements/profile.svg"; +// import important from "../../../icons/announcements/important.svg"; +// import orangepin from "../../../icons/announcements/orangepin.svg"; +// import Icon from "../../../common/Icon"; +// import { displayDate2 } from "../../../../utils/formatDateTime"; +// +// type ParticipantAnnouncementCardProps = { +// allRooms: boolean; +// message: string; +// importance: number; +// hasRead: boolean; +// isPinned: boolean; +// time: string; +// userAnnouncementId: number; +// }; +// +// export default function ParticipantAnnouncementCard({ +// userAnnouncementId, +// allRooms, +// message, +// importance, +// hasRead, +// isPinned, +// time, +// }: ParticipantAnnouncementCardProps) { +// return ( +// +// {!hasRead && ( +// +// +// +// )} +// +// +// +// {allRooms ? ( +// <> +// +// All Rooms +// +// ) : ( +// <> +// +// Your Room +// +// )} +// +// {displayDate2(new Date(time))} +// +// +// +// +// {importance !== 0 && ( +// +// )} +// {isPinned && } +// +// +// +// +// {message} +// +// +// ); +// } diff --git a/frontend/src/participant/pages/home/Main.tsx b/frontend/src/participant/pages/home/Main.tsx index 1d4d7d87..7d5fd50a 100644 --- a/frontend/src/participant/pages/home/Main.tsx +++ b/frontend/src/participant/pages/home/Main.tsx @@ -1,27 +1,29 @@ -import React from "react"; -import { Flex, Text } from "@chakra-ui/react"; -// import HomeContent from "./components/HomeContent"; -// import ParticipantPageHeader from "../../common/PageHeader"; -// import BadgeRow from "./components/BadgeRow"; -// import { BadgeRarity } from "../../common/Badge"; -import TodoListWidget from "./components/TodoListWidget"; -import { getParticipantHomePageDateString } from "../../../utils/formatDateTime"; -import AnnouncementWidget from "./components/AnnouncementWidget"; - -export default function ParticipantsHomePage() { - return ( - <> - - - Welcome to Marillac Place - - - {getParticipantHomePageDateString()} - - - - - - - ); -} +export {}; +// TODO: Refactor this component +// import React from "react"; +// import { Flex, Text } from "@chakra-ui/react"; +// // import HomeContent from "./components/HomeContent"; +// // import ParticipantPageHeader from "../../common/PageHeader"; +// // import BadgeRow from "./components/BadgeRow"; +// // import { BadgeRarity } from "../../common/Badge"; +// import TodoListWidget from "./components/TodoListWidget"; +// import { getParticipantHomePageDateString } from "../../../utils/formatDateTime"; +// import AnnouncementWidget from "./components/AnnouncementWidget"; +// +// export default function ParticipantsHomePage() { +// return ( +// <> +// +// +// Welcome to Marillac Place +// +// +// {getParticipantHomePageDateString()} +// +// +// +// +// +// +// ); +// } diff --git a/frontend/src/participant/pages/home/components/AnnouncementWidget.tsx b/frontend/src/participant/pages/home/components/AnnouncementWidget.tsx index 30361294..55ffd330 100644 --- a/frontend/src/participant/pages/home/components/AnnouncementWidget.tsx +++ b/frontend/src/participant/pages/home/components/AnnouncementWidget.tsx @@ -1,67 +1,69 @@ -import React, { useContext } from "react"; -import { Divider, Flex, Text } from "@chakra-ui/react"; -import { useQuery } from "@apollo/client"; -import { useNavigate } from "react-router-dom"; -import WidgetContainer from "../../../common/WidgetContainer"; -import { GET_ANNOUNCEMENTS_BY_PARTICIPANT_ID } from "../../../../gql/queries"; -import { displayDate2 } from "../../../../utils/formatDateTime"; -import { ParticipantContext } from "../../../common/ParticipantContext"; -import * as ROUTES from "../../../../constants/routes"; - -export default function AnnouncementWidget() { - const participant = useContext(ParticipantContext); - const participantId = participant?.id ?? ""; - const navigate = useNavigate(); - - const { - data: announcementData, - loading: announcementLoading, - error: announcementError, - } = useQuery(GET_ANNOUNCEMENTS_BY_PARTICIPANT_ID, { - variables: { - participant_id: participantId, - }, - }); - - if (announcementLoading) return Loading announcements.; - if (announcementError) return Error fetching announcements.; - - return ( - - <> - - Announcements - navigate(ROUTES.PARTICIPANTS_ANNOUNCEMENTS_PAGE)} - textDecoration="underline" - cursor="pointer" - > - Announcements - - - - {announcementData.getAnnouncementsByParticipantId.map( - (announcement: any) => ( - - - - {announcement.announcement.message} - - - {displayDate2( - new Date(announcement.announcement.creation_date) - )} - - - ) - )} - - - ); -} +export {}; +// TODO: Refactor this component +// import React, { useContext } from "react"; +// import { Divider, Flex, Text } from "@chakra-ui/react"; +// import { useQuery } from "@apollo/client"; +// import { useNavigate } from "react-router-dom"; +// import WidgetContainer from "../../../common/WidgetContainer"; +// import { GET_ANNOUNCEMENTS_BY_PARTICIPANT_ID } from "../../../../gql/queries"; +// import { displayDate2 } from "../../../../utils/formatDateTime"; +// import { ParticipantContext } from "../../../common/ParticipantContext"; +// import * as ROUTES from "../../../../constants/routes"; +// +// export default function AnnouncementWidget() { +// const participant = useContext(ParticipantContext); +// const participantId = participant?.id ?? ""; +// const navigate = useNavigate(); +// +// const { +// data: announcementData, +// loading: announcementLoading, +// error: announcementError, +// } = useQuery(GET_ANNOUNCEMENTS_BY_PARTICIPANT_ID, { +// variables: { +// participant_id: participantId, +// }, +// }); +// +// if (announcementLoading) return Loading announcements.; +// if (announcementError) return Error fetching announcements.; +// +// return ( +// +// <> +// +// Announcements +// navigate(ROUTES.PARTICIPANTS_ANNOUNCEMENTS_PAGE)} +// textDecoration="underline" +// cursor="pointer" +// > +// Announcements +// +// +// +// {announcementData.getAnnouncementsByParticipantId.map( +// (announcement: any) => ( +// +// +// +// {announcement.announcement.message} +// +// +// {displayDate2( +// new Date(announcement.announcement.creation_date) +// )} +// +// +// ) +// )} +// +// +// ); +// } diff --git a/frontend/src/participant/pages/home/components/BadgeRow.tsx b/frontend/src/participant/pages/home/components/BadgeRow.tsx index 4d6ba46d..26b9d344 100644 --- a/frontend/src/participant/pages/home/components/BadgeRow.tsx +++ b/frontend/src/participant/pages/home/components/BadgeRow.tsx @@ -1,82 +1,84 @@ -import React from "react"; -import { Box, Flex, Text, Button } from "@chakra-ui/react"; -import Badge, { BadgeRarity } from "../../../common/Badge"; - -interface BadgeRowProps { - messageText: string; - title: string; - subtitle: string; - badge: { - icon: string; - rarity: BadgeRarity; - percentComplete?: number; - }; - isLast?: boolean; - showButton?: boolean; - onProgressClick?: () => void; -} - -const BadgeRow: React.FC = ({ - messageText, - title, - subtitle, - badge, - isLast = false, - showButton = false, - onProgressClick, -}) => { - return ( - - {/* Message text with button */} - - - {messageText} - - {showButton && onProgressClick && ( - - )} - - - {/* Badge and content row */} - - - - - {title} - - - {subtitle} - - - - - ); -}; - -export default BadgeRow; +export {}; +// TODO: Refactor this component +// import React from "react"; +// import { Box, Flex, Text, Button } from "@chakra-ui/react"; +// import Badge, { BadgeRarity } from "../../../common/Badge"; +// +// interface BadgeRowProps { +// messageText: string; +// title: string; +// subtitle: string; +// badge: { +// icon: string; +// rarity: BadgeRarity; +// percentComplete?: number; +// }; +// isLast?: boolean; +// showButton?: boolean; +// onProgressClick?: () => void; +// } +// +// const BadgeRow: React.FC = ({ +// messageText, +// title, +// subtitle, +// badge, +// isLast = false, +// showButton = false, +// onProgressClick, +// }) => { +// return ( +// +// {/* Message text with button */} +// +// +// {messageText} +// +// {showButton && onProgressClick && ( +// +// )} +// +// +// {/* Badge and content row */} +// +// +// +// +// {title} +// +// +// {subtitle} +// +// +// +// +// ); +// }; +// +// export default BadgeRow; diff --git a/frontend/src/participant/pages/home/components/HomeContent.tsx b/frontend/src/participant/pages/home/components/HomeContent.tsx index 67f1605e..1815b950 100644 --- a/frontend/src/participant/pages/home/components/HomeContent.tsx +++ b/frontend/src/participant/pages/home/components/HomeContent.tsx @@ -1,107 +1,109 @@ -import React, { useContext } from "react"; -import { Flex, Text } from "@chakra-ui/react"; -import { useQuery } from "@apollo/client"; -import { ParticipantContext } from "../../../common/ParticipantContext"; -import TasksCompletedWidget from "./TasksCompletedWidget"; -import { HAS_COMPLETED_ALL_REQUIRED_TASKS } from "../../../../gql/queries"; -import BadgeRow from "./BadgeRow"; -import { BadgeRarity } from "../../../common/Badge"; - -export default function HomeContent() { - const participant = useContext(ParticipantContext); - const participantId = participant?.id; - - // Get current date - const currentDate = new Date(); - const dayNames = [ - "Sunday", - "Monday", - "Tuesday", - "Wednesday", - "Thursday", - "Friday", - "Saturday", - ]; - const monthNames = [ - "January", - "February", - "March", - "April", - "May", - "June", - "July", - "August", - "September", - "October", - "November", - "December", - ]; - - const dayName = dayNames[currentDate.getDay()]; - const monthName = monthNames[currentDate.getMonth()]; - const date = currentDate.getDate(); - const year = currentDate.getFullYear(); - - const formattedDate = `${dayName} - ${monthName} ${date}, ${year}`; - - // Query to check if participant has completed all required tasks - const { data: tasksData, loading: tasksLoading } = useQuery( - HAS_COMPLETED_ALL_REQUIRED_TASKS, - { - variables: { participantId }, - skip: !participantId, - } - ); - - const hasCompletedAllTasks = tasksData?.hasCompletedAllRequiredTasks || false; - - const badge = { - icon: "heart", - rarity: "silver" as BadgeRarity, - percentComplete: 20, - }; - - return ( - - {/* Welcome Section */} - - - Welcome to Marillac Place - - - {formattedDate} - - - - {/* Tasks Completed Widget - Only show if all required tasks are completed */} - {!tasksLoading && hasCompletedAllTasks && } - - - - - ); -} +export {}; +// TODO: Refactor this component +// import React, { useContext } from "react"; +// import { Flex, Text } from "@chakra-ui/react"; +// import { useQuery } from "@apollo/client"; +// import { ParticipantContext } from "../../../common/ParticipantContext"; +// import TasksCompletedWidget from "./TasksCompletedWidget"; +// import { HAS_COMPLETED_ALL_REQUIRED_TASKS } from "../../../../gql/queries"; +// import BadgeRow from "./BadgeRow"; +// import { BadgeRarity } from "../../../common/Badge"; +// +// export default function HomeContent() { +// const participant = useContext(ParticipantContext); +// const participantId = participant?.id; +// +// // Get current date +// const currentDate = new Date(); +// const dayNames = [ +// "Sunday", +// "Monday", +// "Tuesday", +// "Wednesday", +// "Thursday", +// "Friday", +// "Saturday", +// ]; +// const monthNames = [ +// "January", +// "February", +// "March", +// "April", +// "May", +// "June", +// "July", +// "August", +// "September", +// "October", +// "November", +// "December", +// ]; +// +// const dayName = dayNames[currentDate.getDay()]; +// const monthName = monthNames[currentDate.getMonth()]; +// const date = currentDate.getDate(); +// const year = currentDate.getFullYear(); +// +// const formattedDate = `${dayName} - ${monthName} ${date}, ${year}`; +// +// // Query to check if participant has completed all required tasks +// const { data: tasksData, loading: tasksLoading } = useQuery( +// HAS_COMPLETED_ALL_REQUIRED_TASKS, +// { +// variables: { participantId }, +// skip: !participantId, +// } +// ); +// +// const hasCompletedAllTasks = tasksData?.hasCompletedAllRequiredTasks || false; +// +// const badge = { +// icon: "heart", +// rarity: "silver" as BadgeRarity, +// percentComplete: 20, +// }; +// +// return ( +// +// {/* Welcome Section */} +// +// +// Welcome to Marillac Place +// +// +// {formattedDate} +// +// +// +// {/* Tasks Completed Widget - Only show if all required tasks are completed */} +// {!tasksLoading && hasCompletedAllTasks && } +// +// +// +// +// ); +// } diff --git a/frontend/src/participant/pages/home/components/TasksCompletedWidget.tsx b/frontend/src/participant/pages/home/components/TasksCompletedWidget.tsx index 6c074d6e..3b267ae0 100644 --- a/frontend/src/participant/pages/home/components/TasksCompletedWidget.tsx +++ b/frontend/src/participant/pages/home/components/TasksCompletedWidget.tsx @@ -1,131 +1,133 @@ -import React from "react"; -import { Flex, Text, Link } from "@chakra-ui/react"; - -const TrophyIcon = () => ( - - - - - - - - - - - - - - - - - - - -); - -export default function TasksCompletedWidget() { - return ( - - {/* Header - Title and Link */} - - - Mandatory Tasks Completed! - - - Tasks - - - - {/* Body - Trophy and Message */} - - {/* Trophy Icon */} - - - - - {/* Message */} - - You've completed your mandatory tasks for the week. - - - - ); -} +export {}; +// TODO: Refactor this component +// import React from "react"; +// import { Flex, Text, Link } from "@chakra-ui/react"; +// +// const TrophyIcon = () => ( +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// ); +// +// export default function TasksCompletedWidget() { +// return ( +// +// {/* Header - Title and Link */} +// +// +// Mandatory Tasks Completed! +// +// +// Tasks +// +// +// +// {/* Body - Trophy and Message */} +// +// {/* Trophy Icon */} +// +// +// +// +// {/* Message */} +// +// You've completed your mandatory tasks for the week. +// +// +// +// ); +// } diff --git a/frontend/src/participant/pages/home/components/TodoListWidget.tsx b/frontend/src/participant/pages/home/components/TodoListWidget.tsx index e4e30d87..429419a5 100644 --- a/frontend/src/participant/pages/home/components/TodoListWidget.tsx +++ b/frontend/src/participant/pages/home/components/TodoListWidget.tsx @@ -1,112 +1,114 @@ -import React, { useContext } from "react"; -import { useNavigate } from "react-router-dom"; -import { Text, Spinner, Alert, AlertIcon, Flex } from "@chakra-ui/react"; -import { useQuery } from "@apollo/client"; -import { ParticipantContext } from "../../../common/ParticipantContext"; -import { GET_ASSIGNED_TASKS_BY_PARTICIPANT_ID_AND_DATE } from "../../../../gql/queries"; -import { PARTICIPANTS_SCHEDULE_PAGE } from "../../../../constants/routes"; -import { formatTimeRange, getToday } from "../../../../utils/formatDateTime"; -import { TaskStatus } from "../../../../admin/pages/schedule/components/ScheduleTypes"; -import Icon from "../../../common/Icon"; -import assigned from "../../../icons/status/assigned.svg"; -import complete from "../../../icons/status/complete.svg"; -import incomplete from "../../../icons/status/incomplete.svg"; -import excused from "../../../icons/status/excused.svg"; -import comment from "../../../icons/misc/comment.svg"; - -interface AssignedTask { - assigned_task_id: number; - task_name: string; - task_status: TaskStatus; - start_date: string; - end_date: string; - comment: string; -} - -const TodoListWidget = () => { - const participant = useContext(ParticipantContext) as - | { id: number } - | undefined; - const participantId = participant?.id; - - const navigate = useNavigate(); - const date = getToday(); - - const { data, loading, error } = useQuery( - GET_ASSIGNED_TASKS_BY_PARTICIPANT_ID_AND_DATE, - { - variables: { participantId, date }, - skip: !participantId, - } - ); - - return ( - <> - - To-Do List - navigate(PARTICIPANTS_SCHEDULE_PAGE)} - > - Schedule - - - - {loading && } - - {error && ( - - - Error loading tasks. - - )} - - {!loading && - !error && - data && - data.getAssignedTasksByParticipantIdAndDate.length !== 0 && - data.getAssignedTasksByParticipantIdAndDate.map( - (assigned_task: AssignedTask) => { - return ( - - - {assigned_task.task_status === TaskStatus.ASSIGNED ? ( - - ) : assigned_task.task_status === TaskStatus.COMPLETE ? ( - - ) : assigned_task.task_status === TaskStatus.INCOMPLETE ? ( - - ) : ( - - )} - {assigned_task.task_name} - {assigned_task.comment && ( - - )} - - - - {formatTimeRange( - assigned_task.start_date, - assigned_task.end_date - )} - - - ); - } - )} - - ); -}; - -export default TodoListWidget; +export {}; +// TODO: Refactor this component +// import React, { useContext } from "react"; +// import { useNavigate } from "react-router-dom"; +// import { Text, Spinner, Alert, AlertIcon, Flex } from "@chakra-ui/react"; +// import { useQuery } from "@apollo/client"; +// import { ParticipantContext } from "../../../common/ParticipantContext"; +// import { GET_ASSIGNED_TASKS_BY_PARTICIPANT_ID_AND_DATE } from "../../../../gql/queries"; +// import { PARTICIPANTS_SCHEDULE_PAGE } from "../../../../constants/routes"; +// import { formatTimeRange, getToday } from "../../../../utils/formatDateTime"; +// import { TaskStatus } from "../../../../admin/pages/schedule/components/ScheduleTypes"; +// import Icon from "../../../common/Icon"; +// import assigned from "../../../icons/status/assigned.svg"; +// import complete from "../../../icons/status/complete.svg"; +// import incomplete from "../../../icons/status/incomplete.svg"; +// import excused from "../../../icons/status/excused.svg"; +// import comment from "../../../icons/misc/comment.svg"; +// +// interface AssignedTask { +// assigned_task_id: number; +// task_name: string; +// task_status: TaskStatus; +// start_date: string; +// end_date: string; +// comment: string; +// } +// +// const TodoListWidget = () => { +// const participant = useContext(ParticipantContext) as +// | { id: number } +// | undefined; +// const participantId = participant?.id; +// +// const navigate = useNavigate(); +// const date = getToday(); +// +// const { data, loading, error } = useQuery( +// GET_ASSIGNED_TASKS_BY_PARTICIPANT_ID_AND_DATE, +// { +// variables: { participantId, date }, +// skip: !participantId, +// } +// ); +// +// return ( +// <> +// +// To-Do List +// navigate(PARTICIPANTS_SCHEDULE_PAGE)} +// > +// Schedule +// +// +// +// {loading && } +// +// {error && ( +// +// +// Error loading tasks. +// +// )} +// +// {!loading && +// !error && +// data && +// data.getAssignedTasksByParticipantIdAndDate.length !== 0 && +// data.getAssignedTasksByParticipantIdAndDate.map( +// (assigned_task: AssignedTask) => { +// return ( +// +// +// {assigned_task.task_status === TaskStatus.ASSIGNED ? ( +// +// ) : assigned_task.task_status === TaskStatus.COMPLETE ? ( +// +// ) : assigned_task.task_status === TaskStatus.INCOMPLETE ? ( +// +// ) : ( +// +// )} +// {assigned_task.task_name} +// {assigned_task.comment && ( +// +// )} +// +// +// +// {formatTimeRange( +// assigned_task.start_date, +// assigned_task.end_date +// )} +// +// +// ); +// } +// )} +// +// ); +// }; +// +// export default TodoListWidget; diff --git a/frontend/src/participant/pages/home/components/badgeWidget.tsx b/frontend/src/participant/pages/home/components/badgeWidget.tsx index 1b3dd168..20835a32 100644 --- a/frontend/src/participant/pages/home/components/badgeWidget.tsx +++ b/frontend/src/participant/pages/home/components/badgeWidget.tsx @@ -1,103 +1,105 @@ -import React from "react"; -import { Box } from "@chakra-ui/react"; -import { useNavigate } from "react-router-dom"; -import { PARTICIPANTS_PROGRESS_PAGE } from "../../../../constants/routes"; -import { BadgeRarity } from "../../../common/Badge"; -import BadgeRow from "./BadgeRow"; - -export type BadgeRowType = "congratulations" | "lostStreak" | "progress"; - -export interface BadgeToDisplay { - messageText: string; - title: string; - subtitle: string; - badge: { - icon: string; - rarity: BadgeRarity; - percentComplete?: number; - }; -} - -interface BadgeWidgetProps { - badgesToDisplayInWidget: BadgeToDisplay[]; -} - -const BadgeWidget: React.FC = ({ - badgesToDisplayInWidget, -}) => { - const navigate = useNavigate(); - - const handleProgressClick = () => { - navigate(PARTICIPANTS_PROGRESS_PAGE); - }; - - // fallback if no badges are provided - if (!badgesToDisplayInWidget || badgesToDisplayInWidget.length === 0) { - return ( - - - - ); - } - - return ( - - {badgesToDisplayInWidget.map((badgeData, index) => { - const key = `badge-${index}`; - const isLast = index === badgesToDisplayInWidget.length - 1; - const isFirst = index === 0; - - const { - messageText = "Badge Progress", - title, - subtitle = "", - badge = { - icon: "diamond", - rarity: "bronze", - percentComplete: 0, - }, - } = badgeData; - - return ( - - ); - })} - - ); -}; - -export default BadgeWidget; +export {}; +// TODO: Refactor this component +// import React from "react"; +// import { Box } from "@chakra-ui/react"; +// import { useNavigate } from "react-router-dom"; +// import { PARTICIPANTS_PROGRESS_PAGE } from "../../../../constants/routes"; +// import { BadgeRarity } from "../../../common/Badge"; +// import BadgeRow from "./BadgeRow"; +// +// export type BadgeRowType = "congratulations" | "lostStreak" | "progress"; +// +// export interface BadgeToDisplay { +// messageText: string; +// title: string; +// subtitle: string; +// badge: { +// icon: string; +// rarity: BadgeRarity; +// percentComplete?: number; +// }; +// } +// +// interface BadgeWidgetProps { +// badgesToDisplayInWidget: BadgeToDisplay[]; +// } +// +// const BadgeWidget: React.FC = ({ +// badgesToDisplayInWidget, +// }) => { +// const navigate = useNavigate(); +// +// const handleProgressClick = () => { +// navigate(PARTICIPANTS_PROGRESS_PAGE); +// }; +// +// // fallback if no badges are provided +// if (!badgesToDisplayInWidget || badgesToDisplayInWidget.length === 0) { +// return ( +// +// +// +// ); +// } +// +// return ( +// +// {badgesToDisplayInWidget.map((badgeData, index) => { +// const key = `badge-${index}`; +// const isLast = index === badgesToDisplayInWidget.length - 1; +// const isFirst = index === 0; +// +// const { +// messageText = "Badge Progress", +// title, +// subtitle = "", +// badge = { +// icon: "diamond", +// rarity: "bronze", +// percentComplete: 0, +// }, +// } = badgeData; +// +// return ( +// +// ); +// })} +// +// ); +// }; +// +// export default BadgeWidget; diff --git a/frontend/src/participant/pages/login/Main.tsx b/frontend/src/participant/pages/login/Main.tsx index e4d8a03f..83144251 100644 --- a/frontend/src/participant/pages/login/Main.tsx +++ b/frontend/src/participant/pages/login/Main.tsx @@ -1,68 +1,71 @@ -import React, { useState, useEffect } from "react"; +import React, { useState, useEffect, useContext } from "react"; import { Navigate, useNavigate } from "react-router-dom"; import { Button, Flex, Text, Input, FormControl } from "@chakra-ui/react"; import { useMutation } from "@apollo/client"; -import { isParticipant } from "../../../utils/checkRole"; -import { PARTICIPANT_LOGIN } from "../../../gql/mutations"; +import { verifyRole } from "../../../helpers/verifyRole"; +import { PARTICIPANT } from "../../../constants/roles"; +import { PARTICIPANT_LOGIN } from "../../../gql/loginRequests"; import * as ROUTES from "../../../constants/routes"; -import Loading from "../../../Loading"; +import LoadingScreen from "../../../ui/screens/LoadingScreen"; +import ErrorScreen from "../../../ui/screens/ErrorScreen"; +import { ParticipantContext } from "../../ParticipantContext"; +import WidgetContainer from "../../../ui/containers/WidgetContainer"; +import NumberInput from "../../../ui/inputs/NumberInput"; +import PasswordInput from "../../../ui/inputs/PasswordInput"; +import OrangeButton from "../../../ui/buttons/OrangeButton"; export default function ParticipantsLoginPage() { const navigate = useNavigate(); + const participantContext = useContext(ParticipantContext); const [loggedIn, setLoggedIn] = useState(false); - const [checkLoggedIn, setCheckLoggedIn] = useState(false); + const [loading, setLoading] = useState(true); + const [error, setError] = useState(""); - const [id, setId] = useState(""); + const [id, setId] = useState(null); const [password, setPassword] = useState(""); - const [error, setError] = useState(""); - - const [login, { loading }] = useMutation(PARTICIPANT_LOGIN, { + const [participantLogin, { loading: participantLoginLoading }] = useMutation(PARTICIPANT_LOGIN, { onCompleted: (data) => { - localStorage.setItem("participant_token", data.participantLogin.token); + localStorage.setItem("token", data.participantLogin.token); + if (!participantContext) { + setError("participant context not found"); + return; + } + participantContext.setPid(data.participantLogin.pid); navigate(ROUTES.PARTICIPANTS_HOME_PAGE); }, onError: (err: Error) => { - // Check if it's a network error (CORS, connection refused, etc.) - if ( - err.message.includes("Failed to fetch") || - err.message.includes("NetworkError") || - err.message.includes("Network request failed") - ) { - setError( - "Unable to connect to server. Please check your internet connection and try again." - ); - } else { - // Show the actual error message from the backend - setError(err.message); - } + setError(err.message); }, }); useEffect(() => { - const tokenCheck = async () => { - const participantUser = await isParticipant(); - if (participantUser) { + const authenticate = async () => { + const isAuthenticated = await verifyRole([PARTICIPANT]); + if (isAuthenticated) { setLoggedIn(true); } - setCheckLoggedIn(true); + setLoading(false); }; - tokenCheck(); + authenticate(); }, []); const handleSubmit = () => { setError(""); - if (!id || !password) { - setError("Missing fields"); + setError("missing required fields"); } else { - login({ variables: { id: Number(id), password } }); + participantLogin({ variables: { id: Number(id), password } }); } }; - if (!checkLoggedIn || loading) { - return ; + if (loading || participantLoginLoading) { + return ; + } + + if (error) { + return ; } if (loggedIn) { @@ -83,48 +86,38 @@ export default function ParticipantsLoginPage() { alignItems="center" justifyContent="center" gap="45px" - padding="35px 15px" + paddingTop="50px" > - + Marillac Place Logo - Sign in - Please enter your login information. - - - setId(e.target.value)} + + - - - setPassword(e.target.value)} + - + {error && ( @@ -132,18 +125,12 @@ export default function ParticipantsLoginPage() { )} - - + + ); diff --git a/frontend/src/participant/pages/progress/Main.tsx b/frontend/src/participant/pages/progress/Main.tsx index d5088b93..4a7e1dea 100644 --- a/frontend/src/participant/pages/progress/Main.tsx +++ b/frontend/src/participant/pages/progress/Main.tsx @@ -1,212 +1,214 @@ -import React, { useContext, useState } from "react"; -import { Box, Flex, Text, HStack } from "@chakra-ui/react"; -import { useQuery } from "@apollo/client"; -import { ParticipantContext } from "../../common/ParticipantContext"; -import { EditGoal } from "./components/EditGoal"; -import { SetGoal } from "./components/SetGoal"; -import { - GET_PARTICIPANT_BY_ID, - GET_WEEKLY_EARNINGS, -} from "../../../gql/queries"; -import WeeklyEarningsChart from "./components/EarningsWidget"; -import BucksGoalCard from "./elements/BucksGoalCard"; -import BadgeWidget from "./components/BadgeWidget"; - -export default function ParticipantsProgressPage() { - const [editGoal, setEditGoal] = useState(false); - const [setGoal, setSetGoal] = useState(false); - const [activeTab, setActiveTab] = useState("badges"); - const participantContext = useContext(ParticipantContext); - - // Fetch participant data - const { - data: participantData, - loading: loadingParticipant, - refetch: refetchParticipant, - } = useQuery(GET_PARTICIPANT_BY_ID, { - variables: { participantId: participantContext?.id }, - skip: !participantContext?.id, - }); - - // Fetch earnings data - const { - data: earningsData, - loading: loadingEarnings, - refetch: refetchEarnings, - } = useQuery(GET_WEEKLY_EARNINGS, { - variables: { participant_id: participantContext?.id }, - skip: !participantContext?.id, - }); - - const weeklyEarnings = earningsData?.getWeeklyEarnings || [ - 0, 0, 0, 0, 0, 0, 0, - ]; - const participant = participantData?.getParticipantById; - const currentGoal = participant?.marillac_bucks_goal; - const currentBalance = participant?.marillac_bucks || 0; - - const loading = loadingParticipant || loadingEarnings; - - const handleClose = () => { - setSetGoal(false); - setEditGoal(false); - }; - - const handleGoalSet = async () => { - await refetchParticipant(); - handleClose(); - }; - - const handleGoalUpdated = async () => { - await refetchParticipant(); - handleClose(); - }; - if (loading) { - return null; - } - - const handleGoalClick = () => { - if (currentGoal) { - setEditGoal(true); - } else { - setSetGoal(true); - } - }; - - return ( - <> - - {setGoal && ( - - )} - {editGoal && currentGoal && ( - - )} -
- -
- - - - - {["badges", "achieved"].map((tab) => ( - setActiveTab(tab)} - transition="all 0.2s ease" - > - {tab.charAt(0).toUpperCase() + tab.slice(1)} - - ))} - - - {activeTab === "badges" ? ( - - ) : ( - - )} - - - - ); -} +export {}; +// TODO: Refactor this component +// import React, { useContext, useState } from "react"; +// import { Box, Flex, Text, HStack } from "@chakra-ui/react"; +// import { useQuery } from "@apollo/client"; +// import { ParticipantContext } from "../../common/ParticipantContext"; +// import { EditGoal } from "./components/EditGoal"; +// import { SetGoal } from "./components/SetGoal"; +// import { +// GET_PARTICIPANT_BY_ID, +// GET_WEEKLY_EARNINGS, +// } from "../../../gql/queries"; +// import WeeklyEarningsChart from "./components/EarningsWidget"; +// import BucksGoalCard from "./elements/BucksGoalCard"; +// import BadgeWidget from "./components/BadgeWidget"; +// +// export default function ParticipantsProgressPage() { +// const [editGoal, setEditGoal] = useState(false); +// const [setGoal, setSetGoal] = useState(false); +// const [activeTab, setActiveTab] = useState("badges"); +// const participantContext = useContext(ParticipantContext); +// +// // Fetch participant data +// const { +// data: participantData, +// loading: loadingParticipant, +// refetch: refetchParticipant, +// } = useQuery(GET_PARTICIPANT_BY_ID, { +// variables: { participantId: participantContext?.id }, +// skip: !participantContext?.id, +// }); +// +// // Fetch earnings data +// const { +// data: earningsData, +// loading: loadingEarnings, +// refetch: refetchEarnings, +// } = useQuery(GET_WEEKLY_EARNINGS, { +// variables: { participant_id: participantContext?.id }, +// skip: !participantContext?.id, +// }); +// +// const weeklyEarnings = earningsData?.getWeeklyEarnings || [ +// 0, 0, 0, 0, 0, 0, 0, +// ]; +// const participant = participantData?.getParticipantById; +// const currentGoal = participant?.marillac_bucks_goal; +// const currentBalance = participant?.marillac_bucks || 0; +// +// const loading = loadingParticipant || loadingEarnings; +// +// const handleClose = () => { +// setSetGoal(false); +// setEditGoal(false); +// }; +// +// const handleGoalSet = async () => { +// await refetchParticipant(); +// handleClose(); +// }; +// +// const handleGoalUpdated = async () => { +// await refetchParticipant(); +// handleClose(); +// }; +// if (loading) { +// return null; +// } +// +// const handleGoalClick = () => { +// if (currentGoal) { +// setEditGoal(true); +// } else { +// setSetGoal(true); +// } +// }; +// +// return ( +// <> +// +// {setGoal && ( +// +// )} +// {editGoal && currentGoal && ( +// +// )} +//
+// +//
+// +// +// +// +// {["badges", "achieved"].map((tab) => ( +// setActiveTab(tab)} +// transition="all 0.2s ease" +// > +// {tab.charAt(0).toUpperCase() + tab.slice(1)} +// +// ))} +// +// +// {activeTab === "badges" ? ( +// +// ) : ( +// +// )} +// +// +// +// ); +// } diff --git a/frontend/src/participant/pages/progress/components/BadgeRow.tsx b/frontend/src/participant/pages/progress/components/BadgeRow.tsx index 71c9964c..a2a8fcc0 100644 --- a/frontend/src/participant/pages/progress/components/BadgeRow.tsx +++ b/frontend/src/participant/pages/progress/components/BadgeRow.tsx @@ -1,88 +1,90 @@ -import React from "react"; -import { Box, Flex, Text, Image } from "@chakra-ui/react"; -import Badge, { BadgeRarity } from "../../../common/Badge"; - -interface BadgeRowProps { - title: string; - subtitle: string; - bucks: number; - badge: { - icon: string; - rarity: BadgeRarity; - percentComplete?: number; - }; - isLast?: boolean; - isFirst?: boolean; - showButton?: boolean; - achieved?: boolean; - onProgressClick?: () => void; -} - -const BadgeRow: React.FC = ({ - title, - subtitle, - bucks, - badge, - isLast = false, - isFirst = false, - showButton = false, - achieved = false, - onProgressClick, -}) => { - return ( - - {/* Badge and content row */} - - - - {!achieved && ( - - {badge.percentComplete}% - - )} - - - - {title} - - - {subtitle} - - - {!achieved && ( - - {bucks} - coin - - )} - - - ); -}; - -export default BadgeRow; +export {}; +// TODO: Refactor this component +// import React from "react"; +// import { Box, Flex, Text, Image } from "@chakra-ui/react"; +// import Badge, { BadgeRarity } from "../../../common/Badge"; +// +// interface BadgeRowProps { +// title: string; +// subtitle: string; +// bucks: number; +// badge: { +// icon: string; +// rarity: BadgeRarity; +// percentComplete?: number; +// }; +// isLast?: boolean; +// isFirst?: boolean; +// showButton?: boolean; +// achieved?: boolean; +// onProgressClick?: () => void; +// } +// +// const BadgeRow: React.FC = ({ +// title, +// subtitle, +// bucks, +// badge, +// isLast = false, +// isFirst = false, +// showButton = false, +// achieved = false, +// onProgressClick, +// }) => { +// return ( +// +// {/* Badge and content row */} +// +// +// +// {!achieved && ( +// +// {badge.percentComplete}% +// +// )} +// +// +// +// {title} +// +// +// {subtitle} +// +// +// {!achieved && ( +// +// {bucks} +// coin +// +// )} +// +// +// ); +// }; +// +// export default BadgeRow; diff --git a/frontend/src/participant/pages/progress/components/BadgeWidget.tsx b/frontend/src/participant/pages/progress/components/BadgeWidget.tsx index f3ed0190..aac64fc7 100644 --- a/frontend/src/participant/pages/progress/components/BadgeWidget.tsx +++ b/frontend/src/participant/pages/progress/components/BadgeWidget.tsx @@ -1,93 +1,95 @@ -import React from "react"; -import { Box } from "@chakra-ui/react"; -import { BadgeRarity } from "../../../common/Badge"; -import BadgeRow from "./BadgeRow"; - -export type BadgeRowType = "congratulations" | "lostStreak" | "progress"; - -export interface BadgeToDisplay { - title: string; - subtitle: string; - bucks: number; - badge: { - icon: string; - rarity: BadgeRarity; - percentComplete?: number; - }; -} - -interface BadgeWidgetProps { - allBadges: BadgeToDisplay[]; - achieved: boolean; -} - -const BadgeWidget: React.FC = ({ allBadges, achieved }) => { - const filteredBadges = ( - badgesToDisplayInWidget: BadgeToDisplay[], - complete: boolean - ) => { - return badgesToDisplayInWidget.filter((badge) => { - if (complete) { - return badge.badge.percentComplete === 100; - } - return badge.badge.percentComplete !== 100; - }); - }; - const badgesToDisplayInWidget = filteredBadges(allBadges, achieved); - - // fallback if no badges are provided - if (!badgesToDisplayInWidget || badgesToDisplayInWidget.length === 0) { - return ( - - - - ); - } - - return ( - - {badgesToDisplayInWidget.map((badgeData, index) => { - const key = `badge-${index}`; - const isLast = index === badgesToDisplayInWidget.length - 1; - const isFirst = index === 0; - - const { - title, - subtitle = "", - bucks = 0, - badge = { - icon: "diamond", - rarity: "bronze", - percentComplete: 0, - }, - } = badgeData; - - return ( - - ); - })} - - ); -}; - -export default BadgeWidget; +export {}; +// TODO: Refactor this component +// import React from "react"; +// import { Box } from "@chakra-ui/react"; +// import { BadgeRarity } from "../../../common/Badge"; +// import BadgeRow from "./BadgeRow"; +// +// export type BadgeRowType = "congratulations" | "lostStreak" | "progress"; +// +// export interface BadgeToDisplay { +// title: string; +// subtitle: string; +// bucks: number; +// badge: { +// icon: string; +// rarity: BadgeRarity; +// percentComplete?: number; +// }; +// } +// +// interface BadgeWidgetProps { +// allBadges: BadgeToDisplay[]; +// achieved: boolean; +// } +// +// const BadgeWidget: React.FC = ({ allBadges, achieved }) => { +// const filteredBadges = ( +// badgesToDisplayInWidget: BadgeToDisplay[], +// complete: boolean +// ) => { +// return badgesToDisplayInWidget.filter((badge) => { +// if (complete) { +// return badge.badge.percentComplete === 100; +// } +// return badge.badge.percentComplete !== 100; +// }); +// }; +// const badgesToDisplayInWidget = filteredBadges(allBadges, achieved); +// +// // fallback if no badges are provided +// if (!badgesToDisplayInWidget || badgesToDisplayInWidget.length === 0) { +// return ( +// +// +// +// ); +// } +// +// return ( +// +// {badgesToDisplayInWidget.map((badgeData, index) => { +// const key = `badge-${index}`; +// const isLast = index === badgesToDisplayInWidget.length - 1; +// const isFirst = index === 0; +// +// const { +// title, +// subtitle = "", +// bucks = 0, +// badge = { +// icon: "diamond", +// rarity: "bronze", +// percentComplete: 0, +// }, +// } = badgeData; +// +// return ( +// +// ); +// })} +// +// ); +// }; +// +// export default BadgeWidget; diff --git a/frontend/src/participant/pages/progress/components/EarningsWidget.tsx b/frontend/src/participant/pages/progress/components/EarningsWidget.tsx index 2bf3bad9..4e216208 100644 --- a/frontend/src/participant/pages/progress/components/EarningsWidget.tsx +++ b/frontend/src/participant/pages/progress/components/EarningsWidget.tsx @@ -1,157 +1,158 @@ -import React, { useState } from "react"; -import { - BarChart, - Bar, - XAxis, - YAxis, - ResponsiveContainer, - Cell, - CartesianGrid, - LabelList, -} from "recharts"; +export {}; +// import React, { useState } from "react"; +// import { +// BarChart, +// Bar, +// XAxis, +// YAxis, +// ResponsiveContainer, +// Cell, +// CartesianGrid, +// LabelList, +// } from "recharts"; -const colors = { - text: { light: { primary: "#1D2433", secondary: "#595D67" } }, - neutral: { 300: "#C5C8D8" }, - primary: { 700: "#0C727E" }, - success: { 900: "#0D8312" }, -}; +// const colors = { +// text: { light: { primary: "#1D2433", secondary: "#595D67" } }, +// neutral: { 300: "#C5C8D8" }, +// primary: { 700: "#0C727E" }, +// success: { 900: "#0D8312" }, +// }; -interface WeeklyEarningsChartProps { - weeklyEarnings?: number[]; -} +// interface WeeklyEarningsChartProps { +// weeklyEarnings?: number[]; +// } -interface ChartDataItem { - amount: number; - day: string; - isToday: boolean; -} +// interface ChartDataItem { +// amount: number; +// day: string; +// isToday: boolean; +// } -const WeeklyEarningsChart = ({ - weeklyEarnings = [], -}: WeeklyEarningsChartProps) => { - const [selectedBarIndex, setSelectedBarIndex] = useState(null); +// const WeeklyEarningsChart = ({ +// weeklyEarnings = [], +// }: WeeklyEarningsChartProps) => { +// const [selectedBarIndex, setSelectedBarIndex] = useState(null); - // Day labels for the week (Monday = index 0, Sunday = index 6) - const allDayLabels = ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"]; +// // Day labels for the week (Monday = index 0, Sunday = index 6) +// const allDayLabels = ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"]; - // Calculate which day of the week today is (0 = Monday, 6 = Sunday) - const today = new Date(); - const dayOfWeek = today.getDay(); // 0 = Sunday, 1 = Monday, etc. - const todayIndex = dayOfWeek === 0 ? 6 : dayOfWeek - 1; // Convert to 0 = Monday +// // Calculate which day of the week today is (0 = Monday, 6 = Sunday) +// const today = new Date(); +// const dayOfWeek = today.getDay(); // 0 = Sunday, 1 = Monday, etc. +// const todayIndex = dayOfWeek === 0 ? 6 : dayOfWeek - 1; // Convert to 0 = Monday - // Only show days from Monday up to today - const chartData: ChartDataItem[] = weeklyEarnings - .slice(0, todayIndex + 1) // Only include Monday through today - .map((earnings = 0, index) => ({ - amount: earnings, - day: allDayLabels[index] || "", - isToday: index === todayIndex, - })); +// // Only show days from Monday up to today +// const chartData: ChartDataItem[] = weeklyEarnings +// .slice(0, todayIndex + 1) // Only include Monday through today +// .map((earnings = 0, index) => ({ +// amount: earnings, +// day: allDayLabels[index] || "", +// isToday: index === todayIndex, +// })); - // Calculate max earnings from only the days we're showing - const visibleEarnings = weeklyEarnings.slice(0, todayIndex + 1); - const maxEarnings = Math.max(...visibleEarnings.filter((val) => val != null), 0); - const upperBound = Math.ceil(maxEarnings * 1.2) || 10; +// // Calculate max earnings from only the days we're showing +// const visibleEarnings = weeklyEarnings.slice(0, todayIndex + 1); +// const maxEarnings = Math.max(...visibleEarnings.filter((val) => val != null), 0); +// const upperBound = Math.ceil(maxEarnings * 1.2) || 10; - return ( -
-

- Weekly Earnings -

+// return ( +//
+//

+// Weekly Earnings +//

-
- - - - - `$${value}`} - width={30} - /> - { - setSelectedBarIndex(index === selectedBarIndex ? null : index); - }} - style={{ cursor: "pointer" }} - > - {chartData.map((entry, index) => ( - - ))} - { - const { x, y, value, index } = props; - if ( - selectedBarIndex !== null && - index === selectedBarIndex && - x !== undefined && - y !== undefined && - value !== undefined - ) { - return ( - - ${value} - - ); - } - return null; - }} - /> - - - -
-
- ); -}; +//
+// +// +// +// +// `$${value}`} +// width={30} +// /> +// { +// setSelectedBarIndex(index === selectedBarIndex ? null : index); +// }} +// style={{ cursor: "pointer" }} +// > +// {chartData.map((entry, index) => ( +// +// ))} +// { +// const { x, y, value, index } = props; +// if ( +// selectedBarIndex !== null && +// index === selectedBarIndex && +// x !== undefined && +// y !== undefined && +// value !== undefined +// ) { +// return ( +// +// ${value} +// +// ); +// } +// return null; +// }} +// /> +// +// +// +//
+//
+// ); +// }; -export default WeeklyEarningsChart; +// export default WeeklyEarningsChart; diff --git a/frontend/src/participant/pages/progress/components/EditGoal.tsx b/frontend/src/participant/pages/progress/components/EditGoal.tsx index 012146a3..b6f8ce50 100644 --- a/frontend/src/participant/pages/progress/components/EditGoal.tsx +++ b/frontend/src/participant/pages/progress/components/EditGoal.tsx @@ -1,114 +1,116 @@ -import { Flex, Image, Input, Text } from "@chakra-ui/react"; -import React, { useState, useContext } from "react"; -import { useMutation } from "@apollo/client"; -import ModalContainer from "../../../../admin/common/form/ModalContainer"; -import { ParticipantContext } from "../../../common/ParticipantContext"; -import { UPDATE_MARILLAC_BUCKS_GOAL } from "../../../../gql/mutations"; - -interface EditGoalProps { - handleClose: () => void; - onGoalUpdated: () => void; - currentGoal: number; - currentBalance: number; -} - -export const EditGoal: React.FC = ({ - handleClose, - onGoalUpdated, - currentGoal, - currentBalance, -}) => { - const [goal, setGoal] = useState(""); - const [error, setError] = useState(""); - const participantContext = useContext(ParticipantContext); - - const [updateGoalMutation] = useMutation(UPDATE_MARILLAC_BUCKS_GOAL); - - const handleSave = async () => { - if (!participantContext) { - setError("Not logged in"); - return; - } - - const goalValue = parseInt(goal, 10); - if (Number.isNaN(goalValue)) { - setError("Please enter a valid number"); - return; - } - - if (goalValue <= currentBalance) { - setError("Goals must be greater than current Marillac Bucks Balance"); - return; - } - - try { - await updateGoalMutation({ - variables: { - participant_id: participantContext.id, - new_goal_value: goalValue, - }, - }); - - onGoalUpdated(); - handleClose(); - } catch (err: any) { - console.error("Error updating goal:", err); - setError(err.message || "Failed to update goal — please try again."); - } - }; - - // Show previous goal value - React.useEffect(() => { - setGoal(currentGoal.toString()); - }, [currentGoal]); - - return ( - { - await handleSave(); - }} - cancel_action={handleClose} - error={error} - > - - {/* Previous Goal */} - - Previous goal: - - coin - - {currentGoal} - - - - - {/* New Goal */} - - New goal: - - coin - { - e.target.select(); - }} - onChange={(e) => { - setGoal(e.target.value); - }} - /> - - - - - ); -}; +export {}; +// TODO: Refactor this component +// import { Flex, Image, Input, Text } from "@chakra-ui/react"; +// import React, { useState, useContext } from "react"; +// import { useMutation } from "@apollo/client"; +// import ModalContainer from "../../../../admin/common/form/ModalContainer"; +// import { ParticipantContext } from "../../../common/ParticipantContext"; +// import { UPDATE_MARILLAC_BUCKS_GOAL } from "../../../../gql/mutations"; +// +// interface EditGoalProps { +// handleClose: () => void; +// onGoalUpdated: () => void; +// currentGoal: number; +// currentBalance: number; +// } +// +// export const EditGoal: React.FC = ({ +// handleClose, +// onGoalUpdated, +// currentGoal, +// currentBalance, +// }) => { +// const [goal, setGoal] = useState(""); +// const [error, setError] = useState(""); +// const participantContext = useContext(ParticipantContext); +// +// const [updateGoalMutation] = useMutation(UPDATE_MARILLAC_BUCKS_GOAL); +// +// const handleSave = async () => { +// if (!participantContext) { +// setError("Not logged in"); +// return; +// } +// +// const goalValue = parseInt(goal, 10); +// if (Number.isNaN(goalValue)) { +// setError("Please enter a valid number"); +// return; +// } +// +// if (goalValue <= currentBalance) { +// setError("Goals must be greater than current Marillac Bucks Balance"); +// return; +// } +// +// try { +// await updateGoalMutation({ +// variables: { +// participant_id: participantContext.id, +// new_goal_value: goalValue, +// }, +// }); +// +// onGoalUpdated(); +// handleClose(); +// } catch (err: any) { +// console.error("Error updating goal:", err); +// setError(err.message || "Failed to update goal — please try again."); +// } +// }; +// +// // Show previous goal value +// React.useEffect(() => { +// setGoal(currentGoal.toString()); +// }, [currentGoal]); +// +// return ( +// { +// await handleSave(); +// }} +// cancel_action={handleClose} +// error={error} +// > +// +// {/* Previous Goal */} +// +// Previous goal: +// +// coin +// +// {currentGoal} +// +// +// +// +// {/* New Goal */} +// +// New goal: +// +// coin +// { +// e.target.select(); +// }} +// onChange={(e) => { +// setGoal(e.target.value); +// }} +// /> +// +// +// +// +// ); +// }; diff --git a/frontend/src/participant/pages/progress/components/SetGoal.tsx b/frontend/src/participant/pages/progress/components/SetGoal.tsx index d45531bd..f41b8d87 100644 --- a/frontend/src/participant/pages/progress/components/SetGoal.tsx +++ b/frontend/src/participant/pages/progress/components/SetGoal.tsx @@ -1,103 +1,105 @@ -import { Flex, Image, Input, Text } from "@chakra-ui/react"; -import React, { useState, useContext } from "react"; -import { useMutation } from "@apollo/client"; -import ModalContainer from "../../../../admin/common/form/ModalContainer"; -import { ParticipantContext } from "../../../common/ParticipantContext"; -import { SET_MARILLAC_BUCKS_GOAL } from "../../../../gql/mutations"; - -interface SetGoalProps { - handleClose: () => void; - onGoalSet: () => void; -} - -export const SetGoal: React.FC = ({ handleClose, onGoalSet }) => { - const [goal, setGoal] = useState(""); - const [error, setError] = useState(""); - const participantContext = useContext(ParticipantContext); - - const [setGoalMutation] = useMutation(SET_MARILLAC_BUCKS_GOAL); - - const handleSave = async () => { - console.log("🎯 SetGoal: Starting save process"); - console.log("📝 Goal value entered:", goal); - console.log("👤 Participant context:", participantContext); - - if (!participantContext) { - console.error("❌ No participant context found"); - setError("Not logged in"); - return; - } - - const goalValue = parseInt(goal, 10); - console.log("🔢 Parsed goal value:", goalValue); - - if (Number.isNaN(goalValue) || goalValue <= 0) { - console.error("❌ Invalid goal value"); - setError("Goal must be greater than 0"); - return; - } - - console.log("✅ Calling mutation with:", { - participant_id: participantContext.id, - goal_value: goalValue, - }); - - try { - const result = await setGoalMutation({ - variables: { - participant_id: participantContext.id, - goal_value: goalValue, - }, - }); - - console.log("✅ Mutation success:", result); - console.log("🎯 Goal saved successfully!"); - console.log( - `✅ GOAL SAVED: ${goalValue} Marillac Bucks for participant ${participantContext.id}` - ); - - onGoalSet(); - handleClose(); - } catch (err: any) { - console.error("❌ Error saving goal:", err); - console.error("📋 Error details:", JSON.stringify(err, null, 2)); - setError(err.message || "Failed to save goal — please try again."); - } - }; - - return ( - { - await handleSave(); - }} - cancel_action={handleClose} - error={error} - > - - New goal: - - coin - { - e.target.select(); - }} - onChange={(e) => { - setGoal(e.target.value); - }} - /> - - - - ); -}; +export {}; +// TODO: Refactor this component +// import { Flex, Image, Input, Text } from "@chakra-ui/react"; +// import React, { useState, useContext } from "react"; +// import { useMutation } from "@apollo/client"; +// import ModalContainer from "../../../../admin/common/form/ModalContainer"; +// import { ParticipantContext } from "../../../common/ParticipantContext"; +// import { SET_MARILLAC_BUCKS_GOAL } from "../../../../gql/mutations"; +// +// interface SetGoalProps { +// handleClose: () => void; +// onGoalSet: () => void; +// } +// +// export const SetGoal: React.FC = ({ handleClose, onGoalSet }) => { +// const [goal, setGoal] = useState(""); +// const [error, setError] = useState(""); +// const participantContext = useContext(ParticipantContext); +// +// const [setGoalMutation] = useMutation(SET_MARILLAC_BUCKS_GOAL); +// +// const handleSave = async () => { +// console.log("🎯 SetGoal: Starting save process"); +// console.log("📝 Goal value entered:", goal); +// console.log("👤 Participant context:", participantContext); +// +// if (!participantContext) { +// console.error("❌ No participant context found"); +// setError("Not logged in"); +// return; +// } +// +// const goalValue = parseInt(goal, 10); +// console.log("🔢 Parsed goal value:", goalValue); +// +// if (Number.isNaN(goalValue) || goalValue <= 0) { +// console.error("❌ Invalid goal value"); +// setError("Goal must be greater than 0"); +// return; +// } +// +// console.log("✅ Calling mutation with:", { +// participant_id: participantContext.id, +// goal_value: goalValue, +// }); +// +// try { +// const result = await setGoalMutation({ +// variables: { +// participant_id: participantContext.id, +// goal_value: goalValue, +// }, +// }); +// +// console.log("✅ Mutation success:", result); +// console.log("🎯 Goal saved successfully!"); +// console.log( +// `✅ GOAL SAVED: ${goalValue} Marillac Bucks for participant ${participantContext.id}` +// ); +// +// onGoalSet(); +// handleClose(); +// } catch (err: any) { +// console.error("❌ Error saving goal:", err); +// console.error("📋 Error details:", JSON.stringify(err, null, 2)); +// setError(err.message || "Failed to save goal — please try again."); +// } +// }; +// +// return ( +// { +// await handleSave(); +// }} +// cancel_action={handleClose} +// error={error} +// > +// +// New goal: +// +// coin +// { +// e.target.select(); +// }} +// onChange={(e) => { +// setGoal(e.target.value); +// }} +// /> +// +// +// +// ); +// }; diff --git a/frontend/src/participant/pages/progress/elements/BucksGoalCard.tsx b/frontend/src/participant/pages/progress/elements/BucksGoalCard.tsx index 553e5045..54c524ad 100644 --- a/frontend/src/participant/pages/progress/elements/BucksGoalCard.tsx +++ b/frontend/src/participant/pages/progress/elements/BucksGoalCard.tsx @@ -1,106 +1,108 @@ -import React from "react"; -import { - Text, - Card, - CardHeader, - CardBody, - Progress, - Image, - Flex, - Button, - Box, -} from "@chakra-ui/react"; - -type BucksGoalCardProps = { - value: number; - goal: number | null; - onEditGoalClick?: () => void; -}; - -export default function BucksGoalCard({ - value, - goal, - onEditGoalClick, -}: BucksGoalCardProps) { - const metGoal = value >= (goal ?? -1); - const goalExists = !!goal; - - const editGoalText = () => { - if (!goalExists) return "Set Goal"; - if (!metGoal) return "Change Goal"; - return "Set another"; - }; - - return ( - - - - Marillac Bucks Goal - - - - - {goalExists ? ( - metGoal ? ( - - $ - - Congratulations on completing your goal. Make sure to tell - Marillac staff about your achievement. - - - ) : ( - - - - - $0 - - {value / goal > 0.25 && ( - - - - - ${value} - - )} - - ${goal} - - - - ) - ) : ( - Set a new goal to track your progress! - )} - - - ); -} +export {}; +// TODO: Refactor this component +// import React from "react"; +// import { +// Text, +// Card, +// CardHeader, +// CardBody, +// Progress, +// Image, +// Flex, +// Button, +// Box, +// } from "@chakra-ui/react"; +// +// type BucksGoalCardProps = { +// value: number; +// goal: number | null; +// onEditGoalClick?: () => void; +// }; +// +// export default function BucksGoalCard({ +// value, +// goal, +// onEditGoalClick, +// }: BucksGoalCardProps) { +// const metGoal = value >= (goal ?? -1); +// const goalExists = !!goal; +// +// const editGoalText = () => { +// if (!goalExists) return "Set Goal"; +// if (!metGoal) return "Change Goal"; +// return "Set another"; +// }; +// +// return ( +// +// +// +// Marillac Bucks Goal +// +// +// +// +// {goalExists ? ( +// metGoal ? ( +// +// $ +// +// Congratulations on completing your goal. Make sure to tell +// Marillac staff about your achievement. +// +// +// ) : ( +// +// +// +// +// $0 +// +// {value / goal > 0.25 && ( +// +// +// +// +// ${value} +// +// )} +// +// ${goal} +// +// +// +// ) +// ) : ( +// Set a new goal to track your progress! +// )} +// +// +// ); +// } diff --git a/frontend/src/participant/pages/schedule/Main.tsx b/frontend/src/participant/pages/schedule/Main.tsx index 169d0bcf..a9b3aafc 100644 --- a/frontend/src/participant/pages/schedule/Main.tsx +++ b/frontend/src/participant/pages/schedule/Main.tsx @@ -1,5 +1,7 @@ -import React from "react"; - -export default function ParticipantsSchedulePage() { - return <>schedule page; -} +export {}; +// TODO: Refactor this component +// import React from "react"; +// +// export default function ParticipantsSchedulePage() { +// return <>schedule page; +// } diff --git a/frontend/src/theme/buttons.ts b/frontend/src/theme/buttons.ts deleted file mode 100644 index 71358f42..00000000 --- a/frontend/src/theme/buttons.ts +++ /dev/null @@ -1,177 +0,0 @@ -import { defineStyleConfig } from "@chakra-ui/react"; - -const Button = defineStyleConfig({ - baseStyle: { - fontFamily: "Nunito", - }, - variants: { - primaryFilled: { - borderRadius: "8px", - border: "1px", - borderColor: "#E67D4F", - padding: "8px 24px", - bg: "#E67D4F", - color: "#FFFFFF", - cursor: "pointer", - width: "fit-content", - height: "fit-content", - _hover: { - bg: "#D76A3B", - }, - _disabled: { - opacity: 0.5, - cursor: "not-allowed", - pointerEvents: "none", - }, - }, - primaryOutline: { - borderRadius: "8px", - border: "1px", - borderColor: "#E67D4F", - padding: "8px 24px", - bg: "#FFFFFF", - color: "#E67D4F", - cursor: "pointer", - width: "fit-content", - height: "fit-content", - _hover: { - color: "#FFFFFF", - bg: "#E67D4F", - }, - _active: { - color: "#FFFFFF", - bg: "#E67D4F", - }, - _disabled: { - opacity: 0.5, - border: "0px", - color: "#FFFFFF", - bg: "#E67D4F", - cursor: "not-allowed", - pointerEvents: "none", - }, - }, - secondaryFilled: { - borderRadius: "8px", - padding: "8px 24px", - bg: "#0C727E", - color: "#FFFFFF", - cursor: "pointer", - width: "fit-content", - height: "fit-content", - _hover: { - bg: "#065761", - }, - _disabled: { - opacity: 0.5, - cursor: "not-allowed", - pointerEvents: "none", - }, - }, - secondaryOutline: { - borderRadius: "8px", - border: "1px", - borderColor: "#0C727E", - padding: "8px 24px", - bg: "#FFFFFF", - color: "#0C727E", - cursor: "pointer", - width: "fit-content", - height: "fit-content", - _hover: { - color: "#FFFFFF", - bg: "#0C727E", - }, - _active: { - color: "#FFFFFF", - bg: "#0C727E", - }, - _disabled: { - opacity: 0.5, - border: "0px", - color: "#FFFFFF", - bg: "#0C727E", - cursor: "not-allowed", - pointerEvents: "none", - }, - }, - secondaryOutlineMobile: { - borderRadius: "8px", - border: "1px", - borderColor: "#0C727E", - padding: "8px 16px", - bg: "#FFFFFF", - color: "#0C727E", - cursor: "pointer", - width: "fit-content", - height: "fit-content", - fontWeight: 400, - fontSize: "12px", - _hover: { - color: "#FFFFFF", - bg: "#0C727E", - }, - _active: { - color: "#FFFFFF", - bg: "#0C727E", - }, - _disabled: { - opacity: 0.5, - border: "0px", - color: "#FFFFFF", - bg: "#0C727E", - cursor: "not-allowed", - pointerEvents: "none", - }, - }, - white: { - borderRadius: "8px", - border: "1px", - borderColor: "#C5C8D8", - padding: "8px 24px", - bg: "#FFFFFF", - color: "#000000", - cursor: "pointer", - width: "fit-content", - height: "fit-content", - _hover: { - bg: "#F5F6F8", - }, - _disabled: { - opacity: 0.5, - cursor: "not-allowed", - pointerEvents: "none", - }, - }, - red: { - borderRadius: "8px", - border: "1px", - borderColor: "#E30000", - padding: "8px 24px", - bg: "#FFFFFF", - color: "#E30000", - cursor: "pointer", - width: "fit-content", - height: "fit-content", - _hover: { - color: "#FFFFFF", - bg: "#E30000", - }, - _active: { - border: "0px", - color: "#FFFFFF", - bg: "#E30000", - }, - _disabled: { - opacity: 0.5, - border: "0px", - color: "#FFFFFF", - bg: "#E30000", - cursor: "not-allowed", - pointerEvents: "none", - }, - }, - }, -}); - -export default Button; diff --git a/frontend/src/theme/colors.ts b/frontend/src/theme/colors.ts index 6632f687..d8670dd5 100644 --- a/frontend/src/theme/colors.ts +++ b/frontend/src/theme/colors.ts @@ -1,3 +1,6 @@ +// TODO (calista): +// go over Figma design update & categorize colors definition + const colors = { task_status: { complete: "#0D8312", diff --git a/frontend/src/theme/form.ts b/frontend/src/theme/form.ts deleted file mode 100644 index c7a10e85..00000000 --- a/frontend/src/theme/form.ts +++ /dev/null @@ -1,66 +0,0 @@ -import { defineStyleConfig } from "@chakra-ui/react"; - -import { inputAnatomy, selectAnatomy } from "@chakra-ui/anatomy"; -import { createMultiStyleConfigHelpers } from "@chakra-ui/styled-system"; - -const inputHelpers = createMultiStyleConfigHelpers(inputAnatomy.keys); -const selectHelpers = createMultiStyleConfigHelpers(selectAnatomy.keys); - -export const Input = inputHelpers.defineMultiStyleConfig({ - variants: { - primary: { - field: { - padding: "8px 16px", - border: "1px", - borderColor: "#C5C8D8", - borderRadius: "8px", - fontFamily: "Nunito", - fontWeight: "400", - fontSize: "12px", - _placeholder: { - color: "#808080", - }, - }, - }, - }, -}); - -export const Select = selectHelpers.defineMultiStyleConfig({ - variants: { - primary: { - field: { - padding: "8px 16px", - border: "1px", - borderColor: "#C5C8D8", - borderRadius: "8px", - fontFamily: "Nunito", - fontWeight: "400", - fontSize: "12px", - _placeholder: { - fontFamily: "Nunito", - fontWeight: "400", - fontSize: "12px", - }, - }, - }, - }, -}); - -export const Textarea = defineStyleConfig({ - variants: { - primary: { - padding: "8px 16px", - border: "1px solid", - borderColor: "#C5C8D8", - borderRadius: "8px", - fontFamily: "Nunito", - fontWeight: "400", - fontSize: "12px", - _placeholder: { - color: "#808080", - fontWeight: "400", - fontSize: "12px", - }, - }, - }, -}); diff --git a/frontend/src/theme/typography.ts b/frontend/src/theme/typography.ts index a98d9f59..978e8935 100644 --- a/frontend/src/theme/typography.ts +++ b/frontend/src/theme/typography.ts @@ -1,3 +1,7 @@ +// TODO (calista): +// Go over Figma design update & categorize text styles +// standardize text style for error messages + import { defineStyleConfig } from "@chakra-ui/react"; export const Text = defineStyleConfig({ diff --git a/frontend/src/types/AnnouncementTypes.tsx b/frontend/src/types/AnnouncementTypes.tsx deleted file mode 100644 index 1d9958e7..00000000 --- a/frontend/src/types/AnnouncementTypes.tsx +++ /dev/null @@ -1,34 +0,0 @@ -export interface Participant { - participant_id: number; - room_number: number; - arrival_date: string; - departure_date?: string; -} - -export interface UserAnnouncement { - read: boolean; - pinned: boolean; - participant_id: number; - participant: Participant; -} - -export interface AnnouncementData { - announcement_id: number; - priority: string; - creation_date: string; - message: string; - user_announcements: UserAnnouncement[]; -} - -export interface AnnouncementDisplayInfo { - announcement_id: number; - rooms: number[]; - creation_date: Date; - message: string; -} - -export enum Priority { - NORMAL = "NORMAL", - HIGH = "HIGH", - CRITICAL = "CRITICAL", -} diff --git a/frontend/src/types/BadgeTypes.tsx b/frontend/src/types/BadgeTypes.tsx deleted file mode 100644 index 6be168ee..00000000 --- a/frontend/src/types/BadgeTypes.tsx +++ /dev/null @@ -1,21 +0,0 @@ -export enum BadgeType { - SYSTEM = "SYSTEM", - CUSTOM = "CUSTOM", -} - -export interface Badge { - badgeId: number; - badgeType: BadgeType; - name: string; - description: string; - isActive: boolean; - isConsecutive: boolean; - badgeLevel: [BadgeLevel]; -} - -export interface BadgeLevel { - badgeId: number; - level: number; - benchmark: number; - marillacBucks: number; -} diff --git a/frontend/src/types/component.ts b/frontend/src/types/component.ts index 1645b0b9..99780b6e 100644 --- a/frontend/src/types/component.ts +++ b/frontend/src/types/component.ts @@ -1,32 +1,19 @@ -/* eslint-disable @typescript-eslint/no-explicit-any */ export type ButtonProps = { - text: string; + label: string; action: () => void; is_active: boolean; -}; - -export type ModalProps = { - title: string; - submit_text: string; - submit_action: () => void; - cancel_action: () => void; - children: React.ReactNode; - error?: string; + icon?: JSX.Element; }; export type InputProps = { - label: string; + label?: string; + placeholder?: string; current_value: any; - action: any; - width?: string; + update_action: React.Dispatch>; + size: "small" | "medium" | "large"; }; -export type TableProps = { - loading: boolean; - edit: boolean; - selected: any; - error: any; - columns: { header: string; width: string; sort?: JSX.Element }[]; - rows: JSX.Element[][]; - editModal: JSX.Element | null; +export type IconProps = { + size?: number; + color?: string; }; diff --git a/frontend/src/types/enums.ts b/frontend/src/types/enums.ts new file mode 100644 index 00000000..a9bc4162 --- /dev/null +++ b/frontend/src/types/enums.ts @@ -0,0 +1,77 @@ +export enum DayOfWeek { + SUNDAY = "SUNDAY", + MONDAY = "MONDAY", + TUESDAY = "TUESDAY", + WEDNESDAY = "WEDNESDAY", + THURSDAY = "THURSDAY", + FRIDAY = "FRIDAY", + SATURDAY = "SATURDAY", +} + +export enum DayPreference { + DAILY = "DAILY", + DAY_RANGE = "DAY_RANGE", + EVERY_SELECTED_DAYS = "EVERY_SELECTED_DAYS", + PARTICIPANT_PREFERENCE = "PARTICIPANT_PREFERENCE", +} + +export enum GoalAction { + REACHED = "REACHED", + SET = "SET", +} + +export enum Icon { + BABY = "BABY", + DIAMOND = "DIAMOND", + FIVE_STAR = "FIVE_STAR", + FLOWER = "FLOWER", + FOUR_STAR = "FOUR_STAR", + GEMSTONE = "GEMSTONE", + GROUP = "GROUP", + HEART = "HEART", + HOME = "HOME", + MONEY = "MONEY", + PENCIL = "PENCIL", + TOOL = "TOOL", + WINGS = "WINGS", + PLANT = "PLANT", +} + +export enum Level { + NOVICE = "NOVICE", + BRONZE = "BRONZE", + SILVER = "SILVER", + GOLD = "GOLD", + DIAMOND = "DIAMOND", +} + +export enum Priority { + NORMAL = "NORMAL", + HIGH = "HIGH", + CRITICAL = "CRITICAL", +} + +export enum TaskStatus { + ASSIGNED = "ASSIGNED", + COMPLETE = "COMPLETE", + EXCUSED = "EXCUSED", + INCOMPLETE = "INCOMPLETE", +} + +export enum TaskType { + INDIVIDUAL_GOAL = "INDIVIDUAL_GOAL", + OPTIONAL = "OPTIONAL", + REQUIRED = "REQUIRED", +} + +export enum TimePreference { + ANYTIME = "ANYTIME", + PARTICIPANT_PREFERENCE = "PARTICIPANT_PREFERENCE", + SPECIFIC = "SPECIFIC", +} + +export enum TransactionType { + EARNING = "EARNING", + PURCHASE = "PURCHASE", + REFUND = "REFUND", +} diff --git a/frontend/src/types/models.ts b/frontend/src/types/models.ts new file mode 100644 index 00000000..f589d7bb --- /dev/null +++ b/frontend/src/types/models.ts @@ -0,0 +1,176 @@ +import { + Level, + Priority, + TaskType, + TaskStatus, + Icon, + GoalAction, + DayPreference, + DayOfWeek, + TimePreference, + TransactionType, +} from "./enums"; + +export interface AchievedBadgeLevel { + name: string; + level: Level; + pid: number; + date: string; + + badge_level?: BadgeLevel; + participant?: Participant; +} + +export interface Announcement { + aid: number; + date: string; + message: string; + priority: Priority; + + ReceivedAnnouncement?: ReceivedAnnouncement[]; +} + +export interface AssignedTask { + aid: number; + pid: number; + tid: number; + name: string; + type: TaskType; + status: TaskStatus; + value: number; + penalty: number; + comment?: string; + start_date: string; + end_date: string; + + participant?: Participant; +} + +export interface BadgeLevel { + name: string; + level: Level; + value: number; + benchmark: number; + + AchievedBadgeLevel?: AchievedBadgeLevel[]; + BadgeLevelProgress?: BadgeLevelProgress[]; + + system_badge?: SystemBadge; +} + +export interface BadgeLevelProgress { + name: string; + level: Level; + pid: number; + progress: number; + + badge_level?: BadgeLevel; + participant?: Participant; +} + +export interface CustomBadge { + cid: number; + name: string; + icon: Icon; + description: string; +} + +export interface EarningGoal { + pid: number; + action: GoalAction; + date: string; + value: number; + + participant?: Participant; +} + +export interface EarnedCustomBadge { + eid: number; + pid: number; + name: string; + icon: Icon; + description: string; + + participant?: Participant; +} + +export interface LoginHistory { + pid: number; + date: string; + + participant?: Participant; +} + +export interface Note { + nid: number; + message: string; + date: string; +} + +export interface Participant { + pid: number; + password: string; + room: number; + arrival: string; + departure?: string; + balance: number; + total_earnings: number; + + Transaction?: Transaction[]; + EarningGoal?: EarningGoal[]; + LoginHistory?: LoginHistory[]; + ReceivedAnnouncement?: ReceivedAnnouncement[]; + AssignedTask?: AssignedTask[]; + EarnedCustomBadge?: EarnedCustomBadge[]; + AchievedBadgeLevel?: AchievedBadgeLevel[]; + BadgeLevelProgress?: BadgeLevelProgress[]; +} + +export interface ReceivedAnnouncement { + aid: number; + pid: number; + read: boolean; + pinned: boolean; + + participant?: Participant; + announcement?: Announcement; +} + +export interface ReportRecipient { + email: string; + weekly: boolean; + monthly: boolean; +} + +export interface SystemBadge { + name: string; + icon: Icon; + description: string; + is_active: boolean; + + BadgeLevel?: BadgeLevel[]; +} + +export interface Task { + tid: number; + name: string; + type: TaskType; + value: number; + penalty: number; + comment?: string; + day_preference: DayPreference; + days: DayOfWeek[]; + time_preference: TimePreference; + start_time?: string; + end_time?: string; +} + +export interface Transaction { + pid: number; + date: string; + amount: number; + type: TransactionType; + reason: string; + + participant?: Participant; +} diff --git a/frontend/src/types/task.ts b/frontend/src/types/task.ts deleted file mode 100644 index 37f1d194..00000000 --- a/frontend/src/types/task.ts +++ /dev/null @@ -1,42 +0,0 @@ -export enum TaskType { - REQUIRED = "REQUIRED", - OPTIONAL = "OPTIONAL", - INDIVIDUAL_GOAL = "INDIVIDUAL_GOAL", -} - -export enum RecurrenceFrequency { - DAILY = "DAILY", - EVERY_SELECTED_DAYS = "EVERY_SELECTED_DAYS", - ANY_SELECTED_DAYS = "ANY_SELECTED_DAYS", - PARTICIPANT_PREFERENCE = "PARTICIPANT_PREFERENCE", -} - -export enum DayOfWeek { - MONDAY = "MONDAY", - TUESDAY = "TUESDAY", - WEDNESDAY = "WEDNESDAY", - THURSDAY = "THURSDAY", - FRIDAY = "FRIDAY", - SATURDAY = "SATURDAY", - SUNDAY = "SUNDAY", -} - -export enum TimeOption { - ANYTIME = "ANYTIME", - SPECIFIC = "SPECIFIC", - PARTICIPANT_PREFERENCE = "PARTICIPANT_PREFERENCE", -} - -export type TaskInfo = { - task_id: number; - task_name: string; - task_type: TaskType; - recurrence_preference: RecurrenceFrequency; - repeat_days: DayOfWeek[]; - time_preference: TimeOption; - start_time?: string; - end_time?: string; - marillac_bucks_addition: number; - marillac_bucks_deduction: number; - comment?: string; -}; diff --git a/frontend/src/ui/UI.tsx b/frontend/src/ui/UI.tsx new file mode 100644 index 00000000..33a73692 --- /dev/null +++ b/frontend/src/ui/UI.tsx @@ -0,0 +1,671 @@ +import { Box, Flex, Text } from "@chakra-ui/react"; +import React, { useState } from "react"; +import { subDays, addDays, startOfDay, set } from "date-fns"; +import BlackOutlineButton from "./buttons/BlackOutlineButton"; +import OrangeButton from "./buttons/OrangeButton"; +import GreenOutlineButton from "./buttons/GreenOutlineButton"; +import UnderlineButton from "./buttons/UnderlineButton"; +import { Comment, Marker, Pin, PlusSign, Trash } from "./icons/ActionIcons"; +import WidgetContainer from "./containers/WidgetContainer"; +import PopupContainer from "./containers/PopupContainer"; +import { + Baby, + FourStar, + Group, + Flower, + Diamond, + DollarSign, + FiveStar, + Heart, + Hexagon, + Home, + Pencil, + Plant, + Tools, + Wings, +} from "./icons/BadgeIcons"; +import { + Gold, + Bronze, + Silver, + Novice, + Diamond as DiamondFrame, +} from "./icons/BadgeLevelFrameIcons"; +import { MarillacCoin, Profile, Trophy } from "./icons/MiscIcons"; +import { Dot, ExclamationMark, Mail } from "./icons/NotificationIcons"; +import { Assigned, Complete, Excused, Incomplete } from "./icons/StatusIcons"; +import DateInput from "./inputs/DateInput"; +import FixedInput from "./inputs/FixedInput"; +import TextInput from "./inputs/TextInput"; +import TimeInput from "./inputs/TimeInput"; +import NumberInput from "./inputs/NumberInput"; +import PasswordInput from "./inputs/PasswordInput"; +import TextAreaInput from "./inputs/TextAreaInput"; +import DropdownInput from "./inputs/DropdownInput"; +import SelectInput from "./inputs/SelectInput"; +import MarillacPlaceCalendar from "./misc/MarillacPlaceCalendar"; +import DataTable from "./misc/DataTable"; +import DateOptions from "./misc/DateOptions"; +import { AssignedTask } from "../types/models"; +import { + Level, + TaskStatus, + TaskType, + Icon, + DayPreference, + TimePreference, + DayOfWeek, +} from "../types/enums"; +import Badge from "./misc/BadgeProgress"; +import TaskStatusDisplay from "./misc/TaskStatusDisplay"; +import ToggleButton from "./buttons/ToggleButton"; + +export default function UI() { + const [showPopup, setShowPopup] = useState(false); + const [showLoadingPopup, setShowLoadingPopup] = useState(false); + const [showErrorPopup, setShowErrorPopup] = useState(false); + const [date, setDate] = useState(new Date()); + const [time, setTime] = useState(new Date()); + const [number, setNumber] = useState(0); + const [text, setText] = useState(""); + const [textarea, setTextarea] = useState(""); + const [password, setPassword] = useState(""); + const [dropdown, setDropdown] = useState(""); + const [select, setSelect] = useState(""); + const options: Record = { + "Option 1": "option1", + "Option 2": "option2", + "Option 3": "option3", + }; + const [startDate, setStartDate] = useState(new Date()); + const [viewTaskDetails, setViewTaskDetails] = useState( + null + ); + const [dateOptionDayPreference, setDateOptionDayPreference] = + useState(null); + const [dateOptionDays, setDateOptionDays] = useState( + null + ); + const [dateOptionTimePreference, setDateOptionTimePreference] = + useState(null); + const [dateOptionStartTime, setDateOptionStartTime] = useState( + null + ); + const [dateOptionEndTime, setDateOptionEndTime] = useState(null); + const [showDateOptions, setShowDateOptions] = useState(false); + const [toggleActive, setToggleActive] = useState(false); + const dataTableColumns = [ + { header: "Column 1", width: "30%" }, + { header: "Column 2", width: "20%" }, + { header: "Column 3", width: "40%" }, + { header: "", width: "10%" }, + ]; + const dataTableRows = [ + [ + { + element: "Row 1.1", + }, + { + element: "Row 2.1", + }, + { + element: "Row 3.1", + }, + { + element: , + action: () => console.log("action"), + }, + ], + [ + { + element: "Row 1.2", + }, + { + element: "Row 2.2", + }, + { + element: "Row 3.2", + }, + { + element: , + action: () => console.log("action"), + }, + ], + [ + { + element: "Row 1.3", + }, + { + element: "Row 2.3", + }, + { + element: "Row 3.3", + }, + { + element: , + action: () => console.log("action"), + }, + ], + ]; + const assignedTasks: AssignedTask[] = [ + { + aid: 1, + tid: 1, + pid: 1, + name: "Task 1", + type: TaskType.REQUIRED, + status: TaskStatus.ASSIGNED, + value: 10, + penalty: 5, + comment: "Comment 1", + start_date: subDays(new Date(), 1).toISOString(), + end_date: new Date().toISOString(), + }, + { + aid: 2, + tid: 2, + pid: 1, + name: "Task 2", + type: TaskType.OPTIONAL, + status: TaskStatus.EXCUSED, + value: 10, + penalty: 5, + comment: "Comment 2", + start_date: addDays(new Date(), 2).toISOString(), + end_date: addDays(new Date(), 5).toISOString(), + }, + { + aid: 3, + tid: 3, + pid: 1, + name: "Task 3", + type: TaskType.OPTIONAL, + status: TaskStatus.INCOMPLETE, + value: 10, + penalty: 5, + comment: "Comment 2", + start_date: set(new Date(), { + hours: 8, + minutes: 0, + seconds: 0, + milliseconds: 0, + }).toISOString(), + end_date: set(new Date(), { + hours: 12, + minutes: 0, + seconds: 0, + milliseconds: 0, + }).toISOString(), + }, + { + aid: 4, + tid: 4, + pid: 1, + name: "Task 4", + type: TaskType.INDIVIDUAL_GOAL, + status: TaskStatus.COMPLETE, + value: 10, + penalty: 5, + comment: "Comment 2", + start_date: set(addDays(new Date(), 1), { + hours: 11, + minutes: 0, + seconds: 0, + milliseconds: 0, + }).toISOString(), + end_date: set(addDays(new Date(), 1), { + hours: 14, + minutes: 0, + seconds: 0, + milliseconds: 0, + }).toISOString(), + }, + ]; + + return ( + + + Marillac Place UI Components + + + Buttons + + { + console.log("clicked"); + }} + is_active={false} + /> + { + console.log("clicked"); + }} + is_active + /> + { + console.log("clicked"); + }} + is_active={false} + icon={} + /> + { + console.log("clicked"); + }} + is_active={false} + text_color="red" + /> + + + { + console.log("clicked"); + }} + is_active={false} + /> + { + console.log("clicked"); + }} + is_active + /> + { + console.log("clicked"); + }} + is_active={false} + icon={} + /> + + + { + console.log("clicked"); + }} + is_active={false} + /> + { + console.log("clicked"); + }} + is_active + /> + + { + console.log("clicked"); + }} + /> + + + Containers + + + WidgetContainer + + + WidgetContainer (bg color) + + + WidgetContainer (loading) + + + WidgetContainer (error) + + + + { + setShowPopup(true); + }} + /> + { + setShowLoadingPopup(true); + }} + /> + { + setShowErrorPopup(true); + }} + /> + {showPopup && ( + { + console.log("submit"); + }} + cancel_action={() => { + setShowPopup(false); + }} + error_message="" + loading={false} + > + PopupContainer + + )} + {showLoadingPopup && ( + { + console.log("submit"); + }} + cancel_action={() => { + setShowLoadingPopup(false); + }} + error_message="" + loading + > + PopupContainer (loading) + + )} + {showErrorPopup && ( + { + console.log("submit"); + }} + cancel_action={() => { + setShowErrorPopup(false); + }} + system_error + loading={false} + > + PopupContainer (error) + + )} + + + Badges + + + + + + + + + Icons + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Inputs + + + + + + + + + + + + + + + + + + Date Options + setShowDateOptions(!showDateOptions)} + /> + {showDateOptions && ( + { + console.log("submit"); + }} + cancel_action={() => { + setShowDateOptions(false); + }} + error_message="" + loading={false} + > + setDateOptionDays(value ?? [])} + setTimePreference={setDateOptionTimePreference} + setStartTime={setDateOptionStartTime} + setEndTime={setDateOptionEndTime} + dayPreference={dateOptionDayPreference} + days={dateOptionDays} + timePreference={dateOptionTimePreference} + startTime={dateOptionStartTime} + endTime={dateOptionEndTime} + /> + + )} + + Task Status Display + + + + + + + + Calendar (Web) + + + + + Calendar (Mobile) + + + + + Data Table + + + + + + + + + + + ); +} diff --git a/frontend/src/admin/common/buttons/SimpleButton.tsx b/frontend/src/ui/buttons/BlackOutlineButton.tsx similarity index 58% rename from frontend/src/admin/common/buttons/SimpleButton.tsx rename to frontend/src/ui/buttons/BlackOutlineButton.tsx index f39f8af4..7376d9ff 100644 --- a/frontend/src/admin/common/buttons/SimpleButton.tsx +++ b/frontend/src/ui/buttons/BlackOutlineButton.tsx @@ -1,19 +1,18 @@ import React from "react"; import { Button, Flex, Text } from "@chakra-ui/react"; -import { ButtonProps } from "../../../types/component"; +import { ButtonProps } from "../../types/component"; -type SimpleButtonProps = ButtonProps & { - text_color: string; - icon?: JSX.Element; +type BlackOutlineButtonProps = ButtonProps & { + text_color?: string; }; -export default function SimpleButton({ - text, +export default function BlackOutlineButton({ + label, action, is_active, - text_color, + text_color = "#000000", icon, -}: SimpleButtonProps) { +}: BlackOutlineButtonProps) { return ( diff --git a/frontend/src/admin/common/buttons/GreenButton.tsx b/frontend/src/ui/buttons/GreenOutlineButton.tsx similarity index 67% rename from frontend/src/admin/common/buttons/GreenButton.tsx rename to frontend/src/ui/buttons/GreenOutlineButton.tsx index 3ab26d9a..a5161cd2 100644 --- a/frontend/src/admin/common/buttons/GreenButton.tsx +++ b/frontend/src/ui/buttons/GreenOutlineButton.tsx @@ -1,8 +1,14 @@ import React from "react"; -import { Button, Text } from "@chakra-ui/react"; -import { ButtonProps } from "../../../types/component"; +import { Button, Flex, Text } from "@chakra-ui/react"; +import { ButtonProps } from "../../types/component"; -export default function GreenButton({ text, action, is_active }: ButtonProps) { +type GreenOutlineButtonProps = Omit; + +export default function GreenOutlineButton({ + label, + action, + is_active, +}: ButtonProps) { return ( ); diff --git a/frontend/src/admin/common/buttons/OrangeButton.tsx b/frontend/src/ui/buttons/OrangeButton.tsx similarity index 58% rename from frontend/src/admin/common/buttons/OrangeButton.tsx rename to frontend/src/ui/buttons/OrangeButton.tsx index cabfa5d5..98dcbdbd 100644 --- a/frontend/src/admin/common/buttons/OrangeButton.tsx +++ b/frontend/src/ui/buttons/OrangeButton.tsx @@ -1,8 +1,13 @@ import React from "react"; -import { Button, Text } from "@chakra-ui/react"; -import { ButtonProps } from "../../../types/component"; +import { Button, Flex, Text } from "@chakra-ui/react"; +import { ButtonProps } from "../../types/component"; -export default function OrangeButton({ text, action, is_active }: ButtonProps) { +export default function OrangeButton({ + label, + action, + is_active, + icon, +}: ButtonProps) { return ( ); } diff --git a/frontend/src/ui/buttons/ToggleButton.tsx b/frontend/src/ui/buttons/ToggleButton.tsx new file mode 100644 index 00000000..7a547099 --- /dev/null +++ b/frontend/src/ui/buttons/ToggleButton.tsx @@ -0,0 +1,41 @@ +import { Box, Flex } from "@chakra-ui/react"; +import React from "react"; + +interface ToggleButtonProps { + active: boolean; + setActive: (active: boolean) => void; +} + +export default function ToggleButton({ active, setActive }: ToggleButtonProps) { + return ( + setActive(!active)} + _hover={{ + opacity: 0.8, + }} + _active={{ + opacity: 0.9, + }} + > + + + ); +} diff --git a/frontend/src/ui/buttons/UnderlineButton.tsx b/frontend/src/ui/buttons/UnderlineButton.tsx new file mode 100644 index 00000000..3623999b --- /dev/null +++ b/frontend/src/ui/buttons/UnderlineButton.tsx @@ -0,0 +1,36 @@ +import React from "react"; +import { Button, Text } from "@chakra-ui/react"; +import { ButtonProps } from "../../types/component"; + +type UnderlineButtonProps = Omit; + +export default function UnderlineButton({ + label, + action, +}: UnderlineButtonProps) { + return ( + + ); +} diff --git a/frontend/src/ui/containers/PopupContainer.tsx b/frontend/src/ui/containers/PopupContainer.tsx new file mode 100644 index 00000000..6672d978 --- /dev/null +++ b/frontend/src/ui/containers/PopupContainer.tsx @@ -0,0 +1,107 @@ +import React from "react"; +import { + Modal, + ModalOverlay, + ModalContent, + Flex, + Text, + Spinner, +} from "@chakra-ui/react"; +import BlackOutlineButton from "../buttons/BlackOutlineButton"; +import OrangeButton from "../buttons/OrangeButton"; + +type PopupContainerProps = { + title: string; + submit_text?: string; + submit_action?: () => void; + cancel_action: () => void; + children: React.ReactNode; + system_error?: boolean; + error_message?: string; + loading?: boolean; +}; + +export default function PopupContainer({ + title, + submit_text = "Save", + submit_action, + cancel_action, + children, + system_error = false, + error_message = "", + loading = false, +}: PopupContainerProps) { + return ( + + + + + {title} + + + {loading ? ( + + + + ) : system_error ? ( + + + ERROR + + + Something went wrong. + + + ) : ( + children + )} + + {error_message && ( + + {error_message} + + )} + + + + {submit_action && ( + + )} + + + + ); +} diff --git a/frontend/src/ui/containers/WidgetContainer.tsx b/frontend/src/ui/containers/WidgetContainer.tsx new file mode 100644 index 00000000..732d33b1 --- /dev/null +++ b/frontend/src/ui/containers/WidgetContainer.tsx @@ -0,0 +1,71 @@ +import React from "react"; +import { Box, Flex, Spinner, Text } from "@chakra-ui/react"; + +type WidgetContainerProps = { + bg_color?: string; + children: React.ReactNode; + width?: string; + height?: string; + paddingX?: string; + paddingY?: string; + loading?: boolean; + error?: string; +}; + +export default function WidgetContainer({ + bg_color = "white", + children, + width = "fit-content", + height = "fit-content", + paddingX = "12px", + paddingY = "6px", + loading = false, + error = "", +}: WidgetContainerProps) { + return ( + + {loading ? ( + + + + ) : error !== "" ? ( + + + ERROR + + + {error} + + + ) : ( + children + )} + + ); +} diff --git a/frontend/src/ui/icons/ActionIcons.tsx b/frontend/src/ui/icons/ActionIcons.tsx new file mode 100644 index 00000000..b24320dd --- /dev/null +++ b/frontend/src/ui/icons/ActionIcons.tsx @@ -0,0 +1,149 @@ +import React from "react"; +import { IconProps } from "../../types/component"; +import useChakraColor from "../../hooks/useChakraColor"; + +export const Comment: React.FC = ({ + size = 14, + color = "#626262", +}) => { + const iconColor = useChakraColor(color); + return ( + + + + ); +}; + +export const Pin: React.FC = ({ size = 16, color = "#0C727E" }) => { + const iconColor = useChakraColor(color); + return ( + + + + ); +}; + +export const Marker: React.FC = ({ size = 16, color = "black" }) => { + const iconColor = useChakraColor(color); + return ( + + + + ); +}; + +export const PlusSign: React.FC = ({ + size = 14, + color = "white", +}) => { + const iconColor = useChakraColor(color); + return ( + + + + ); +}; + +export const Airplane: React.FC = ({ size = 16, color = "black" }) => { + const iconColor = useChakraColor(color); + return ( + + + + ); +}; + +export const Trash: React.FC = ({ + size = 16, + color = "#E30000", +}) => { + const iconColor = useChakraColor(color); + return ( + + + + + + + + + + + + + + + ); +}; diff --git a/frontend/src/ui/icons/BadgeIcons.tsx b/frontend/src/ui/icons/BadgeIcons.tsx new file mode 100644 index 00000000..6c0385c8 --- /dev/null +++ b/frontend/src/ui/icons/BadgeIcons.tsx @@ -0,0 +1,345 @@ +import React from "react"; +import { IconProps } from "../../types/component"; +import useChakraColor from "../../hooks/useChakraColor"; + +export const Baby: React.FC = ({ size = 16, color = "#808080" }) => { + const iconColor = useChakraColor(color) + return ( + + + + ) +}; + +export const Diamond: React.FC = ({ + size = 16, + color = "#808080", +}) => { + const iconColor = useChakraColor(color) + return ( + + + + + + + + + ) +}; + +export const DollarSign: React.FC = ({ + size = 16, + color = "#808080", +}) => { + const iconColor = useChakraColor(color) + return ( + + + + ) +}; + +export const FiveStar: React.FC = ({ + size = 16, + color = "#808080", +}) => { + const iconColor = useChakraColor(color) + return ( + + + + ) +}; + +export const Flower: React.FC = ({ + size = 16, + color = "#808080", +}) => { + const iconColor = useChakraColor(color) + return ( + + + + + + ) +}; + +export const FourStar: React.FC = ({ + size = 16, + color = "#808080", +}) => { + const iconColor = useChakraColor(color) + return ( + + + + ) +}; + +export const Group: React.FC = ({ + size = 16, + color = "#808080", +}) => { + const iconColor = useChakraColor(color) + return ( + + + + ) +}; + +export const Heart: React.FC = ({ + size = 16, + color = "#808080", +}) => { + const iconColor = useChakraColor(color) + return ( + + + + ) +}; + +export const Hexagon: React.FC = ({ + size = 16, + color = "#808080", +}) => { + const iconColor = useChakraColor(color) + return ( + + + + ) +}; + +export const Home: React.FC = ({ size = 16, color = "#808080" }) => { + const iconColor = useChakraColor(color) + return ( + + + + ) +}; + +export const Pencil: React.FC = ({ + size = 16, + color = "#808080", +}) => { + const iconColor = useChakraColor(color) + return ( + + + + ) +}; + +export const Plant: React.FC = ({ + size = 16, + color = "#808080", +}) => { + const iconColor = useChakraColor(color) + return ( + + + + + + + + + + + ) +}; + +export const Tools: React.FC = ({ + size = 16, + color = "#808080", +}) => { + const iconColor = useChakraColor(color) + return ( + + + + + + + + + + + ) +}; + +export const Wings: React.FC = ({ + size = 16, + color = "#808080", +}) => { + const iconColor = useChakraColor(color) + return ( + + + + + ) +}; diff --git a/frontend/src/ui/icons/BadgeLevelFrameIcons.tsx b/frontend/src/ui/icons/BadgeLevelFrameIcons.tsx new file mode 100644 index 00000000..0258e0df --- /dev/null +++ b/frontend/src/ui/icons/BadgeLevelFrameIcons.tsx @@ -0,0 +1,227 @@ +import React from "react"; +import { IconProps } from "../../types/component"; +import useChakraColor from "../../hooks/useChakraColor"; + +export const Novice: React.FC = ({ size = 16 }) => ( + + + + + + + + + + +); + +export const Bronze: React.FC = ({ size = 16 }) => ( + + + + + + + + + + + + + + + +); + +export const Silver: React.FC = ({ size = 16 }) => ( + + + + + + + + + + + + + + + +); + +export const Gold: React.FC = ({ size = 16 }) => ( + + + + + + + + + + + + + + + +); + +export const Diamond: React.FC = ({ size = 16 }) => ( + + + + + + + + + + + + + + + +); diff --git a/frontend/src/ui/icons/MiscIcons.tsx b/frontend/src/ui/icons/MiscIcons.tsx new file mode 100644 index 00000000..13098296 --- /dev/null +++ b/frontend/src/ui/icons/MiscIcons.tsx @@ -0,0 +1,133 @@ +import React from "react"; +import { IconProps } from "../../types/component"; +import useChakraColor from "../../hooks/useChakraColor"; + +export const MarillacCoin: React.FC = ({ size = 16 }) => ( + + + + + + + + + + + + + + +); + +export const Profile: React.FC = ({ size = 16 }) => ( + + + + + + + + + + +); + +export const Trophy: React.FC = ({ size = 16 }) => ( + + + + + + + + + + + + + + + + + + + +); diff --git a/frontend/src/ui/icons/NotificationIcons.tsx b/frontend/src/ui/icons/NotificationIcons.tsx new file mode 100644 index 00000000..b376416b --- /dev/null +++ b/frontend/src/ui/icons/NotificationIcons.tsx @@ -0,0 +1,57 @@ +import React from "react"; +import { IconProps } from "../../types/component"; +import useChakraColor from "../../hooks/useChakraColor"; + +export const Mail: React.FC = ({ size = 18, color = "#0C727E" }) => { + const iconColor = useChakraColor(color) + return ( + + + + ) +}; + +export const Dot: React.FC = ({ size = 12, color = "#E67D4F" }) => { + const iconColor = useChakraColor(color) + return ( + + + + ) +}; + +export const ExclamationMark: React.FC = ({ + size = 14, + color = "#D34C5C", +}) => { + const iconColor = useChakraColor(color) + return ( + + + + ) +}; diff --git a/frontend/src/ui/icons/StatusIcons.tsx b/frontend/src/ui/icons/StatusIcons.tsx new file mode 100644 index 00000000..ecf6f84b --- /dev/null +++ b/frontend/src/ui/icons/StatusIcons.tsx @@ -0,0 +1,79 @@ +import React from "react"; +import { IconProps } from "../../types/component"; +import useChakraColor from "../../hooks/useChakraColor"; + +export const Assigned: React.FC = ({ size = 20 }) => ( + + + + +); + +export const Complete: React.FC = ({ size = 20 }) => ( + + + + + +); + +export const Excused: React.FC = ({ size = 20 }) => ( + + + + + +); + +export const Incomplete: React.FC = ({ size = 20 }) => ( + + + + + +); diff --git a/frontend/src/ui/icons/todo.txt b/frontend/src/ui/icons/todo.txt new file mode 100644 index 00000000..3f856b6c --- /dev/null +++ b/frontend/src/ui/icons/todo.txt @@ -0,0 +1 @@ +TODO (calista): Import remaining SVGs from Figma and turn them into React FC's \ No newline at end of file diff --git a/frontend/src/ui/inputs/DateInput.tsx b/frontend/src/ui/inputs/DateInput.tsx new file mode 100644 index 00000000..1210df12 --- /dev/null +++ b/frontend/src/ui/inputs/DateInput.tsx @@ -0,0 +1,46 @@ +import React from "react"; +import { FormControl, Input, Text } from "@chakra-ui/react"; +import { InputProps } from "../../types/component"; +import { + formatDateInputValue, + parseDateInputValue, +} from "../../helpers/formatDateTime"; + +export default function DateInput({ + label, + current_value, + update_action, + size, +}: InputProps) { + const width = + size === "small" ? "100px" : size === "medium" ? "250px" : "400px"; + return ( + + {label && ( + + {label} + + )} + update_action(parseDateInputValue(e.target.value))} + width={width} + height="fit-content" + paddingX="12px" + paddingY="6px" + border="1px" + borderColor="#C5C8D8" + borderRadius="8px" + fontFamily="Nunito" + fontWeight="400" + fontSize="12px" + color="#000000" + _focus={{ + borderColor: "#C5C8D8", + boxShadow: "none", + }} + /> + + ); +} diff --git a/frontend/src/ui/inputs/DropdownInput.tsx b/frontend/src/ui/inputs/DropdownInput.tsx new file mode 100644 index 00000000..b15338fc --- /dev/null +++ b/frontend/src/ui/inputs/DropdownInput.tsx @@ -0,0 +1,54 @@ +// TODO: Refactor the dropdown to match the Figma design + +import React from "react"; +import { FormControl, Text, Select } from "@chakra-ui/react"; +import { InputProps } from "../../types/component"; + +type DropdownInputProps = InputProps & { + value_options: Record; +}; + +export default function DropdownInput({ + label, + current_value, + update_action, + size, + placeholder = "Please Select", + value_options, +}: DropdownInputProps) { + const width = + size === "small" ? "100px" : size === "medium" ? "250px" : "400px"; + return ( + + {label && ( + + {label} + + )} + + + ); +} diff --git a/frontend/src/ui/inputs/FixedInput.tsx b/frontend/src/ui/inputs/FixedInput.tsx new file mode 100644 index 00000000..ba4fed5b --- /dev/null +++ b/frontend/src/ui/inputs/FixedInput.tsx @@ -0,0 +1,30 @@ +import { Flex, Text } from "@chakra-ui/react"; +import React from "react"; +import { toTitleCase } from "../../helpers/stringUtils"; +import { InputProps } from "../../types/component"; + +type FixedInputProps = Omit & { + orientation: "horizontal" | "vertical"; +}; + +export default function FixedInput({ + label = "Label", + current_value, + orientation, +}: FixedInputProps) { + return ( + + + {label} + + + {toTitleCase(current_value as string)} + + + ); +} diff --git a/frontend/src/ui/inputs/NumberInput.tsx b/frontend/src/ui/inputs/NumberInput.tsx new file mode 100644 index 00000000..8a4ecab9 --- /dev/null +++ b/frontend/src/ui/inputs/NumberInput.tsx @@ -0,0 +1,47 @@ +import React from "react"; +import { FormControl, Input, Text } from "@chakra-ui/react"; +import { InputProps } from "../../types/component"; + +export default function NumberInput({ + label, + current_value, + placeholder, + update_action, + size, +}: InputProps) { + const width = + size === "small" ? "100px" : size === "medium" ? "250px" : "400px"; + return ( + + {label && ( + + {label} + + )} + + update_action(e.target.value ? Number(e.target.value) : undefined) + } + width={width} + height="fit-content" + paddingX="12px" + paddingY="6px" + margin="0px" + border="1px" + borderColor="#C5C8D8" + borderRadius="8px" + fontFamily="Nunito" + fontWeight="400" + fontSize="12px" + color="#000000" + _focus={{ + borderColor: "#C5C8D8", + boxShadow: "none", + }} + /> + + ); +} diff --git a/frontend/src/ui/inputs/PasswordInput.tsx b/frontend/src/ui/inputs/PasswordInput.tsx new file mode 100644 index 00000000..5b566e83 --- /dev/null +++ b/frontend/src/ui/inputs/PasswordInput.tsx @@ -0,0 +1,45 @@ +import React from "react"; +import { FormControl, Input, Text } from "@chakra-ui/react"; +import { InputProps } from "../../types/component"; + +export default function PasswordInput({ + label, + current_value, + placeholder = "Password", + update_action, + size, +}: InputProps) { + // TODO: add icon for password visibility toggle and handle click event (i.e. input type is text if visible, password if not) + const width = + size === "small" ? "100px" : size === "medium" ? "250px" : "400px"; + return ( + + {label && ( + + {label} + + )} + update_action(e.target.value)} + width={width} + height="fit-content" + paddingX="12px" + paddingY="6px" + border="1px" + borderColor="#C5C8D8" + borderRadius="8px" + fontFamily="Nunito" + fontWeight="400" + fontSize="12px" + color="#000000" + _focus={{ + borderColor: "#C5C8D8", + boxShadow: "none", + }} + /> + + ); +} diff --git a/frontend/src/ui/inputs/SelectInput.tsx b/frontend/src/ui/inputs/SelectInput.tsx new file mode 100644 index 00000000..93fc6649 --- /dev/null +++ b/frontend/src/ui/inputs/SelectInput.tsx @@ -0,0 +1,50 @@ +import React from "react"; +import { FormControl, RadioGroup, Stack, Radio, Text } from "@chakra-ui/react"; +import { InputProps } from "../../types/component"; + +type SelectInputProps = Omit & { + value_options: Record; +}; + +export default function SelectInput({ + label, + current_value, + update_action, + value_options, +}: SelectInputProps) { + return ( + + {label && ( + + {label} + + )} + update_action(selected)} + > + + {Object.entries(value_options).map(([key, value], index) => ( + + + {key} + + + ))} + + + + ); +} diff --git a/frontend/src/admin/common/form/TextInput.tsx b/frontend/src/ui/inputs/TextAreaInput.tsx similarity index 60% rename from frontend/src/admin/common/form/TextInput.tsx rename to frontend/src/ui/inputs/TextAreaInput.tsx index 346ff403..d9db891c 100644 --- a/frontend/src/admin/common/form/TextInput.tsx +++ b/frontend/src/ui/inputs/TextAreaInput.tsx @@ -1,21 +1,25 @@ import React from "react"; import { FormControl, Text, Textarea } from "@chakra-ui/react"; -import { InputProps } from "../../../types/component"; +import { InputProps } from "../../types/component"; -export default function TextInput({ +export default function TextAreaInput({ label, current_value, - action, - width = "450px", + update_action, + size, }: InputProps) { + const width = + size === "small" ? "100px" : size === "medium" ? "250px" : "400px"; return ( - - {label} - + {label && ( + + {label} + + )}